汇编quad_ARM汇编(2)(指令)

一,ARM汇编语言立即数的表示方法

十六进制:前缀:0x

十进制:无前缀

二制:前缀:0b

二,常用的ARM指令(标准的ARM语法,GNU的ARM语法)

1、@M开头系列

MOV R0, #12 @R0 = 0XFF。(1)、寄存器或寄存器之间的数据传送 MVF = MOV

MOV R0, R0

MOV R0, R0, LSL#2   @OR =ASL#2, LSR/ASR/ROR/RRX,(2)、移位操作

MVN R0, #4  @数据取反传送 R0 = -5

MVN R0, #0

@MOV R0, #0X88888888  这样是不合法的,mov操作立即数范围为0~512,可以通过使用LDR/STR的伪指令实现将大的立即数或内存写入寄存器,如下

LDR R0, =0X88888888

@MSR CPSR, R0

MSR SPSR, R0

MSR CPSR_flg, R0

MSR CPSR_flg, #1<<28

MUL R0, R1, R2

@MOV PC, R14     @(3)、程序跳转(默认模式为从程序第一句到当前这一句循环执行)

@MOVS PC, R14 @(4)、S->C 拷贝,实现从异常中断返回

@MOVS PC, LR @这三句在这里是等价的

2、ADD、ADDS、ADC、ADCS

ADD指令将表示的数据加上寄存器的值,将结果保存到目标寄存器中,并根据指令的执行结果更新CPSR中相应的条件标志位。

@两个64位数相加

LDR R1, =0X10101010

LDR R2, =0X10010010

LDR R3, =0X20202020

LDR R4, =0X20020020

ADDS R5, R1, R3  @加低位的字

ADCS R6, R2, R4  @加高位的字,带进位

ADC指令常用于实现两个数的相加,无进位时为C=0

3、SUB、SBC、RSB、RSC

SUB指令的作用是将寄存器中的数值减去所表示的数值,将运算结果保存到目标寄存器中,并根据指令的执行结果更新CPSR中的条件标志位。

SUB指令常用于实现两个数的相减,若结果>=0,则C位为1,若结果为0,则Z位为1

SBC指令的作用是将寄存器中的值减去表示的数值,再减去寄存器CPSR中C条件标志位的反码[NOT (Carry Flag)],将结果保存到目标寄存器中,并根据指令的执行结果更新CPSR中相应的条件标志位。

SBC指令常与SUB指令联合使用,可以实现两个64位数的减法。

@减法***************************

SUB R0, R1, R2   @ R0 = R1 - R2  不带借位的减法

SUB R0, R1, #255  @ R0 = R1 - 256

SUB R0, R2, R3, LSL#1   @ R0 = R2 - (R3 << 1)

SBC R0, R1, R2  @ R0 = R1 - R2 -!CARRY  带借位的解减法

RSB R0, R1, R2   @ R0 = R2 - R2  反向减法

RSC R3, R4, R5   @ R3 = R5 - R4 - !CARRY  带借位的反向减法

4、 AND、EOR、ORR、BIC、

*AND指令将表示的数值与寄存器的值按位做“与”运算,将将结果保存到目标寄存器中,同时根据操作的结果更新CPSR寄存器中的条件标志位。

(1) 指令的语法格式

AND{}{S}  , ,

(2) 指令举例

AND  R0, R0, #0x03 ;R0寄存器中的0、1位不变,其它位清零

AND  R2, R1, R3 ;R2 = R1 & R3

ANDS  R0,  R0,  #0x1 ;R0 = R0 & 0x1

*EOR(Exclusive OR)指令将寄存器中的值和表示的值按位进行“异或”操作,并将执行结果保存中目标寄存器中,同时根据指令的执行结果更新CPSR中相应的条件标志位。

(1) 指令的语法格式

EOP{}{S}  , ,

(2) EOR指令举例

EOR  R0, R0,  #3 ;反转R0的第0位和第1位

EOR   R1, R1, #0x0F ;将R1的低4位取反

EOR    R2, R1, R0 ;R2 = R1 ^ R0

EORS  R0, R5, #0x1 ;将R5和0x1进行逻辑异或,结果保存在R0中,并根据执行结果更新标志位。

*ORR(logical  OR)为按位或指令,它将第2个源操作数表示的值与寄存器表示的值按位做“或”操作,结果保存到寄存器中。

(1) 指令的语法格式

ORR{条件}{S}  , ,

(2)指令的例子

ORR  R0, R0, #3 ;将R0的第1、3位设置成1

ORR  R0, R0, #0xFF ;将R0的低4位置1

*BIC(Bit Clear)位清零指令,将寄存器的值与第2个源操作数的值的反码按位做“逻辑与”运算,结果保存到寄存器中

(1) 指令的语法格式

BIC{条件}{S}  , ,

(2)指令例子

BIC  R0, R0, #0x1

你可能感兴趣的:(汇编quad)