文档介绍:ARM汇编指令集详解
ARM汇编指令集
跳转指令
跳转指令用于实现程序流程的跳转,在ARM程序中有两种方法可以实现程序流程的跳转:
Ⅰ.使用专门的跳转指令。
Ⅱ.直接向程序计数器PC写入跳转地址值。
通过向程序计,例如,当操作数1大于操作操作数2,那么此后的有GT 后缀的指令将可以执行。
指令例如:
CMP R1,R0 ;将存放器R1的值与存放器R0的值相减,并根据
结果设置CPSR的标志位
CMPR1,#100 ;将存放器R1的值与立即数100相减,并根据结果
设置CPSR的标志位
4、 CMN指令
CMN指令的格式为:
CMN{条件} 操作数1,操作数2
CMN指令用于把一个存放器的内容和另一个存放器的内容或立即数取反后进行比拟,同时更新CPSR中条件标志位的值。该指令实际完成操作数1和操作数2相加,并根据结果更改条件标志位。
指令例如:
CMN R1,R0 ;将存放器R1的值与存放器R0的值相加,并根据结果
设置CPSR的标志位
CMNR1,#100 ;将存放器R1的值与立即数100相加,并根据结果设置
CPSR的标志位
5、 TST指令
TST指令的格式为:
TST{条件} 操作数1,操作数2
TST指令用于把一个存放器的内容和另一个存放器的内容或立即数进行按位的与运算,并根据运算结果更新CPSR中条件标志位的值。操作数1是要测试的数据,而操作数2是一个位掩码,该指令一般用来检测是否设置了特定的位。
指令例如:
TST R1,#%1 ;用于测试在存放器R1中是否设置了最低位〔%表示二进制数〕
TSTR1,#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 ; 加第四个字,带进位
9、 SUB指令
SUB指令的格式为:
SUB{条件}{S} 目的存放器,操作数1,操作数2
SUB指令用于把操作数1减去操作数2,并将结果存放到目的存放器中。操作数1应是一个存放器,操作数2可以是一个存放器