Modyfikacje sprzętowe procesora: Różnice pomiędzy wersjami

Przejdź do nawigacji Przejdź do wyszukiwania
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.
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ć przeniesienie, które w standardowym procesorze jest ignorowane.


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.
Przeróbka procesora zmienia to zachowanie. Pierwszy etap obliczania argumentu efektywnego pozostaje bez zmian: do pierwotnego argumentu dodawana jest pre-modyfikacja, a ewentualne przeniesienie jest zaniedbywane. W następnym etapie dodawana jest B-modyfikacja, ale tym razem przeniesienie zapamiętywane 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 zawartość zapamiętanego przeniesienia. 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]]):
Przykładowe konstrukcje używające 17-bit adresowania bajtów (w składni assemblera [[EMAS]]):
Linia 30: Linia 30:
  RB r3, r5+r6    ; zapamiętanie bajtu pod bajtowym adresem 2*0xAAAA+r1
  RB r3, r5+r6    ; zapamiętanie bajtu pod bajtowym adresem 2*0xAAAA+r1
</syntaxhighlight>
</syntaxhighlight>
17-bitowe adresowanie bajtów może rodzić problemy w specyficznych przypadkach użycia go w oprogramowaniu pisanym na oryginalny procesor. Rozpatrzmy następujący przykład:
<syntaxhighlight lang="asm">
LW r2, 0x3b00
LW r3, -12
MD r2
LB r1, r2+r3
</syntaxhighlight>
Jeśli przeniesienia przy obliczaniu argumentu normalnego są zaniedbywane (jak w oryginalnym procesorze), adres bajtowy zostanie obliczony zgodnie z intencją programisty w następujący sposób:
# argument pierwotny = '''0x3b00'''
# dodanie pre-modyfikacji (0x3b00) = '''0x7600''' (przeniesienie = 0)
# dodanie B-modyfikacji (-12) = '''0x75f4''' (przeniesienie = 1)
# przesunięcie w prawo dla otrzymania adresu bajtowego = '''0x3afa'''
W kroku 3 występuje przeniesienie, ponieważ arytmometr do argumentu dodaje B-modyfikację, która w zapisie U2 wygląda: 0xfff4. Jeśli procesor jest zmodyfikowany, to zapamiętane przeniesienie zostanie w ostatnim kroku użyte i wsunięte na najstarszą pozycję ostatecznego wyniku, dając w efekcie adres '''0xbafa'''.


= Przerwanie programowe o wysokim priorytecie =
= Przerwanie programowe o wysokim priorytecie =

Menu nawigacyjne