文档介绍:第3章 ARM指令特点和寻址方式
ARM指令特点和寻址方式
简介
ARM处理器是基于精简指令集计算机(RISC)原理设计的,指令集和相关译码机制较为简单。ARM7TDMI(-S)具有32位ARM指令集和16位Thumb指令集,ARM指令集效率高,但是代码密度低;而Thumb指令集具有较高的代码密度,却仍然保持ARM的大多数性能上的优势,它是ARM指令集的子集。所有的ARM指令都是可以有条件执行的,而Thumb指令仅有一条指令具备条件执行功能。ARM程序和Thumb程序可相互调用,相互之间的状态切换开销几乎为零。
ARM指令特点和寻址方式
ARM指令集与Thumb指令集的关系
Thumb指令集具有灵活、小巧的特点
ARM指令集支持ARM核所有的特性,具有高效、快速的特点
ARM处理器寻址方式
寻址方式分类
寻址方式是根据指令中给出的地址码字段来实现寻找真实操作数地址的方式。ARM处理器具有9种基本寻址方式。
; ;
; ;
; ;
; ;
。
立即寻址也称为立即数寻址,是一种特殊的寻址方式。操作数是直接通过指令给出,数据就包含在指令的32位编码中,只要取出指令就可在指令执行时得到立即操作数。举例如下:
SUBS R0,R0,#1 ;R0 -1 -> R0,并且影响标志位
MOV R0,#0xFF ;0xFF - > R0
注意:立即数要以”#”号为前缀,表示十六进制数值以”0x”表示.
0x55
R0
MOV R0,#0xFF
程序存储
ARM处理器寻址方式
寻址方式分类——立即寻址
MOV R0,#0xFF
0xFF
从代码中获得数据
操作数的值在寄存器中,指令中的地址码字段指出的是寄存器编号,指令执行时直接取出寄存器值来操作。寄存器寻址指令举例如下:
MOV R1,R2 ;R2 -> R1
SUB R0,R1,R2 ;R1 –R2 ->R0
0xAA
0x55
R2
R1
ARM处理器寻址方式
寻址方式分类——寄存器寻址
MOV R1,R2
0xAA
寄存器间接寻址指令中的地址码给出的是一个通用寄存器的编号,所需的操作数保存在寄存器指定地址的存储单元中,即寄存器为操作数的地址指针。寄存器间接寻址指令举例如下:
LDR R1,[R2] ;将R2指向的存储单元的数据读出
;保存在R1中
STR R1,[R2] ;将R1的内容保存到指向的存储单元中
0x55
R1
R2
0x40000000
0xAA
0x40000000
ARM处理器寻址方式
寻址方式分类——寄存器间接寻址
LDR R1,[R2]
0xAA
基址寻址就是将基址寄存器的内容与指令中给出的偏移量相加,形成操作数的有效地址。基址寻址用于访问基址附近的存储单元,常用于查表、数组操作、功能部件寄存器访问等。基址寻址指令举例如下:
LDR R2,[R3,#0x0C] ;将R3+0x0C作为地址,取出此地址中
;的数值保存在R2中
STR R1,[R0,#-2] ;将R0中的数值减2作为地址,把R1中
;的内容保存到此地址位置.
ARM处理器寻址方式
寻址方式分类——基址寻址
0x55
R2
R3
0x40000000
0xAA
0x4000000C
LDR R2,[R3,#0x0C]
0xAA
将R3+0x0C作为地址装载数据
ARM处理器寻址方式
寻址方式分类——基址寻址
LDR R0 ,[R1 , #4]
;R0[R1+4]
LDR R0 ,[R1 , #4] !
;R0[R1+4] , R1R1+4
前索引
寻址
LDR R0 ,[R1],#4
;R0[R1] ,R1R1+4
后索引
寻址
前索引寻址是将基址与偏移量相加作为传送数据的地址,传送数据后自动
将数据的地址传送给基址寄存器。
后索引寻址是将基址作为传送数据的地址,传送数据后自动将基址的内容
与偏移量相加传送给基址寄存器。
相对寻址是基址寻址的一种变通。由程序计数器PC提供基准地址,指令中的地址码字段作为偏移量,两者相加后得到的地址即为操作数的有效地址。相对寻址指令举例如下:
BL SUBR1 ;调用到SUBR1子程序
BEQ LOOP ;条件跳转到LOOP标号处
...
LOOP MOV R6,#1
...
SUBR1 ...
ARM处理器寻址方式
寻址方式分类——相对寻址