标题:
ARM指令集-数据处理指令(1)
[打印本页]
作者:
look_w
时间:
2017-9-24 15:35
标题:
ARM指令集-数据处理指令(1)
3.3.2
数据处理指令
数据处理指令可分为数据传送指令、算术逻辑运算指令和比较指令等。
数据传送指令用于在寄存器和存储器之间进行数据的双向传输。
算术逻辑运算指令完成常用的算术与逻辑的运算,该类指令不但将运算结果保存在目的寄存器中,同时更新
CPSR中的相应条件标志位。
比较指令不保存运算结果,只更新
CPSR中相应的条件标志位。
1、
MOV指令
MOV指令的格式为:
MOV{条件}{S} 目的寄存器,源操作数
MOV指令可完成从另一个寄存器、被移位的寄存器或将一个立即数加载到目的寄存器。
其中
S选项决定指令的操作是否影响CPSR中条件标志位的值,当没有S时指令不更新CPSR中条件标志位的值。
如:
MOV R1
,
R0
;将寄存器
R0
的值传送到寄存器
R1
MOV PC
,
R14
;将寄存器
R14
的值传送到
PC
,常用于子程序返回
MOV R1
,
R0
,
LSL
#
3
;将寄存器
R0
的值左移
3
位后传送到
R1
2、
MVN指令
MVN指令的格式为:
MVN{条件}{S} 目的寄存器,源操作数
MVN指令可完成
从另一个寄存器、被移位的寄存器、或
将
一个立即
数加
载到目的寄存器。
与MOV指令
不同之处是在传送之前
按
位被
取
反了,
即
把一个被取反的值传送到
目的
寄存器中。
其中
S决定指令的操作是否影响CPSR中条件标志位的值,当没有S时指令不更新CPSR中条件标志位的值。
如:
MVN R0
,#
0
;将立即数
0
取反传送到寄存器
R0
中,完成后
R0=-1
3、
CMP指令
CMP指令的格式为:
CMP{条件} 操作数1,操作数2
CMP指令用于把一个寄存器的内容和另一个寄存器的内容或立即数进行比较,
同时更新
CPSR中条件标志位的值。该指令进行一次减法运算,但不存储结果,只更改条件标志位。标志位
表示的是操作数
1与操作
数
2的关系(大、小、相等),例如,当
操作数
1大于操作操作数2,则此后的有GT 后缀的指令将可以执行。
如:
CMP R1
,
R0
;将寄存器
R1
的值与寄存器
R0
的值相减,并根据结果设置
CPSR
的标志位
CMP R1
,#
100
;将寄存器
R1
的值与立即数
100
相减,并根据结果设置
CPSR
的标志位
4、
CMN指令
CMN指令的格式为:
CMN{条件} 操作数1,操作数2
CMN
指令用于
把一个寄存器的内容
和
另一个寄存器的内容或立即
数取反后
进行比较,
同时更新
CPSR
中条件标志位的值
。
该指令实际完成操作数
1
和操作数
2
相加
,
并根据
结果更改
条件标志位。
如:
CMN R1
,
R0
;将寄存器
R1
的值与寄存器
R0
的值相加,并根据结果设置
CPSR
的标志位
CMN R1
,#
100
;将寄存器
R1
的值与立即数
100
相加,并根据结果设置
CPSR
的标志位
5、
TST指令
TST指令的格式为:
TST{条件} 操作数1,操作数2
TST
指令用于
把一个寄存器的内容和另一个寄存器的内容或立即数进行按位的与运算,
并根据运算结果更新
CPSR中条件标志位的值
。操作数
1是要测试的数据,
而操作数
2是一个位掩码,该指令一般用来检测是否设置了特定的位。
如:
TST R1
,#%
1
;用于测试在寄存器
R1
中是否设置了最低位(%表示二进制数)
TST R1
,#
0xffe
;将寄存器
R1
的值与立即数
0xffe
按位与,并根据结果设置
CPSR
的标志位
6、
TEQ指令
TEQ指令的格式为:
TEQ{条件} 操作数1,操作数2
TEQ
指令用于
把一个寄存器的内容和另一个寄存器的内容或立即数进行按位的异或运算,
并根据运算结果更新
CPSR中条件标志位的值。该指令通常用于比较
操作数
1和
操作数
2是否相等。
如:
TEQ R1
,
R2
;将寄存器
R1
的值与寄存器
R2
的值按位异或,并根据结果设置
CPSR
的标志位
7、
ADD指令
ADD指令的格式为:
ADD{条件}{S} 目的寄存器,操作数1,操作数2
ADD
指令用于
把两个操作数
相
加,
并将
结果
存放
到目的寄存器中
。
操作数
1应
是一个寄存器,操作数
2
可以是一个寄存器,被移位的寄存器,或一个立即
数。
如:
ADD R0,R1,R2 ; R0 = R1 + R2
ADD R0,R1,#256 ; R0 = R1 + 256
ADD R0,R2,R3,LSL#1 ; R0 = R2 + (R3 << 1)
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
;
加第四个字,带进位
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0