Informacje dodatkowe     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).