29.3.2. Instrukční sada

29.3.2.1. Základní instrukce
29.3.2.2. Adresní módy
29.3.2.3. Mikrokódové instrukce

O struktuře a jednoduchosti návrhu vypoví instrukční sada. Nejdříve tedy jak vypadá formát instrukcí. Po úvaze jsem přišel s takovým rozdělením polí v instrukčním slově které odpovídá oktalovým číslicím. Tedy dělím instrukční slovo po trojcích bitů. Toto dovoluje velmi snadno „číst“ instrukce přímo z oktalového výpisu paměti.

Obrázek 29.2. Formáty instrukcí SOC-8

 11  10   9   8   7   6   5   4   3   2   1   0
+---+---+---+---+---+---+---+---+---+---+---+---+
|    OP     |    MOD    |         DATA          |   základní tvar instrukcí
+---+---+---+---+---+---+---+---+---+---+---+---+
| 1   1   1 |   GROUP   |         μcode         |   "mikrokódované" instrukce
+---+---+---+---+---+---+---+---+---+---+---+---+
| 1   1   1   1   1   1 |       instrukce       |   speciální rozšíření
+---+---+---+---+---+---+---+---+---+---+---+---+

Obrázek je velmi orientační.

Pro jednoduchost, tentokrát nikoliv konstrukční ale jednoduchost programování ve strojovém kódu, jsem umístnil všechna pole tak aby byla na hrnicích trojic bitů. Instrukce lze pak velmi snadno číst i psát v oktalovém zápisu. Je tomu tak proto, že jsem se rozhodl prodloužit počet bitů adresního módu ze dvou které má PDP-8 na tři. Zvětšeným počtem adresních módů sice naroste počet logických hradel v obvodu dekódování a výpočtu adresy a získávání operandu. Získám tak ovšem variablinější architekturu která nebude mít některé vlastnosti které mi na PDP-8 vadily. Jedná se zejména o adresní režimy v aktuální stránce. Tyto nahrazuji režimy PC Relative.

Tabulka 29.7.

instrukcenázevpopis
000 rzi sss sssLDnahrávání, operand→A
001 rzi sss sssADsčítání: operand+(A,C)→(C,A)
010 rzi sss sssANlogický součin: operand∧A→A
011 rzi sss sssORlogický součet: operand∨A→A
100 rzi ddd dddSTukládání: A→mem[EA]
101 0zi sss sssDSZDecrement operand and Skip if Zero
101 1zi sss sssISZIncrement operand and Skip if Zero
110 0pi aaa aaaB, BALskok: (PC→L;) EA→PC
110 1pi aaa aaaB, BALskok: (PC→L;) EA→PC
111 xxx xxx xxxμcode 

Tabulka je prvním pokusem sestavit instrukční sadu základních instrukcí. Vzhledem k tomu že na kódování základních instrukcí mám k dispozici jen 3 bity jsem omezen 8-mi kombinacemi. Vycházím tedy z instrukční sady PDP-8 kterou se snažím různě modifikovat.

Rozdíly oproti TX-0 jsou v počtu bitů kódujících základní instrukce. V tomto návrhu používám tři bity (TX0 používá jen 2).

Další zajímavou modifikací je instrukce skoku BL (Branch and Link). Právě použítím registru L jako jednoůrovňového hardwérového zásobníku umožňuje realizovat jednoduše podprogramy. Registr L je přístupný pro další práci a je tak možno programově realizovat víceúrovňový zásobník v operační paměti počítače. Tímto sjednocením instrukce skoku a volání podprogramu jsem oproti PDP-8 ušetřil jeden operační kód. Rovněž jsem se rozhodl vypustit instrukci ISZ PDP-8 a taktéž vstupně výstupní operaci IOT. ISZ lze realizovat dvojcí instrukcí, například

        AD #const
	  SKP Z

Ve skutečnosti je možností nečekaně více protože přičtením záporné konstanty realizujeme vlastně snižování hodnoty v A. Rovněž můžeme použít logickou operaci a provádět cyklus podle logické podmínky. Zkráka můžem si nakombinovat libovolnou operaci AD, AN, OR s libovolnou podmínkou v mikrooperaci SKP.

Devět bitů základní instrukce, následujících za kódem instrukce se dále dělí na dvě části. Adresní mód a číslo. Pro jednoduchost jsem se rozhodl FIXME:

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 .