|
Argumenty instrukcji procesora MC68000 |
ARGUMENT | OPIS |
Dx | Rejestr danych |
Ax | Rejestr adresowy |
(Ax) | Ax ukierunkowany |
(Ax)+ | (Ax) z po-dodaniem |
-(Ax) | (Ax) z przed-odjęciem |
$nnnn(Ax) | (Ax) z przemieszczeniem |
$nnnn(PC) | PC z przemieszczeniem |
$nn(Ax, Rx.w,l) | (Ax) z indeksowaniem |
$nn(PC, Rx.w,l) | PC z indeksowaniem |
$aaaaaaaa | Adres komórki pamięci |
#$dddddddd | Dana natychmiastowa |
SR | Rejestr statusu |
CCR | Rejestr kodów warunkowych |
USP | Wskaźnik stosu |
Procesor MC68000 posiada 14 argumentów instrukcji (trybów adresowania).
Objaśnienia poszczególnych ich części:
Rx - rejestr Dx lub Ax.
PC - licznik instrukcji programu.
$nn - wyrażenie 8-bitowe (*).
$nnnn - wyrażenie 16-bitowe (*).
$aaaaaaaa - wyrażenie 16- lub 32-bitowe (*).
#$dddddddd - wyrażenie 8-, 16- lub 32-bitowe (*).
(*) - jeśli wyrażenie nie zostanie podane, oznacza wartość 0.
Założenie: |
x = 0-7
a, d, n = 0-9, A-F |
Data register direct
Dx - |
32-bitowy rejestr danych (D0-D7). Jeśli instrukcja ma rozmiar:
".B" - 1 najmłodszy bajt.
".W" - 2 najmłodsze bajty.
".L" - 4 bajty. |
Address register direct
Ax - |
32-bitowy rejestr adresowy (A0-A7, zamiast A7 można pisać SP).
Jeśli instrukcja ma rozmiar:
".W" - 2 najmłodsze bajty.
".L" - 4 bajty. |
Address register indirect
(Ax) - |
jeśli instrukcja ma rozmiar:
".B" - 1 komórka pamięci o adresie w rejestrze Ax.
".W" - 2 komórki pamięci, o adresach: Ax i Ax+1.
".L" - 4 komórki pamięci, o adresach: Ax, Ax+1, Ax+2 i Ax+3. |
Adres tego argumentu jest adresem, znajdującym się w rejestrze Ax.
Po użyciu przez instrukcję, adres w rejestrze Ax nie zmienia się.
Address register indirect
with predecrement
-(Ax) - |
jeśli instrukcja ma rozmiar:
".B" - odejmuje 1 od Ax; 1 komórka pamięci o adresie w rejestrze Ax.
".W" - odejmuje 2 od Ax; 2 komórki pamięci, o adresach: Ax i Ax+1.
".L" - odejmuje 4 od Ax; 4 komórki pamięci, o adresach: Ax, Ax+1, Ax+2 i Ax+3. |
Przed użyciem przez instrukcję, adres w rejestrze Ax jest zmniejszany o 1, 2 lub 4.
Jeśli rejestrem Ax jest wskaźnik stosu (A7) i instrukcja ma rozmiar ".B",
to adres w rejestrze A7 jest zmniejszany o 2, aby zachować jego parzystość.
Następnie adres tego argumentu jest adresem, który znajduje się w rejestrze Ax.
Address register indirect
with postincrement
(Ax)+ - |
jeśli instrukcja ma rozmiar:
".B" - 1 komórka pamięci o adresie w rejestrze Ax; dodaje 1 do Ax.
".W" - 2 komórki pamięci, o adresach: Ax i Ax+1; dodaje 2 do Ax.
".L" - 4 komórki pamięci, o adresach: Ax, Ax+1, Ax+2 i Ax+3; dodaje 4 do Ax. |
Adres tego argumentu jest adresem, znajdującym się w rejestrze Ax.
Po użyciu przez instrukcję, adres w rejestrze Ax jest zwiększany o 1, 2 lub 4.
Jeśli rejestrem Ax jest wskaźnik stosu (A7) i instrukcja ma rozmiar ".B",
to adres w rejestrze A7 jest zwiększany o 2, aby zachować jego parzystość.
Address register indirect
with 16-bit displacement
$nnnn(Ax) - rejestr adresowy ukierunkowany z 16-bitowym przemieszczeniem:
$8000(Ax) - $FFFF(Ax) - komórka pamięci o adresie w rejestrze Ax -32768 do -1 bajtów.
$0000(Ax) - komórka pamięci o adresie w rejestrze Ax.
$0001(Ax) - $7FFF(Ax) - komórka pamięci o adresie w rejestrze Ax +1 do +32767 bajtów.
Jeśli instrukcja ma rozmiar:
".B" - 1 komórka pamięci o adresie $nnnn(Ax).
".W" - 2 komórki pamięci, o adresach: $nnnn(Ax) i $nnnn(Ax)+1.
".L" - 4 komórki pamięci, o adresach: $nnnn(Ax), $nnnn(Ax)+1, $nnnn(Ax)+2 i $nnnn(Ax)+3.
Adres tego argumentu jest sumą wartości rejestru adresowego Ax i 16-bitowego przemieszczenia.
Po użyciu przez instrukcję, adres w rejestrze Ax nie zmienia się.
Address register indirect
with 8-bit displacement and index
$nn(Ax, Rx.w,l) - |
rejestr adresowy ukierunkowany z 8-bitowym
przemieszczeniem i indeksowaniem: |
$80(Ax, Rx.w,l) - $FF(Ax, Rx.w,l) - komórka pamięci o adresie w rejestrze
Ax -128 do -1 bajtów.
$00(Ax, Rx.w,l) - komórka pamięci o adresie w rejestrze Ax.
$01(Ax, Rx.w,l) - $7F(Ax, Rx.w,l) - komórka pamięci o adresie w rejestrze
Ax +1 do +127 bajtów.
Jeśli wartość rejestru "Rx.w" wynosi:
$nnnn8000 - $nnnnFFFF - komórka pamięci o adresie w rejestrze Ax -32768 do -1 bajtów.
$nnnn0000 - komórka pamięci o adresie w rejestrze Ax.
$nnnn0001 - $nnnn7FFF - komórka pamięci o adresie w rejestrze Ax +1 do +32767 bajtów.
Jeśli używa się rejestru "Rx.l", to komórka pamięci ma adres Ax+Rx.
Jeśli instrukcja ma rozmiar:
".B" - 1 komórka pamięci o adresie $nn(Ax, Rx.w,l).
".W" - 2 komórki pamięci, o adresach: $nn(Ax, Rx.w,l) i $nn(Ax, Rx.w,l)+1.
".L" - 4 komórki pamięci, o adresach: $nn(Ax, Rx.w,l), $nn(Ax, Rx.w,l)+1,
$nn(Ax, Rx.w,l)+2 i $nn(Ax, Rx.w,l)+3.
Adres tego argumentu jest sumą wartości rejestru adresowego Ax,
8-bitowego przemieszczenia i rejestru indeksującego Rx.
Po użyciu przez instrukcję, adres w rejestrze Ax i wartość rejestru Rx nie zmienia się.
Memory address
$aaaaaaaa - wartość 16- lub 32-bitowa. Jeśli instrukcja ma rozmiar:
".B" - 1 komórka pamięci o adresie $aaaaaaaa.
".W" - 2 komórki pamięci, o adresach: $aaaaaaaa i $aaaaaaaa+1.
".L" - 4 komórki pamięci, o adresach: $aaaaaaaa, $aaaaaaaa+1, $aaaaaaaa+2 i $aaaaaaaa+3.
Immediate data
#$dddddddd - |
wartość 8-, 16- lub 32-bitowa. Jeśli instrukcja ma rozmiar:
".B" - 1 bajt o wartości $dd.
".W" - 2 bajty o wartości $dddd.
".L" - 4 bajty o wartości $dddddddd. |
Status Register
SR - 16-bitowy rejestr statusu. Instrukcje operują na całym rejestrze SR.
Condition Code Register
CCR - |
8-bitowy rejestr kodów warunkowych. Jest to najmłodszy bajt rejestru SR.
Instrukcje operują na całym rejestrze CCR. |
User Stack Pointer
USP - |
32-bitowy wskaźnik stosu (rejestr A7, zrealizowany jako dwa rejestry sprzętowe). Gdy
procesor pracuje w trybie "użytkownika" (User mode), do dyspozycji jest rejestr USP.
Natomiast, jeśli procesor działa w trybie "nadzorcy" (Supervisor mode), to wykorzysty-
wany jest rejestr SSP (Supervisor Stack Pointer). |