3041
edycji
Nie podano opisu zmian |
|||
Linia 13: | Linia 13: | ||
* "Wypadający" najmłodszy bit zachowywany jest, aby później na podstawie jego wartości z komórki pamięci wybrać odpowiedni bajt (lewy bądź prawy). | * "Wypadający" najmłodszy bit zachowywany jest, aby później na podstawie jego wartości z komórki pamięci wybrać odpowiedni bajt (lewy bądź prawy). | ||
Adres bajtu (jako argument normalny) podlega również pre- i B-modyfikacji. Obie te operacje są niczym innym, jak dodawaniem modyfikatora do argumentu, wykonywanym w arytmometrze procesora. W wyniku tej operacji może więc wystąpić nadmiar, który w standardowym procesorze jest ignorowany. | |||
W | Przeróbka procesora zmienia to zachowanie. Pierwszy etap obliczania argumentu efektywnego pozostaje bez zmian: do pierwotnego argumentu dodawana jest pre-modyfikacja, a ewentualny nadmiar jest zaniedbywany. W następnym etapie dodawana jest B-modyfikacja, ale tym razem nadmiar zapamiętywany jest w dodatkowym rejestrze. Później, kiedy adres bajtowy przesuwany jest w prawo, aby otrzymać docelowy adres słowa w pamięci, na najstarszy bit adresu, zamiast zera, wsuwana jest wartość zapamiętanego nadmiaru. W ten sposób, używając B-modyfikacj można przygotować 17-bitowy adres bajtu tak, aby możliwe było zaadresowanie dowolnego bajtu w 64k słowowym bloku. | ||
Przykładowe konstrukcje używające 17-bit adresowania bajtów (w składni assemblera [[EMAS]]): | |||
<syntaxhighlight lang="asm"> | |||
LW r2, 0x9400 ; 0x9400 to adres słowa, w którym adresujemy bajt | |||
MD 1 ; wskazanie bajtu w słowie | |||
LB r1, r2+r2 ; załadowanie bajtu; adresem bajtowym staje się 2*r2+1 | |||
</syntaxhighlight> | |||
<syntaxhighlight lang="asm"> | |||
LW r5, 0xAAAA ; 0xAAAA to słowowy adres bazowy obszaru, który chcemy adresować | |||
LW r6, r5+r1 ; w r6 do adresu bazowego dodajemy również przesunięcie (indeks) przechowywany w rejestrze r1 | |||
RB r3, r5+r6 ; zapamiętanie bajtu pod bajtowym adresem 2*0xAAAA+r1 | |||
</syntaxhighlight> | |||
= Przerwanie programowe o wysokim priorytecie = | = Przerwanie programowe o wysokim priorytecie = |