29.8.1. Akumulátorový, jednoduchý procesor

Při svých úvahách jsem se zabýval i možností konstrukce procesoru s jedním akumulátorem. Opět inspirován jednoduchostí PDP-8 jsem přišel s následujícím instrukčním formátem.

Obrázek 29.12.

 11  10   9   8   7   6   5   4   3   2   1   0
+---+---+---+---+---+---+---+---+---+---+---+---+
|  o p c o d e  | mode  |     a d d r e s s     |
+---+---+---+---+---+---+---+---+---+---+---+---+

Stejně jako u PDP-8 je instrukční slovo rozděleno na tři části.

Oproti PDP-8 jsem se rozhodl kódovat adresní mód jiným způsobem. Místo přiřazení vlastností jednotlivým bitům, jsem se rozhodl očíslovat možné kombinace bitů a těm přiřadit adresní mód. To mi umožní zavést adresní módy které u PDP-8 nejsou možné, případně na které by bylo nutno rozšiřit počet bitů specifikujících adresní mód.

Zvažoval jsem jaké módy zavést. Protože jednoakumulátorový procesor trpí nedostatkem registrů, je nutné tento nějak kompenzovat. V případě PDP-8 je tak činěno pomocí adresního módu nulté stránky paměti a aktuální stránky paměti. Rovněž je potřeba realizovat nepřímé adresování (Indirect, Deferred). Zcela určite jsem se rozhodl použí přímé a nepřímé adresování v nulté stránce.

Dále potřebuji možnost jak zavést jednoduše velké literály. U PDP-8 se musí tyto uložit buďto do nulté stránky v paměti, nebo do kódu v aktuální stránce. Pro jejich načtení se pak použije mód nulté nebo aktuální stránky. Nutlá stránka je malá a aktuánlí stránku nechci zavádět. Jednou z možností je použít následující buňku za instrukcí. Toto mě vede k adresnímu módu relativnímu k čítači instrukcí. Načtení dlouhého literálu z buňky za instrukcí je pak speciální případ adresování relativně k PC.

Tabulka 29.19. Adresní módy

módsyntaxepopisnázev
00nEA≡0n; OP=mem[0n]Zero Page
01(n)EA≡mem[0n]; OP=mem[EA]Zero Page Indirect
10PC(n)EA≡PC+n; OP≡mem[EA]PC Relative
10#nnEA≡PC+0; OP≡mem[PC+0]; PC++Long Literal
11 OP=SignEx(b5-b0)Nevyužito, nebo přímý krátký literál.

Protože jsem ponechal pro kód instrukce 4 bity, je možno zavést větší počet instrukcí než má PDP-8. Chtěl bych zavést instrukce pro sčítání a odčítání, pro logické operace OR, AND, NOT, skoky, rotace.

Tabulka 29.20. Instrukce

kódzápispopispoznámka
0000ADD opA+op→A 
0001SUB opA-op→A 
0010LD opop→A 
0011   
0100OR opop ∨ A → A 
0101AND opop ∧ A → A 
0110XOR opop xor A → A 
0111NOT op¬op → A 
1000INC opmem[EA]-- 
1001DEC opmem[EA]++ 
1010ST opstore: A→mem[EA] 
1011SKIPif Cond then PC+offset→PC4 bity kódují podmínku a 4 bity offset
1100JSR op Skok do podprogramu
1101JMP op Skok
1110GRPE Rozšiřující instrukce
1111GRPF Rozšiřující instrukce
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 .