近卫内阁内阁成员:2.4.2 数据处理指令(2)

来源:百度文库 编辑:中财网 时间:2024/04/18 13:58:29

2.4.2  数据处理指令(2)

8. ADC指令

ADC指令的格式为:

  1. ADC{条件}{S} 目的寄存器, 操作数1, 操作数2 

ADC指令用于把两个操作数相加,再加上CPSR中的C条件标志位的值,并将结果存放到目的寄存器中。它使用一个进位标志位,这样就可以做比32位大的数的加法,注意不要忘记设置S后缀来更改进位标志。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器或一个立即数。

以下指令序列完成两个128位数的加法,第一个数由高到低存放在寄存器R7~R4,第二个数由高到低存放在寄存器R11~R8,运算结果由高到低存放在寄存器R3~R0:

  1. ADDS R0, R4, R8     ;加低端的字  
  2. ADCS R1, R5, R9     ;加第二个字, 带进位  
  3. ADCS R2, R6, R10    ;加第三个字, 带进位  
  4. ADC R3, R7, R11     ;加第四个字, 带进位 

9. SUB指令

SUB指令的格式为:

  1. SUB{条件}{S} 目的寄存器, 操作数1, 操作数2 

SUB指令用于把操作数1减去操作数2,并将结果存放到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器或一个立即数。该指令可用于有符号数或无符号数的减法运算。

指令示例:

  1. SUB R0, R1, R2          ;R0 = R1 - R2  
  2. SUB R0, R1, #256        ;R0 = R1 - 256  
  3. SUB R0, R2, R3, LSL#1   ;R0 = R2 - (R3 << 1) 

10. SBC指令

SBC指令的格式为:

  1. SBC{条件}{S} 目的寄存器, 操作数1, 操作数2 

SBC指令用于把操作数1减去操作数2,再减去CPSR中的C条件标志位的反码,并将结果存放到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器或一个立即数。该指令使用进位标志来表示借位,这样就可以做大于32位的减法,注意不要忘记设置S后缀来更改进位标志。该指令可用于有符号数或无符号数的减法运算。

指令示例:

  1. SUBS R0, R1, R2     ; R0 = R1 - R2 - !C, 
    并根据结果设置CPSR 的进位标志位 

11. RSB指令

RSB指令的格式为:

  1. RSB{条件}{S} 目的寄存器, 操作数1, 操作数2 

RSB指令称为逆向减法指令,用于把操作数2减去操作数1,并将结果存放到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器或一个立即数。该指令可用于有符号数或无符号数的减法运算。

指令示例:

  1. RSB R0, R1, R2          ;R0 = R2 - R1  
  2. RSB R0, R1, #256        ;R0 = 256 - R1  
  3. RSB R0, R2, R3, LSL#1   ;R0 = (R3 << 1) - R2 

12. RSC指令

RSC指令的格式为:

  1. RSC{条件}{S} 目的寄存器, 操作数1, 操作数2 

RSC指令用于把操作数2减去操作数1,再减去CPSR中的C条件标志位的反码,并将结果存放到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器或一个立即数。该指令使用进位标志来表示借位,这样就可以做大于32位的减法,注意不要忘记设置S后缀来更改进位标志。该指令可用于有符号数或无符号数的减法运算。

指令示例:

  1. RSC R0, R1, R2      ;R0 = R2 - R1 - !C 

13. AND指令

AND指令的格式为:

  1. AND{条件}{S} 目的寄存器, 操作数1, 操作数2 

AND指令用于在两个操作数上进行逻辑与运算,并把结果放置到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器或一个立即数。该指令常用于屏蔽操作数1的某些位。

指令示例:

  1. AND R0, R0, #3      ;该指令保持R0 的0、1 位, 其余位清零 

14. ORR指令

ORR指令的格式为:

  1. ORR{条件}{S} 目的寄存器, 操作数1, 操作数2 

ORR指令用于在两个操作数上进行逻辑或运算,并把结果放置到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器或一个立即数。该指令常用于设置操作数1的某些位。

指令示例:

  1. ORR R0, R0, #3      ;该指令设置R0 的0、1 位, 其余位保持不变。 

15. EOR指令

EOR指令的格式为:

  1. EOR{条件}{S} 目的寄存器, 操作数1, 操作数2 

EOR指令用于在两个操作数上进行逻辑异或运算,并把结果放置到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器或一个立即数。该指令常用于反转操作数1的某些位。

指令示例:

  1. EOR R0, R0, #3      ;该指令反转R0 的0、1 位, 其余位保持不变。 

16. BIC指令

BIC指令的格式为:

  1. BIC{条件}{S} 目的寄存器, 操作数1, 操作数2 

BIC指令用于清除操作数1的某些位,并把结果放置到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器或一个立即数。操作数2为32位的掩码,如果在掩码中设置了某一位,则清除这一位,未设置的掩码位保持不变。

指令示例:

  1. BIC R0, R0, #%1011      ;该指令清除 R0
    的位 0、1、和 3位, 其余的位保持不变。