文档详情

三、ARM指令2学习课件.pptx

发布:2025-01-29约9.28千字共125页下载文档
文本预览下载声明

三、ARM指令系统;寻址方式;LDMIAR1,{R0,R2,R5};R0←[R1]

;R2←[R1+4]

;R5←[R1+8]

LDMIBR1,{R0,R2,R5};R0←[R1+4]

;R2←[R1+8]

;R5←[R1+12]

LDMDAR1,{R0,R2,R5};R5←[R1]

;R2←[R1-4]

;R0←[R1-8]

LDMDBR1,{R0,R2,R5};R5←[R1-4]

;R2←[R1-8]

;R0←[R1-12]

;ARM存储器访问指令——多寄存器存取;;栈底;;栈底;栈底;栈底;栈底;数据块传送

存储;应用示例:S3C44B0部分启动代码;简单的ARM程序;§3.3ARM指令系统介绍;存储器寻址;(一)存储器访问指令(Load/Store)

1、单字和无符号字节Load/Store指令

2、半字和有符号字节Load/Store指令

3、双字Load/Store指令

4、多寄存器Load/Store指令

5、内存与寄存器交换指令

;(一)存储器访问(Load/Store)指令

1.单字和无符号字节Load/Store指令

功能:提供ARM寄存器和内存之间单字节

(8位)或单字(32位)数据的传送。

LDR/STR的功能

;LDR和STR——字和无符号字节加载/存储指令编码;字节码结构;指令格式:

(1)零偏移

LDR/STR{〈条件码〉}{B}{T}Rd,[Rn]

;((Rn))→Rd

功能:将Rn的内容作为传送数据的地址。

B:可选后缀,若有B,则传送Rd的最低有效字节。

若操作码是LDR,则将Rd的其它字节清零。(加载无符字节数据,零扩展到32位)

;(1)零偏移

Rd:ARM寄存器

Rn:存储器的基址寄存器,若指令是带写回的前变址(加后缀“!”)或后变址。

;(2)前变址

LDR/STR{条件码}{B}Rd,[Rn,offset]{!}

;((Rn)+offset)→Rd;

;有“!”,则(Rn)+offset→Rn

;无“!”,Rn不变;(2)前变址

在数据传送之前,将偏移量加到Rn中,其

结果作为传送数据的存储器地址。若使用后缀

“!”,则结果写回到Rn中。Rn不允许是R15。

其中offset—Rn上的偏移量。

!:可选后缀,若有“!”,则将结果地址写回

到Rn,若Rn是R15,则不能够用后缀“!”。

LDRRd,[Rn,#offset]!((Rn)+offset))→Rd;(Rn)+offset→Rd;(3)程序相对偏移

LDR/STR{〈条件码〉}Rd??Label;(Label)→Rd

Label:程序相对偏移表达式,必须在当前指

令的±4kB范围内。

LDRRd,Label等价为:

LDRRd,[R15,Label-{pc}]

((R15)+Label-{pc}))→Rd;(4)后变址

LDR/STR{条件码}{B}{T}Rd,[Rn],offset

将Rn的值用作传送数据的存储器地址,数据传送后,偏移量加到Rn中,结果写回到Rn。

Rn不允许是R15。

LDRRd,[Rn],offset

;((Rn))→Rd,(Rn)+offset→Rn

;例1:将R0中的内容存放到外设中

LDRR1,UARTADD;将UART地址放进R1中

STRBR0,[R1];将数据放进外设中

……

UARTADD10000;UART的地址值;例2:

LDRR8,[R10];((R10))→R8

LDRNER2,

显示全部
相似文档