类别
|
说明
|
运算类
|
寄存器数据算术逻辑运算
|
访存类
|
主存储器访问(Load/Store)
|
跳转类
|
分支跳转(控制转移、条件与非条件)
|
特殊类
|
对诸如程序计数器PC等特殊寄存器操作的特殊指令
|
访存和寻址指令:
F1:寄存器寻址
Opcode
|
RC
|
RA
|
RB
|
F2:偏移量间接寻址
Opcode
|
RC
|
RA
|
Offset14
|
31 24 19 14 0
F3:绝对寻址
Opc.
|
Address30
|
31 30 0
F4:PC间接偏移寻址
Opcode
|
CC
|
Offset19
|
31 24 19 0
无访存操作的指令:
F5:寄存器操作
Opcode
|
DEST
|
SRCA
|
SRCB
|
31 24 19 14 5 0
F6:寄存器和立即数操作
Opcode
|
DEST
|
SRCA
|
Immedicate14
|
31 24 19 14 0
F7:立即数操作
Opcode
|
DEST
|
Immediate19
|
31 24 19 0
F8:特殊寄存器操作
Opcode
|
RC
|
SA
|
|
F9:特殊寄存器操作
Opcode
|
SC
|
RB
|
31 24 19 5 0
F10:可用于多种操作
Opcode
|
Imm4
|
31 24 4 0
F11:可用于多种操作
Opcode
|
|
名称
|
含义
|
Opcode
|
指令操作码
|
RA RB RC
|
通用寄存器地址,作为访存和特殊指令的源和目的操作数、存储器地址、或索引寄存器
|
Offset n
|
地址偏移量常数,条件跳转的目标地址,如n位
|
Address30
|
绝对地址
|
CC
|
条件跳转码
|
SRCA SRCB DEST
|
算术和逻辑运算的源和目的寄存器地址
|
Immediate n
|
算术和逻辑运算的立即数,也用在软件中断中,如n位
|
Imm n
|
Immediate n的缩写
|
SA SC
|
特殊寄存器的地址
|
名称
|
说明
|
REG
|
寄存器阵列(通用寄存器)
|
rA,rC
|
寄存器REG[RA],REG[RB]
|
rB
|
寄存器REG[RB]或者是在最低两位Offset14再扩展00,01,10,11
|
cc
|
跳转条件码CC
|
srcA,dest
|
寄存器REG[SRCA],REG[DEST]
|
srcB
|
寄存器REG[SRCB]或Immediate14
|
sA,sC
|
特殊寄存器SA和SC
|
MEM[n]
|
扩展寄存器的地址n
|
N,Z,C,V
|
状态标志位
|
操作符
|
说明
|
A?expr
|
赋值
|
A?àB
|
交换
|
A>>B
|
将A右移B指定的位数
|
A<<B
|
将A左移B指定的位数
|
A>>>B
|
将A循环右移B指定的位数
|
{A,B}
|
拼接
|
A|B
|
按位逻辑“或”
|
A&B
|
按位逻辑“与”
|
A^B
|
按位逻辑“异或”
|
~A
|
按位求反
|
A + B
|
加
|
A - B
|
减
|
助记符
|
名称
|
格式
|
说明
|
LDU
LDU.D
LDU.B
|
装载无符号字
装载无符号半字
装载无符号字节
|
F1,2
F1,2
F1,2
|
rC?MEM[rA+rB](字)
rC?MEM[rA+rB](半字)
rC?MEM[rA+rB](字节)
|
LDS
LDS.D
LDS.B
|
装载有符号字
装载有符号半字
装载有符号字节
|
F1,2
F1,2
F1,2
|
rC?MEM[rA+rB](字)
rC?MEM[rA+rB](半字)
rC?MEM[rA+rB](字节)
|
ST
ST.D
ST.B
|
存储字
存储半字
存储字节
|
F1,2
F1,2
F1,2
|
MEM[rA+rB]?rC
MEM[rA+rB]?rC(低16位半字)
MEM[rA+rB]?rC(低8位字节)
|
SWP
|
交换字
|
F1,2
|
rC?MEM[rA+rB]
|
助记符
|
名称
|
格式
|
如果cc, 则执行
|
BGT
BLE
BGE
BLT
BHI
BLS
|
符号数大于时跳转
符号数小于等于时跳转
符号数大于等于时跳转
符号数小于时跳转
无符号数大于时跳转
无符号数小于等于时跳转
|
F4
F4
F4
F4
F4
F4
|
~((N^V)|Z) PC?PC+{Offset19,00}
(N^V)|Z PC?PC+{Offset19,00}
~(N^V)|Z PC?PC+{Offset19,00}
(N^V)&~Z PC?PC+{Offset19,00}
~(C|Z) PC?PC+{Offset19,00}
C|Z PC?PC+{Offset19,00}
|
BPL
BMI
BNE
BEQ
BVC
BVS
BCC
BCS
|
正数时跳转
负数时跳转
不等时跳转
相等时跳转
无溢出时跳转
溢出时跳转
无进位时跳转
有进位时跳转
|
F4
F4
F4
F4
F4
F4
F4
F4
|
~N PC?PC+{Offset19,00}
N PC?PC+{Offset19,00}
~Z PC?PC+{Offset19,00}
Z PC?PC+{Offset19,00}
~V PC?PC+{Offset19,00}
V PC?PC+{Offset19,00}
~C PC?PC+{Offset19,00}
C PC?PC+{Offset19,00}
|
BT
BF
|
为真时跳转
为假时跳转
|
F4
F4
|
true PC?PC+{Offset19,00}
false
|
XXX.A
|
带.A参数
|
F4
|
对于上面的指令,延迟指令都会执行;但当带有.A参数时,如果跳转未执行,则放弃延迟槽指令。
|
CALL
JMP
RET
SWI
RET1
|
调用
跳转
返回
软件中断
中断返回
|
F3
F9
F9
F10
F11
|
RPC?PC,PC?{Address30,00}执行延迟槽指令
PC?rB 执行延迟槽指令
PC?rB 执行延迟槽指令
PC?VBR|{1,Imm4,000}保存处理器状态
恢复保存处理器状态
|
HALT
|
中止
|
F11
|
中止并等待复位
|
标志位
|
名称
|
计算
|
带.F参数的运算类指令
|
N
|
负
|
dest[31]
|
所有指令
|
Z
|
零
|
~(|dest[31,0])
|
所有指令
|
C
|
进位
|
dest[32]
~dest[32]
srcA[srcB-1]
0
未定义
|
ADD,ADDC,LSL
SUB,SUBC
LSR ,ASR ,ROT ,if srcB>0
LSR ,ASR ,ROT ,if srcB=0
其他指令
|
V
|
溢出
|
Carry[32]~Carry[31]
未定义
|
ADD,ADDC,SUB,SUBC
其他指令
|
助记符
|
名称
|
格式
|
说明
|
ADD
ADDC
SUB
SUBC
|
加
带进位位加
减
带借位位减
|
F5,6
F5,6
F5,6
F5,6
|
dest ? srcA + srcB
dest ? srcA + srcB + C
dest ? srcA – srcB
dest ? srcA – srcB – C
|
AND
OR
XOR
|
与
或
异或
|
F5,6
F5,6
F5,6
|
dest ? srcA & srcB
dest ? srcA | srcB
dest ? srcA ^ srcB
|
LSL
LSR
ASR
ROT
|
逻辑左移
逻辑右移
算术右移
循环移位
|
F5,6
F5,6
F5,6
F5,6
|
dest ? srcA << srcB
dest ? srcA >> srcB
dest ? srcA >> srcB 最高位扩展符号位
dest ? srcA >>> srcB
|
XXX.F
|
.F参数
|
对于上面的所有指令,标志位根据目的寄存器的值设定标志位
|
|
LDH
|
高位装载
|
F7
|
dest?{Immediate19,0…0}目的寄存器最高位由Immediate19替换
|
助记符
|
名称
|
格式
|
说明
|
LRFS
SRIS
CLC
|
从特殊寄存器进行装载
保存寄存器数据到特殊寄存器
清除Cache
|
F8
F9
F11
|
rC?sA rC通用寄存器,sA特殊寄存器
sC?rB sC特殊寄存器,rB通用寄存器
清除Cache
|
助记符
|
名称
|
实现
|
CLR
NEG
NOP
NOT
JMP
RET |
清除
求负数
无操作
按位求反
跳转
子程序返回
|
XOR Rd,R0,R0
SUB Rd,R0,Rd
XOR R0,R0,R0
XOR Rd,Ra,-1
SRIS PC,Rb
SRIS PC,Rb
|