前言
做編譯原理作業用到了,這裡就記錄一下吧。
第七個寄存器為專用寄存器,一般用來作為PC,指令計數器。
引用的課本: 《編譯原理及實踐》 Kenneth.C.Louden 機械工業出版社 2000.3
RO指令
寄存器指令 opcode r, s, t
-
HALT ~~~ 0, 0(0)
停止執行(操作數無意義)
HALT 0, 0 (0)
-
IN r, 0, 0
标準輸入流讀取一個值放入 reg[r]
IN 1, 0, 0 從标準輸入流讀取一個值放入寄存器 1中
-
OUT r, 0, 0
reg[r]輸出到标準輸出流
OUT 1, 0, 0 把寄存器1輸出到螢幕中
-
ADD ~~~ r, s, t
reg[r] = reg[s] + reg[t] , 即将寄存器 s 和 寄存器 t 中的值相加并放入寄存器 r 中
ADD 1, 2, 3 即寄存器 2 中的值加寄存器 3 中的值,放入寄存器1中即
ADD 1, 2, 3 reg[1] = reg[2] + reg[3]
-
SUB ~~~ r, s, t
reg[r] = reg[s] - reg[t], 解釋見ADD
SUB 1, 2 ,3 reg[1] = reg[2] - reg[3]
-
MUL ~~~ r, s, t
reg[r] = reg[s] ∗ * ∗ reg[t], 解釋見ADD
MUL1, 2, 3 reg[1] = reg[2] ∗ * ∗ reg[3]
-
DIV ~~~ r, s, t
reg[r] = reg[s] / / / reg[t], 解釋見ADD
DIV 1, 2, 3 reg[1] = reg[2] / / / reg[3]
RM指令
寄存器-存儲器指令 opcode r, d (s)
a = d + reg[s]
任何對dmem[a] 的引用若 a < 0 或者 a >= DADDR-SIZE時會産生DMEM-ERR
-
LD ~~~ r, d (s)
reg[r] = dMem[d + reg[s]] 将記憶體位址為 d + reg[s] 中的值轉入寄存器 r 中
LD 7, 0(1) 可以用該指令跳轉到 0 + reg[1]的位置
-
LDA ~~ r, d (s)
reg[r] = d + reg[s] 将位址 d + reg[s] 轉入寄存器 r 中
LDA 7, d(s) 可以用該指令進行跳轉到位置 a = d + reg[s]
-
LDC ~~ r, d (s)
reg[r] = d 将常數 d 裝入寄存器 r 中 (s 忽略無用)
LDC r, d (0)
-
ST ~~~~ r, d (s)
dMem[d + reg[s]] = reg[r] 将寄存器 r 中的值放入記憶體位址編号為 a = d + reg[s] 的空間中
ST r, d (s)
-
JLT ~~~ r, d (s)
if (reg[r] < < < 0) reg[pc_reg] = d + reg[s]
如果寄存器 r 中的值小于0, 則将位址a 放入pc寄存器(一般為寄存器7) , 相當于跳轉
-
JLE ~~~ r, d (s)
if (reg[r] ≤ \leq ≤ 0) reg[pc_reg] = d + reg[s]
-
JGE ~~~ r, d (s)
if (reg[r] ≥ \geq ≥ 0) reg[pc_reg] = d + reg[s]
-
JGT ~~~ r, d (s)
if (reg[r] > 0) reg[pc_reg] = d + reg[s]
-
JEQ ~~~ r, d (s)
if (reg[r] == 0) reg[pc_reg] = d + reg[s]
-
JNE ~~~ r, d (s)
if (reg[r] != 0) reg[pc_reg] = d + reg[s]