操作种类:
β指令格式小结
寄存器 符号 R31
用法 通常为零 异常指针 堆栈指针 连接指针 栈帧基址指针
10xxxx Rc Ra Rb
:Reg[Rc] ← Reg[Ra] op Reg[Rb]OP(Ra,Rb,Rc)
R31 XP SP LP BP
R30 R29 R28 R27
操作码:ADD(加法),SUB(减法),MUL(乘法),DIV(除法)
AND(按位与),OR(按位或),XOR(按位异或)
CMPEQ(相等),CMPLT(小于),CMPLE(小于或等于)[若为真则结果=1;若为假则结果=0]
SHL(左移),SHR(右移 w/o符号扩展),SRA(右移 w/ 符号扩展)
11xxxx Rc Ra 直接量(二进制补码)
OPC(Ra,直接量,Rc): Reg[Rc] ← Reg[Ra] op SEXT(直接量)
其他:
31
操作码:ADD(加法),SUB(减法),MUL(乘法),DIV(除法)
AND(按位与),OR(按位或),XOR(按位异或)
CMPEQ(相等),CMPLT(小于),CMPLE(小于或等于)[若为真则结果=1;若为假则结果=0]
SHL(左移),SHR(右移 w/o符号扩展),SRA(右移 w/ 符号扩展)
26 25 21 20 16 151110
01xxxx Rc Ra 直接量(二进制补码) LD(Ra,直接量,Rc): Reg[Rc] ← Mem[Reg[Ra] + SEXT(直接量)]
操作代码表:(*可选择的操作码)
ST(Rc,直接量,Ra): Mem[Reg[Ra] + SEXT(直接量)] ← Reg[Rc] JMP(Ra,Rc): Reg[Rc] ← PC + 4; PC ← Reg[Ra] BEQ/BF(Ra,label,Rc): Reg[Rc] ← PC + 4; if Reg[Ra] = 0 then PC ← PC + 4 + 4*SEXT(直接量) BNE/BT(Ra,label,Rc): Reg[Rc] ← PC + 4; if Reg[Ra] ≠ 0 then PC ← PC + 4 + 4*SEXT(直接量)
LDR(Ra,label,Rc): Reg[Rc] ← Mem[PC + 4 + 4*SEXT(直接量)]
2:0
5:3 000
001 010 011 100 101 110 111
000 LD ADD AND ADDC ANDC
001 ST SUB OR SUBC ORC
010
MUL* XOR MULC* XORC
011
JMP DIV*
DIVC*
100
CMPEQ SHL CMPEQCSHLC
101
BEQ CMPLT SHR CMPLTCSHRC
110
BNE CMPLE SRA CMPLECSRAC
111
LDR