OVERTURE架構(gòu)指令集及匯編器
概述
OVERTURE指令集是游戲圖靈完備(Turing Complete)中的第一款虛擬計(jì)算機(jī)所使用的指令集。這里將描述OVERTURE指令集,為實(shí)際的CPU設(shè)計(jì)做參考。該指令集共有16條指令、2條可選的拓展指令。
指令集描述

OVERTURE指令集如上圖所示,分為4部分,分別為:
- 立即數(shù)模式。低6位數(shù)據(jù)作為立即數(shù)寫入Reg0. 通過立即數(shù)可以寫入0~63的字面值。
- 計(jì)算模式。通過低3位選擇運(yùn)算類型。從Reg1和Reg2中讀取數(shù)值并將計(jì)算結(jié)果保存在Reg3. 可能的運(yùn)算有OR, NAND, NOR, AND, ADD, SUB.
- 復(fù)制模式。將源寄存器(Source Reg)的值復(fù)制到目的寄存器(Dest Reg)。
- 比較模式。也稱跳轉(zhuǎn)模式。讀取Reg3中的值并和指定的條件比較。條件滿足時(shí)跳轉(zhuǎn)到Reg0的位置。Reg0內(nèi)的值不能為0. (用作指示器)
寄存器
OVERTURE指令集架構(gòu)可以最多控制8個(gè)寄存器/設(shè)備。在圖靈完備游戲中,Reg0~Reg5為通用寄存器,Reg6為IO設(shè)備。
計(jì)算命令
| Type Code | Don't Care | Opcode | Operation |
| :-------: | :--------: | :----: | :-------: |
| ? ?01 ? ? | ? ?000 ? ? | ?000 ? | ? ?OR ? ? |
| ? ?01 ? ? | ? ?000 ? ? | ?001 ? | ? NAND ? ?|
| ? ?01 ? ? | ? ?000 ? ? | ?010 ? | ? ?NOR ? ?|
| ? ?01 ? ? | ? ?000 ? ? | ?011 ? | ? ?AND ? ?|
| ? ?01 ? ? | ? ?000 ? ? | ?100 ? | ? ?ADD ? ?|
| ? ?01 ? ? | ? ?000 ? ? | ?101 ? | ? ?SUB ? ?|
比較命令
| Type Code | Don't Care | Opcode | Operation |
| :-------: | :--------: | :----: | :-------: |
| ? ?11 ? ? | ? ?000 ? ? | ?000 ? | ? Never ? |
| ? ?11 ? ? | ? ?000 ? ? | ?001 ? | ? ?=0 ? ? |
| ? ?11 ? ? | ? ?000 ? ? | ?010 ? | ? ?<0 ? ? |
| ? ?11 ? ? | ? ?000 ? ? | ?011 ? | ? ?<=0 ? ?|
| ? ?11 ? ? | ? ?000 ? ? | ?100 ? | ?Always ? |
| ? ?11 ? ? | ? ?000 ? ? | ?101 ? | ? ?!=0 ? ?|
| ? ?11 ? ? | ? ?000 ? ? | ?110 ? | ? ?>=0 ? ?|
| ? ?11 ? ? | ? ?000 ? ? | ?111 ? | ? ?>0 ? ? |
拓展尋址空間
目前PC的尋址空間為255byte. 為了增加實(shí)用性,增加一條規(guī)定:
- 程序跳轉(zhuǎn)時(shí),如果Reg0中的值為0,那么選擇跳轉(zhuǎn)到Reg1(低8位)和Reg2(高8位)指示的位置。
通過增加地址位數(shù),可以獲得65kbyte的尋址空間。
拓展指令
這部分是在OVERTURE指令集基礎(chǔ)上拓展的指令,增加了對(duì)RAM的讀寫操作,使得整個(gè)系統(tǒng)更加實(shí)用。
- 計(jì)算模式下的內(nèi)存指令。把Reg3處的值存儲(chǔ)在RAM中Reg0所指示的位置?;蛘甙裄eg0所指示的位置的RAM值讀取到Reg3處。
| Type Code | Don't Care | Opcode | Operation ?|
| :-------: | :--------: | :----: | :--------: |
| ? ?01 ? ? | ? ?000 ? ? | ?110 ? | Store Word |
| ? ?01 ? ? | ? ?000 ? ? | ?111 ? | Load Word ?|
- 如果Reg0中的值為0,那么選擇Reg1(低8位)和Reg2(高8位)作為RAM的地址。
匯編器