ARM处理器有9种寻址方式:
1、寄存器寻址
操作数的值在寄存器中,指令中的地址码字段指出的是寄存器编号,指令执行时直接取出寄存器值操作。
寄存器寻址指令举例如下:
MOV R1,R2 ;R2->R1
SUB R0,R1,R2 ;R1-R2->R0
2、立即寻址
立即寻址指令中的操作码字段后面的地址码部分就是操作数本身,也就是说,数据就包含在指令当中,取出指令也就取出了可以立即使用的操作数(立即数)。
立即寻址指令距离如下:
SUBS R0,R0,#1 ;R0-1->R0
MOV R0,#0xff00 ;0xff00->R0
立即数要以“#”为前缀,表示16进制数值时以“0x”表示
3、寄存器偏移寻址
寄存器偏移寻址是ARM指令集特有的寻址方式,当第2操作数是寄存器偏移方式时,第2个寄存器操作数在与第1个寄存器操作数结合之前,选择进行移位操作。
寄存器偏移寻址方式指令举例如下:
MOV R0,R2,LSL #3 ;R2的值左移3位,结果放入R0,即R0=R2*8
ANDS R1,R1,R2,LSL R3 ;R2的值右移R3位,然后和R1想与操作,结果放入R1
可采用的移位操作如下:
LSL:逻辑左移(Logical Shift Left),寄存器中字的低端空出的位补0
LSR:逻辑右移(Logical Shift Right),寄存器中字的高端空出的位补0
ASL:算术左移(Arithmetic Shift Left),操作数向左移位,低位补0
ASR:算术右移(Arithmetic Shift Right),移位过程中保持符号不变,即如果源操作数为正数,则字的高端空出的位补0,否则补1
ROR:循环右移(Rotate Right),由字的低端移出的位填入字的高端空出的位
RRX:带扩展的循环右移(Rotate Right eXtended by 1place),操作数右移一位,高端空出的位用原C标志值填充
4、寄存器间接寻址
寄存器间接寻址指令中的地址码给出的是一个通用寄存器编号,所需要的操作数保存在寄存器指定地址的存储单元中,即寄存器为操作数的地址指针
寄存器间接寻址指令举例如下:
LDR R1,[R2] ;将R2中的数值作为地址,取出此地址中的数据保存在R1中
SWP R1,R1,[R2] ;将R2中的数值作为地址,取出此地址中的数值与R1中的值交换
5、基址寻址
基址寻址是将基址寄存器的内容与指令中给出的偏移量相加,形成操作数的有效地址,基址寻址用于访问基址附近的存储单元,常用于查表,数组操作,功能部件寄存器访问等。
基址寻址指令距离如下:
LDR R2,[R3,#0x0f] ;将R3中的数值加0x0f作为地址,取出此地址的数值保存在R2中
STR R1,[R0,#-2] ;将R0中的数值减2作为地址,把R1中的内容保存到此地址位置
6、多寄存器寻址
多寄存器寻址就是一次可以传送几个寄存器值,允许一条指令传送16个寄存器的任何子集或所有寄存器
多寄存器寻址指令距离如下:
LDMIA R1!,{R2-R7,R12} ;将R1单元中的数据读出到R2-R7,R12,R1自动加1
STMIA R0!,{R3-R6,R10} ;将R3-R6,R10中的数据保存到R0指向的地址,R0自动加1 这里保存到R0指向的地址是指R0指向的首地址,是指一片内存
7、堆栈寻址
8、块拷贝寻址
9、相对寻址
跳转指令:从程序的一个位置跳转到另一个位置
下面四个指令可以完成32MB的地址空间跳转,可以向前,也可以向后
B B{条件} 目标地址 //条件可以有,也可以没有
CMP R1, #1
BL
BLX
BX
ARM指令集
最新推荐文章于 2024-03-13 12:43:46 发布
本文详细介绍了ARM处理器的9种寻址方式,包括寄存器寻址、立即寻址、寄存器偏移寻址、寄存器间接寻址、基址寻址、多寄存器寻址、堆栈寻址、块拷贝寻址和相对寻址。通过实例解析了每种寻址方式的工作原理和应用场景,帮助读者深入理解ARM指令集的操作机制。
摘要由CSDN通过智能技术生成