77.5.3.1.1. Operandy instrukcí

V řadě případů je operand instrukce specifikován 3-mi nebo 6-ti bity. Pokud je jen tříbitový, jedná se o registr. Pokud je 6-ti bitový, jedná se o informaci adresním módu a registr.

+---+---+---+---+---+---+
|   Mode    |    Reg    |
+---+---+---+---+---+---+

V poli Reg je číslo registru. Registry jsou číslovány od R0 až do R7. Registr R7 má zvláštní postavení mezi registry, je to čítač instrukcí PC, je to tedy ukazatel do paměti na další instrukci.

ModeNameSyntaxEffect
000RegisterRnop≡Rn
001Register Deferred(Rn)op≡mem[Rn]
010Autoincrement(Rn)+op≡mem[Rn]; inc Rn
011Autoincrement Deferred@(Rn)+op≡mem[mem[Rn]]; inc Rn
100Autodecrement-(Rn)dec Rn; op≡mem[Rn]
101Autodecrement Deferred@-(R)dec Rn; op=mem[mem[Rn]]
110Indexx(Rn)x=mem[PC]; inc PC; op=mem[x+Rn]
111Index Deferred@x(Rn)x=mem[PC] inc PC; op≡mem[mem[x+Rn]]

Ponechání čítače instrukcí mezi běžnými registry nám poskytuje další adresní módy. Není třeba zavádět nové operace, protože žádaného výsledku dosáhneme použitím vybraného adresního módu společně s registrem R7. Pro tato použití je zavedena nová syntaxe.

Pokud potřebujeme načíst do vybraného registru, například R0 přímou hodnotu, zapíšeme to

        MOV 23,R0

Tato instrukce zabírá v programu dvě slova a jedná se vlastně o použití registru R7 s autoinkrementací (mód 010).

        MOV (R7)+, R0
        DW 23
        NOP

Technicky to znamená že se přečtě obsah slova na adrese kam ukazuje R7, což je slovo následující za aktuální instrukcí MOV. Tento obsah se uloží do registru R0. Poté se R7 zvětší o 2 což zajistí že bude ukazovat na instrukci nacházející se za přečteným literálním slovem, tedy na instrukci NOP.

ModeNameSyntaxEffect
010Immediate#nop≡mem[PC]; inc PC
011Absolute@#nop≡mem[mem[PC]]; inc PC
110Relativenx=mem[PC]; inc PC; op≡mem[x+PC]
111Relative Deferred@nx=mem[PC]; inc PC; op=mem[mem[x+PC]]

Procesor nemá mezi registry žádný zásobníkový ukazatel. Ono ho ani není třeba. Jako zásobník se dá totiž vzhledem k bohatým adresním módům použit libovolný registr. Bývá zvykem jako zásobník použivat rgeistr R6. Operace PUSH a POP nad zásobníkem se dají zapsata takto:

        ; PUSH R0
        MOV R0,-(R6)
        ; POP R1
        MOV (R6)+, R1

Instrukce návratu z podprogramu se pak dá zapsat takto:

        ; RETURN
        MOV (R6)+, R7
Licence Creative Commons
Elektronika a počítače, jejímž autorem je Radek Hnilica, podléhá licenci Creative Commons Uveďte autora-Nevyužívejte dílo komerčně-Zachovejte licenci 3.0 Česká republika .