ARM的总汇编指令Word格式.docx

上传人:b****4 文档编号:6229055 上传时间:2023-05-06 格式:DOCX 页数:12 大小:549.03KB
下载 相关 举报
ARM的总汇编指令Word格式.docx_第1页
第1页 / 共12页
ARM的总汇编指令Word格式.docx_第2页
第2页 / 共12页
ARM的总汇编指令Word格式.docx_第3页
第3页 / 共12页
ARM的总汇编指令Word格式.docx_第4页
第4页 / 共12页
ARM的总汇编指令Word格式.docx_第5页
第5页 / 共12页
ARM的总汇编指令Word格式.docx_第6页
第6页 / 共12页
ARM的总汇编指令Word格式.docx_第7页
第7页 / 共12页
ARM的总汇编指令Word格式.docx_第8页
第8页 / 共12页
ARM的总汇编指令Word格式.docx_第9页
第9页 / 共12页
ARM的总汇编指令Word格式.docx_第10页
第10页 / 共12页
ARM的总汇编指令Word格式.docx_第11页
第11页 / 共12页
ARM的总汇编指令Word格式.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

ARM的总汇编指令Word格式.docx

《ARM的总汇编指令Word格式.docx》由会员分享,可在线阅读,更多相关《ARM的总汇编指令Word格式.docx(12页珍藏版)》请在冰点文库上搜索。

ARM的总汇编指令Word格式.docx

ADDEQR0,R0,#1

SUBNER0,R0,#1

汇编2

SUBSR1,R0,#10;

//S---运算的结果会影响条件码标志位:

CPSR:

NZCV

提示:

空指令NOP,实际上是占用CPU的时间,但是执行后,没有什么意义。

NOP----MOVR0,R0

3、条件码标识

10-10

Z=1

C=0

N=0

V=0

=================================================================================

二、ARM的寻址方式

1、立即数寻址

操作数,有立即数。

ADDR0,R0,#1

MOVR1,#10

ORRR1,R1,#0xfR1=R1|0xf

BICR1,R1,#0xfR1=R1&

(~(0xf))

错误:

ADDR1,#1,#2

注意:

立即数合法的条件

在ARM汇编指令中,并不是所有的立即数,立即数是有一定的限制的。

什么样的立即数是合法的?

1、如果一个立即数是小于256的(即该立即数是8bits以的,0~255),该立即数是合法的。

2、如果一个立即数是大于等于256,该立即数经过循环左移偶数位,可以得到一个小于256的数,则该立即数合法。

256=0x100------左移20位0x10000000----左移40x1合法

0x111非法

0x102非法

0x104合法

0xfff

0xff00

0x12000

0x450000

0xab

原因:

在数据处理指令编码的时候,立即数用12bits来表示:

高4bits:

循环左移左移偶数位除以2

低8bits:

循环左移后的结果。

重要问题:

ADDR1,R0,#0xffff非法

解决:

LDRR2,=0xffff//R2=0xffff,将立即数0xffff的值传送给R2

ADDR1,R0,R2

 

2、寄存器寻址

所有的操作数都是寄存器,没有立即数

ADDR0,R0,R1

MOVR1,R0

ORRR1,R1,R0R1=R1|0xf

BICR1,R1,R0R1=R1&

3、寄存器间接寻址

本质上,相当于C语言的指针

问题:

读取0x30008000地址下的容,该容是int型的?

inta;

a=*(int*)0x30008000

汇编:

LDRR0,=0x30008000

LDRR1,[R0]//LDR=loader,数据加载指令,加载一个地址下的容

STRR2,[R1]//STR---store,数据存储指令,将一个数据存放到一个地址下。

错误的写法:

LDRR1,[0x30008000]

间接寻址的地址需要存放到一个通用寄存器中,然后在使用。

4、寄存器的偏移寻址

MOVR0,R2,LSL#3//LSL—逻辑左移。

R0=R2<

<

3

ADDR0,R1,R2,LSL#4//R0=R1+(R2<

4)

SUBR0,R1,R2,LSLR3//R0=R1-(R2<

R3)

5、基址变址寻址

是一个间接寻址的变形,地址是由基地址和偏移量组成的

1)先变址

LDRR0,[R1,#4]//将R1+4作为新地址,将新的地址下的容加载给R0

2)后变址

LDRR0,[R1],#4//先将R1地址下的容加载给R0,然后R1=R1+4

3)自动变址

LDRR0,[R1,#4]!

//!

---》自动变址,将R1+4作为新地址,将新的地址下的容加载给R0;

然后R1=R1+4

6、栈的寻址

栈有四种寻址方式

对栈的操作:

STM--多个STR,一次可以完成多个数据的存储

LDM--多个LDR,一次可以完成多个数据的加载

例:

在操作满递减栈的时候:

出栈:

LDMFD

入栈:

STMFD

7、相对寻址

BLdelay

Bloop

三、ARM的汇编指令

1、跳转指令(B)---分支指令branch

B:

单纯的跳转

BL:

跳转的同时保存返回地址

BX:

带状态切换的跳转

BLX:

带状态切换的跳转,并保存返回地址

受跳转指令编码格式的限制,跳转的围是-32MB~32MB。

BLdelay//delay与跳转指令的不能超过32MB

注意,如果跳转的围超过32MB,使用:

LDRPC,=delay

2、数据处理指令

需要注意:

立即数合法的要求

1)传送指令

movR1,R0

movR2,#10

mvnR3,#10//将10取反,然后再传给R3

2)算术逻辑运算指令

ADDR1,R2,R0//R1=R2+R0

SUBR2,R1,#10//R2=R1-10

ORRR1,R1,#0xf//将R1的低四位置1,其它位保持不变

BICR2,R2,#0xf//将R2的低四位清0,其它位保持不变

ANDR3,R3,#0xf//保留R3的低四位,其它位都清0

EORR4,R4,#10//R4=R4^10

3)比较指令

CMPR0,#10//R0-10,然后根据运算的结果自动影响标志位

CMNR0,#10//R0+10,然后根据运算的结果自动影响标志位

TSTR0,#8//R0&

8,然后根据运算的结果自动影响标志位

TEQR0,#8//R0^8,然后根据运算的结果自动影响标志位

3、乘法指令和乘加指令

MULR3,R2,#10//R3=R2*10

MLAR2,R1,R0,#10//R2=R1*R0+10

4、存储器访问指令

根据存储器的地址访问该地址下的容:

LDRR1,[R0]//R0—存储器的地址

STRR2,[R0]

STMFDSP!

{R0-R8,LR}

LDMFDSP!

{R0-R8,PC}

SWPR2,R1,[R0]//通用寄存器和存储器之间的字类型数据交换

相当于:

LDRR2,[R0]

STRR1,[R0]

5、协处理器指令

在ARM核中,有一个协处理器(CP15),协处理器有16个寄存器C0~C15,我们对协处理器中寄存器进行访问的时候,使用的是协处理器指令,不能使用ARM汇编指令。

协处理器的作用:

设置MMU、设置cache、读取芯片的ID,设置ARM的大小端格式

6、软件中断指令

SWI:

ARM---linux的系统调用

7、通用寄存器和状态寄存器的访问指令

MRS:

将S(statusregister)move到R(register)中

MSR

MRSR0,CPSR

BICR0,R0,#0x80

MSRCPSR,R0

上面程序的目的:

将CPSR[7]清0,将所有的IRQ中断都打开。

四、ARM汇编伪指令

1、什么是伪指令

伪指令并不是真正的ARM汇编指令,当我遇到一些应用的时候,这些应用的场景并不能使用汇编指令实现,所以提出伪指令的概念。

伪指令相当于汇编指令的序列,一条伪指令在编译的时候,会被编译成一条或几条汇编指令。

伪指令相当于C语言的小函数。

2、LDR

1)ARM汇编指令

加载某地址上的数据。

如:

LDRR2,[R0]

2)ARM汇编伪指令

(1)传输不能使用mov来传递的立即数

MOVR1,#0xffff//非法

替代:

LDRR1,=0xffff

(2)获取一个标示符的地址,大围的

BLdelay//当delay与BLdelay指令,距离超过了32MB,跳不过去

替代:

LDRPC,=delay//围在4GB

3、NOP

是一个空指令,相当于MOVR0,R0,占用CPU的执行时间,没有作用。

nop指令占用的时间:

(1/MIPS)us

MIPS=998----(1/998)us

4、ADR

小围的地址读取指令,-1020~1020

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2