ARM汇编指令收录

                                           ARM汇编指令

 

EQU #相当于C里面宏定义

例:

COUNT EQU 100;令COUNT的值为100,存储器中为变量分配 0个字节            C:#define EQU 100
COUNT DB 100 ;令COUNT的值为100,存储器中为变量分配 1个字节
COUNT DW 100 ;令COUNT的值为100,存储器中为变量分配 2个字节

其含义:将100 赋值给EQU

LDR加载指令:

LDR R0,[R1]         ;将存储器地址为R1的字数据读入寄存器R0。
LDR R0,[R1,R2]  ;将存储器地址为R1+R2的字数据读入寄存器R0。
LDR R0,[R1,#8]   ;将存储器地址为R1+8的字数据读入寄存器R0。
LDR R0,[R1,R2]!;将存储器地址为R1+R2的字数据读入寄存器R0,并将新地址R1+R2写入R1。
LDR R0,[R1,#8]!  ;将存储器地址为R1+8的字数据读入寄存器R0,并将新地址R1+8写入R1。 
LDR R0,[R1],R2  ;将存储器地址为R1的字数据读入寄存器R0,并将新地址R1+R2写入R1。
LDR R0,[R1,R2,LSL#2]!  ;将存储器地址为R1+R2×4的字数据读入寄存器R0,并将新地址R1+R2×4写入R1。
LDR R0,[R1],R2,LSL#2  ;将存储器地址为R1的字数据读入寄存器R0,并将新地址R1+R2×4写入R1。”

伪指令:

LDR OP1,OP2
这个是真正的汇编指令
LDR OP1 ,=OP2
这个是伪指令
两个是有区别的
比如LDR R1,UARTLCON0
的意思是将UARTLCON0寄存器的内容存入R1
但是LDR R1,=UARTLCON0
是将UARTLCON0寄存器的地址存入R1
对于第二操作数是立即数的情况
ARM的指令系统的立即数只允许立即数是八位位图数,具体的意识好像是必须是八位二进制数的位移数,因此对于任意的32位二进制数不能直接使用
于是就出现了伪指令LDR R0,=OP2,
这样可以使用任意32位的二进制数

ORR

orr r0,r0,#0xd3    

0xd3=1101 0111    

含义:将r0与0xd3作算数或运算,然后赋值给r0

STR

STR R0,[R1],#8  ;将R0中的字数据写入以R1为地址的存储器中,并将新地址R1+8写入R1。

STR R0,[R1,#8]  ;将R0中的字数据写入以R1+8为地址的存储器中。”

str     r1, [r0]  ;将r1寄存器的值,传送到地址值为r0的(存储器)内存中
 

DMB

数据存储器隔离。DMB 指令保证: 仅当所有在它前面的存储器访问操作

都执行完毕后,才提交(commit)在它后面的存储器访问操作。

 

DSB

数据同步隔离。比 DMB 严格: 仅当所有在它前面的存储器访问操作

都执行完毕后,才执行在它后面的指令

 

ISB

指令同步隔离。最严格:它会清洗流水线,以保证所有它前面的指令都执

行完毕之后,才执行它后面的指令。

 

MOV

MOV AX,2000H;将16位数据2000H传送到AX寄存器 
MOV AL,20H;将8位数据20H传送到AL寄存器 
MOV AX,BX;将BX寄存器的16位数据传送到AX寄存器 
MOV AL,[2000H];将2000H单元的内容传送到AL寄存器

AND

and al,00111011B

就是将al和00111011相与再赋值给al

al = al & 00111011;

ADD

ADD A,B   //A=A+B;
功能: 两数相加

ANDS

arm汇编的一般规则就是末尾的s代表是否影响标志位,也就是说AND执行完不会更新cpsr中的标志位,而ANDS就会。

操作一样的。

CLZ

计算前导零的数目

1CLZ {cond} Rd, Rm
Rd 结果寄存器,不允许是R15
Rm 操作数寄存器。CLZ对Rm中的前导零的个数进行计数,结果放在Rd中,若Rm全为0,则结果为32

若位[31]是1,则结果为0

计算二进制数之前零的个数放到Rd中

LSL

R2, LSL #3就是R2左移3位

ORR

orr r0,r0,#0xd3
0xd3=1101 0111
将r0与0xd3作算数或运算,然后将结果返还给r0,

SUBS

sub ax,9                给ax减9,之后的结果赋值给ax
sub ax,bx                语意是ax = bx - ax 

S是更新标志位

BGE

BGE就是大于或等于才跳。

BFC

位段清零

BIC:

BIC―――――位清除指令
指令格式:
BIC{cond}{S} Rd,Rn,operand2 
BIC指令将Rn 的值与操作数operand2 的反码按位逻辑”与”,结果存放到目的寄存器Rd 中。
指令示例:BIC R0,R0,#0x0F ;将R0最低4位清零,其余位不变。

bic r0,r0,#0x1f

0x1f=11111b

其含义:清除r0的bit[4:0]位。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值