Jak je vidět na obrázku 29.2 – „Formáty instrukcí SOC-8“ v základním tvaru instrukce jsou pro operační kód k dispozici pouze 3 bity. To nám dává 8 možných kombinací. Minimálně jedna musí být použita pro další tavari instrukcí jako jsou například „mikokódované“ instrukce. Tím se prostor ještě zmenší. Při výběru jsem vycházel z instrukční sady PDP-8 kterou jsem se snažil modifikovat. PDP-8 má tyto instrukce:
0xxx AND ; operand ∧ AC → AC 1xxx TAD ; operand + AC → AC 2xxx ISZ ; increment operand and skip if zero 3xxx DCA ; AC → pameť, 0 → AC 4xxx JMS ; skok do podprogramu 5xxx JMP ; skok 6xxx IOT ; I/O instrukce 7xxx OPR ; mikrokódované instrukce
Nejprve jsem zvážil odstranit instrukci IOT. Domnívám se, že se I/O zařízení dají připojit jako část paměti. Ušetřím tím právě jednu kombinaci pro jinou instrukci. Pokud bych chtěl instrukci IOT mohl bych ji realizovat v prostoru mikrokódovaných instrukcí například jako:
11 10 9 8 7 6 5 4 3 2 1 0 +---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | IOT | DEV | FCE | "mikrokódované" instrukce +---+---+---+---+---+---+---+---+---+---+---+---+
Oproti PDP-8 snížím množství dostupných zařízení z 64 na 8.
Další úsporou v instrukční sadě je sjednotit instrukce JMS a JMP do jedné instrukce BAL. Tato instrukce je modelována podle BAL isntrukce například z procesoru MIPS. Jedná se o instrukci skoku která do speciálního registru L uloží adresu instrukce následující po instrukci skoku. Tedy návratovou adresu. Cíl skoku, je-li to procedura či funkce, je pak zodpovědný za uschování této adresy.
... BAL FCE ; volání podprogramu NOP ;← zde se pokračuje po návratu ... FCE: ; ulož L do zásobníku ... proveď co je potřeba FLOOP: ; nějaká smyčka BAL FLOOP ; obnov L ze zásobníku ; prověď skok na adresu v L