2012维密走秀完整:2.4.2 数据处理指令(2)
2.4.2 数据处理指令(2)
8. ADC指令
ADC指令的格式为:
- ADC{条件}{S} 目的寄存器, 操作数1, 操作数2
ADC指令用于把两个操作数相加,再加上CPSR中的C条件标志位的值,并将结果存放到目的寄存器中。它使用一个进位标志位,这样就可以做比32位大的数的加法,注意不要忘记设置S后缀来更改进位标志。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器或一个立即数。
以下指令序列完成两个128位数的加法,第一个数由高到低存放在寄存器R7~R4,第二个数由高到低存放在寄存器R11~R8,运算结果由高到低存放在寄存器R3~R0:
- ADDS R0, R4, R8 ;加低端的字
- ADCS R1, R5, R9 ;加第二个字, 带进位
- ADCS R2, R6, R10 ;加第三个字, 带进位
- ADC R3, R7, R11 ;加第四个字, 带进位
9. SUB指令
SUB指令的格式为:
- SUB{条件}{S} 目的寄存器, 操作数1, 操作数2
SUB指令用于把操作数1减去操作数2,并将结果存放到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器或一个立即数。该指令可用于有符号数或无符号数的减法运算。
指令示例:
- SUB R0, R1, R2 ;R0 = R1 - R2
- SUB R0, R1, #256 ;R0 = R1 - 256
- SUB R0, R2, R3, LSL#1 ;R0 = R2 - (R3 << 1)
10. SBC指令
SBC指令的格式为:
- SBC{条件}{S} 目的寄存器, 操作数1, 操作数2
SBC指令用于把操作数1减去操作数2,再减去CPSR中的C条件标志位的反码,并将结果存放到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器或一个立即数。该指令使用进位标志来表示借位,这样就可以做大于32位的减法,注意不要忘记设置S后缀来更改进位标志。该指令可用于有符号数或无符号数的减法运算。
指令示例:
- SUBS R0, R1, R2 ; R0 = R1 - R2 - !C,
并根据结果设置CPSR 的进位标志位
11. RSB指令
RSB指令的格式为:
- RSB{条件}{S} 目的寄存器, 操作数1, 操作数2
RSB指令称为逆向减法指令,用于把操作数2减去操作数1,并将结果存放到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器或一个立即数。该指令可用于有符号数或无符号数的减法运算。
指令示例:
- RSB R0, R1, R2 ;R0 = R2 - R1
- RSB R0, R1, #256 ;R0 = 256 - R1
- RSB R0, R2, R3, LSL#1 ;R0 = (R3 << 1) - R2
12. RSC指令
RSC指令的格式为:
- RSC{条件}{S} 目的寄存器, 操作数1, 操作数2
RSC指令用于把操作数2减去操作数1,再减去CPSR中的C条件标志位的反码,并将结果存放到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器或一个立即数。该指令使用进位标志来表示借位,这样就可以做大于32位的减法,注意不要忘记设置S后缀来更改进位标志。该指令可用于有符号数或无符号数的减法运算。
指令示例:
- RSC R0, R1, R2 ;R0 = R2 - R1 - !C
13. AND指令
AND指令的格式为:
- AND{条件}{S} 目的寄存器, 操作数1, 操作数2
AND指令用于在两个操作数上进行逻辑与运算,并把结果放置到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器或一个立即数。该指令常用于屏蔽操作数1的某些位。
指令示例:
- AND R0, R0, #3 ;该指令保持R0 的0、1 位, 其余位清零
14. ORR指令
ORR指令的格式为:
- ORR{条件}{S} 目的寄存器, 操作数1, 操作数2
ORR指令用于在两个操作数上进行逻辑或运算,并把结果放置到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器或一个立即数。该指令常用于设置操作数1的某些位。
指令示例:
- ORR R0, R0, #3 ;该指令设置R0 的0、1 位, 其余位保持不变。
15. EOR指令
EOR指令的格式为:
- EOR{条件}{S} 目的寄存器, 操作数1, 操作数2
EOR指令用于在两个操作数上进行逻辑异或运算,并把结果放置到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器或一个立即数。该指令常用于反转操作数1的某些位。
指令示例:
- EOR R0, R0, #3 ;该指令反转R0 的0、1 位, 其余位保持不变。
16. BIC指令
BIC指令的格式为:
- BIC{条件}{S} 目的寄存器, 操作数1, 操作数2
BIC指令用于清除操作数1的某些位,并把结果放置到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器或一个立即数。操作数2为32位的掩码,如果在掩码中设置了某一位,则清除这一位,未设置的掩码位保持不变。
指令示例:
- BIC R0, R0, #%1011 ;该指令清除 R0
的位 0、1、和 3位, 其余的位保持不变。