首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

ARM指令集-数据处理指令(2)

ARM指令集-数据处理指令(2)

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的进位标志位
11RSB指令
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          ; 该指令保持R001位,其余位清零。
14、ORR指令
ORR指令的格式为:
ORR{条件}{S} 目的寄存器,操作数1,操作数2
ORR指令用于在两个操作数上进行逻辑或运算把结果放置到目的寄存器中操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。该指令常用于设置操作数1的某些位
如:
ORR  R0,R0,#3          ; 该指令设置R001位,其余位保持不变。
15、EOR指令
EOR指令的格式为:
EOR{条件}{S} 目的寄存器,操作数1,操作数2
EOR指令用于在两个操作数上进行逻辑异或运算把结果放置到目的寄存器中操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。该指令常用于反转操作数1的某些位
如:
EOR  R0,R0,#3          ; 该指令反转R001位,其余位保持不变。
16、BIC指令
BIC指令的格式为:
BIC{条件}{S} 目的寄存器,操作数1,操作数2
BIC指令用于清除操作数1的某些位把结果放置到目的寄存器中操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。操作数232位的掩码,如果在掩码中设置了某一位,则清除这一位。未设置的掩码位保持不变。
如:
BIC  R0,R0,#%1011         ; 该指令清除 R0中的位 01、和3,其余的位保持不变。
返回列表