文章目录
数据处理指令
常见的数据处理指令如下表所示,它们支持相同的寻址方式,详情可见笔记。
助记符 | 说明 | 实现逻辑 |
---|---|---|
MOV | 数据传送 | Rd = Rn(Rn可能需要运算) |
MVN | 数据取反传送 | Rd = ~Rn(Rn可能需要运算) |
ADD | 加 | Rd = Rn + op2 |
ADC | 带进位加 | Rd = Rn + op2 + C |
AND | 逻辑加 | Rd = Rn && op2 |
EOR | 逻辑异或 | Rd = Rn ^ op2 |
SUB | 减 | Rd = Rn - op2 |
SBC | 带进位的减 | Rd = Rn - op2 + C - 1 |
RSB | 反转减 | Rd = op2 - Rn |
RSC | 带进位的反转减 | Rd = op2 - Rn + C - 1 |
TST | 测试 | Rn && op2的结果更新标志位 |
TEQ | 测试相等 | Rn ^ op2的结果更新标志位 |
CMP | 比较 | Rn - op2的结果更新标志位 |
CMN | 符数比较 | Rn + op2的结果更新标志位 |
ORR | 逻辑或 | Rd = Rn || op2 |
BIC | 位清零 | Rd = Rn && ~(op2) |
1. MOV传送指令
MOV指令将第二个操作数传送到目标寄存器中。
MOV{<cond>} {S} <Rd>, <shifter_operand>
if ConditionPassed(cond) then
Rd = shifter_operand
if S == 1 and Rd == R15 then
CPSR = SPSR
elif S == 1 then
N Flag = Rd[31]
Z Flag = if Rd == 0 then 1 else 0
C Flag = shifter_carry_out
V Flag = unaffected
2. MVN传送指令
MVN将第二个操作数的反码传送到目标寄存器中。
MVN{<cond>} {S} <Rd>, <shifter_operand>
if ConditionPassed(cond) then
Rd = NOT shifter_operand
if S == 1 and Rd == R15 then
CPSR = SPSR
elif S == 1