29.6.2.1.1. Operační kód

Tato část instrukce kóduje samotnou instrukci a formát instrukce. Máme k dispozici 8 kódů které a 1 instrukční formát.

 11  10   9   8   7   6   5   4   3   2   1   0
+---+---+---+---+---+---+---+---+---+---+---+---+
|  opcode   |  modifier |    address/literal    |
+---+---+---+---+---+---+---+---+---+---+---+---+

V operačním kódu jsou kódovány instrukce, jenž potřebují přímý přístup do paměti, nebo přímou literální hodnotu. Vzhledem k omezenému počtu možností je třeba vybírat uvážlivě. Proto proberu jednotlivé možnosti.

AD

Instrukce sčítání. Obvykle má procesor dvě základní instrukce sčítání a to ADD a ADC. První provádí sčítání A+val→C,A a druhá provádí C,A+val→C,A. Liší se tedy tím, jestli je do sčítání zahrnut i byt přenosu C (Cary). Domnívám se že v praxi se lze omezit jen na jednu formu instrukce a to ADC. Vhodného efektu dosáhneme tím, jestli před sčítání C bit nastavíme, smažeme nebo necháme být.

        # Implementace ADD
        CLC
        AD  value
SB

Instrukce odečítání. Jako obvykle má procesor dvě základní instrukce pro odečítání a to SUB (A-value→C,A) a SBC/SBB (C,A-value→C,A). Vzhledem k nízkému počtu operačních kódů navrhuji tuto instrukci nazavádět. Lze ji totiž realizovat pomocí negace a sčítání.

        # Implemantace SBC/SBB
        ST      TMP     # uschování -1 do TMP
        CLA             # 0→A
        AD      value
        NA              # -A→A
        AD      TMP
        # Implementace SBC/SBB immediate (C,A - immediate → C,A)
        AD      -const
        # Implementace SBC/SBB
        ST      TMP
        LD      value
        NA              # -A→A
        AD      TMP
AN
AND je jedna ze skupiny logických instrukcí (AND,OR,XOR,NOT).
OR
Instrukci OR je možné realizovat softwarově.
LD

Instrukce Load nahraje hodnotu do akumulátoru. (value→A). Tuto instrukci je možné realizovat softwarově, stejně tak jako u počítače PDP-8 který ji nemá v základním souboru instrukcí.

        # LD pomocí AN
        CLA, NA         # 7777→A  (všechny bity 1)
        AN      value
        # LD pomocí AD
        CLA             # 0→A  (všechny bity 0)
        AD      value
ST
Instrukce Store uloží obsah akumulátoru do paměti.
BAL

Instrukce BAL je jediná instrukce skoku. Je udělána tak, aby pokryla všechny potřeby skoků. Používá standardní adresní možnosti jako všechny základní instrukce. Funkce vykonává postupně následující operace.

1. Operand → MAR
2. P → L
3. MA → P

Uložení adresy instrukce následující za instrukcí skoku do registru L umožňuje realizovat podprogramy.

opcodemnemopopis
000AD 
001AN 
010OR 
011LD 
100  
101ST 
110BAL 
111μcode 

Přemýšlím, které operační kód ještě do tabulky zahrnout. Jesli vložit OR,LD, jestli definovat instrukci pro „koprocessor“, atd.

Zbývajících 9 bitů instrukce od bitu 8 do bitu 0 určují operand. Horní tří bity 8-6 určují adresní mód a v závislosti na jejich hodnotě určují spodní bity přímou hodnotu, adresu nebo offset.

ModeNameSyntaxEffective AddressOperand Value
000Literal#n???Sign Extended [b5…b0]
001Zero Page Registernaddrmem[addr]
010Zero Page Indirect(n)mem[addr]mem[mem[addr]]
011ZPI Post Increment(n)+mem[addr]; Inc(mem[addr])mem[mem[addr]]
100ZPI Pre Decrement-(n)Dec(mem[addr]); mem[addr]mem[mem[addr]]
101Register Indirect A+offsetmem[A+offset]
110PC Relative PC+offsetmem[PC+offset]
111PC Relative Indirect mem[PC+offset]mem[mem[PC+offset]]
000   n     ;ZP
001  (n)    ;ZP
010  (n)+   ;ZP
011 -(n)    ;ZP
100  #n
101  ((n))  ;ZP
110  ([n])  ;PC   mem[n+PC]
111  [n]    ;PC

Podrobný popis adresních módů.

Přímý krátký literál.

Obsah adresního pole, bity b5…b0 je interpretován jako hodnota. Před použítím je znaménkový bit b5 replikován do všech bitů vyššího bajtu. Tedy dojde k rozšíření znaménka. Tímto způsobem je možné přímo zapsat hodnoty v rozsahu od -32 do 31.

M undefinedO ← Sign Extend b5…b0
Zero Page Register

M ← 000000b5…b0
O ← mem[M]
Zero Page Indirect

M ← 000000b5…b0
O ← mem[M]
M ← O
O ← mem[M]
Zero Page Indirect Post Increment

M ← 000000b5…b0
O ← mem[M]
M ← O
O ← mem[M]
...
Zero Page Indirect Pre Decrement

M ← 000000b5…b0
O ← mem[M]
O ← O-1
mem[M] ← O
M ← O
O ← mem[M]
...

M ←
O ← mem[M]
...

M ←
O ← mem[M]
...

M ←
O ← mem[M]
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 .