常用的ARM指令总结

来源:本站
导读:目前正在解读《常用的ARM指令总结》的相关信息,《常用的ARM指令总结》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《常用的ARM指令总结》的详细说明。
简介:常用的ARM指令总结

1.ARM指令的寻址方式有几种?试分别举例说明。

答:

立即数寻址:MOV R0,#15

寄存器寻址:ADD R0,R1,R2

寄存器间接寻址:LDR R0,[R4]

寄存器移位寻址:ADD R0,R1,R2,LSL #1

基址变址寻址:LDR R0,[R1,#4]

多寄存器寻址:LDMIA R0!,{R1-R4}

相对寻址:BL proc ;跳转到子程序proc处执行

proc MOV R0,#1

堆栈寻址:STMFD R13!,{R0-R4};

LDMFD R13!,{R0-R4};

2.ARM指令系统对字节、半字、字的存取是如何实现的?

LDR/STR 字数据加载/存储指令

LDRB/STRB 字节数据加载/存储指令

LDRH/STRH 半字数据加载/存储指令

LDRSB/LDRSH 有符号数字节/半字加载指令

3.如何从ARM指令集跳转到Thumb指令集?

BX指令跳转到指令中所指定的目标地址,并实现状态的切换。

Rm是一个表达目标地址的寄存器。当Rm中的最低位Rm[0]为1时,强制程

序从ARM指令状态跳到Thumb指令状态;当Rm中的最低位Rm[0]为0时,

强制程序从Thumb指令状态跳到ARM指令状态。

4.ARM指令集支持哪几种协处理器指令?

CDP LDC STC MCR MRC

5.ARM指令的条件码有多少个?默认条件码是什么?

15个 默认条件码是AL

6.ARM指令中的第二操作数有哪几种形式?试举例说明。

寄存器形式 MOV R1,R0 ;将寄存器R0的值传送到寄存器R1

立即数形式 MOV R0,#5 ;将立即数5传送到寄存器R0

被移位的寄存器形式 MOV R1,R0,LSL#3

7.MOV指令与LDR指令有何区别?

LDR 指令用于在存储器和处理器的寄存器之间传送数据

MOV 主要用于将一个寄存器中的数据传送到另一个寄存器,或者将一个立即数传送到寄存器,

8.判断下列指令正误,并说明理由?

(1)LDR R3,[R4]! (2)ADD R6,R5,#4!

(3)LDMIA R6,{R3-R7}! (4)LDMFD R13!,{R2,R4}

(5)ADD R1,R2,#0x104 (6)ADD R1,R2,#0x101

(7)MOV R0,R0 (8)MVN R7,#0x2F100

(9)MVN R0,R3,#2_01110000 (10)SBC R15,R6,LSR R5

(11)AND R5,[R6],R7 (12)MRS R15,CPSR

(13)MSR CPSR,#0x001 (14)MUL R3,R3,R6

(15)MUL R4,R6,#0x80 (16)STRB SP![R0,R4]

(17)LDRB R1,[R6,R4],R6 (18)STRB R0,[R15,#0x04]!

(19)LDRB PC,[R5] (20)LDRSB R5,[R4,#0x101]

(21)STRSH R6,[R5]

9.下列指令在什么条件下被执行

SUBMI R3,R3,#0x08 负数

ADDNE R0,R0,R4 不等

10.下列两段代码是用来实现打开中断和关闭中断,请补齐空白处内容

MRS R1,CPSR

BIC R0,R1,____ #0x80

MSR CPSR_c,R0

MRS R1,CPSR

ORR R1,_____

MSR CPSR_c,R1

11.举例说明B和BL指令的区别、BX和BLX的区别?

B指令示例:

backword SUB Rl,R1,#1

CMP R1,#0 ;比较R1和0

BEQ forward ;如果R1=0 则跳转到forward处执行

SUB R1,R2,#3

SUB R1,R1,#1

forward ADD R1,R2,#4

ADD R2,R3,#2

B backword ;程序无条件跳转到标号backword处执行

BL指令示例

BL func ;跳转到子程序

ADD R1,R2,#2 ;子程序调用完返回后执行的语句,返回地址

func ;子程序

… ;子程序代码

MOV R15,R14 ;复制返回地址到PC,实现子程序的返回

BX指令示例

CODE32 ;ARM程序段,32位编码

arm1 ADR R0,thumb1+1 ;伪指令,把语句标号thumb1所在的地址赋

;给R0,末位R0[0]置1,要跳转到THUMB指令集

MOV LR,PC ;设置返回地址

BX R0 ;跳转

ADD R1,R2,#2 ;返回地址处,第4条指令

CODE16 ;THUMB程序段,16位编码

thumb1 ADD R1,R3,#1 ;THUMB程序

BX LR ;跳转到返回地址处,执行第4条指令

BLX指令示例

CODE32 ;ARM程序段,32位编码

arm1 ADR R0,thumb1+1 ;伪指令,把语句标号thumb1所在的地址赋

;给R0,末位R0[0]置1,要跳转到THUMB指令集

;MOV LR,PC ;该指令注销 ,比较BL指令

BLX R0 ;跳转,同时设置返回地址 即PC?LR

ADD R1,R2,#2 ;返回地址处,第4条指令

CODE16 ;THUMB程序段,16位编码

thumb1 ADD R1,R3,#1 ;THUMB程序

BX LR ;跳转到返回地址处,执行第4条指令

分析:使用BLX指令代替BX指令简化了Thumb例程的调用,因为BLX指令在

连接寄存器LR中自动设置了返回地址。比较上例,该例中不需要使用MOV

LR,PC指令来保存PC的值了。

提醒:《常用的ARM指令总结》最后刷新时间 2024-03-14 01:01:38,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《常用的ARM指令总结》该内容的真实性请自行鉴别。