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ód | syntaxe | popis | název |
---|---|---|---|
00 | n | EA≡0n; OP=mem[0n] | Zero Page |
01 | (n) | EA≡mem[0n]; OP=mem[EA] | Zero Page Indirect |
10 | PC(n) | EA≡PC+n; OP≡mem[EA] | PC Relative |
10 | #nn | EA≡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ód | zápis | popis | poznámka |
---|---|---|---|
0000 | ADD op | A+op→A | |
0001 | SUB op | A-op→A | |
0010 | LD op | op→A | |
0011 | |||
0100 | OR op | op ∨ A → A | |
0101 | AND op | op ∧ A → A | |
0110 | XOR op | op xor A → A | |
0111 | NOT op | ¬op → A | |
1000 | INC op | mem[EA]-- | |
1001 | DEC op | mem[EA]++ | |
1010 | ST op | store: A→mem[EA] | |
1011 | SKIP | if Cond then PC+offset→PC | 4 bity kódují podmínku a 4 bity offset |
1100 | JSR op | Skok do podprogramu | |
1101 | JMP op | Skok | |
1110 | GRPE | Rozšiřující instrukce | |
1111 | GRPF | Rozšiřující instrukce |