ARM汇编语言学习笔记之寻址方式

所谓的寻址方式就是根据指令中的操作数的信息来寻找操作数实际物理地址的方式。根据指令中给出操作数的不同格式,ARM指令支持如下几种常见的寻址方式:
1.立即数寻址:
立即数寻址也叫作立即寻址,操作数本身就在指令中直接给出,取出这个指令也就获取到了操作数。该操作数也被成为立即数。

比如:MOV R0,#15
指令分析:将立即数15传入R0寄存器中。立即数用前缀”#”表示,不同的进制也有不同的表示方式默认是十进制。十六进制在”#”后面加上”0x”或者”&”,二进制加上”0b”。

2.寄存器寻址
利用寄存器中的数值作为操作数。执行效率比较高。

比如:ADD R0,R1,R2
指令分析:将R1+R2的值存入R0中。如果R1=0X00000001,R2=0X00000002。那么R0的值就是0x00000003

3.寄存器间接寻址
以寄存器中的值作为操作数的地址,而操作数本身存在存储器中。

比如:LDR R0,[R1]
指令分析:将寄存器R1的值作为操作数的地址,在存储器中取得一个操作数存入寄存器R0中。

如图:
这里写图片描述

4.寄存器移位寻址
操作数由寄存器中的数值做相应的移位得到。
比如:ADD R0,R1,R2,LSL #1
指令分析:将R1+(R2向左移位1)的值存入R0中。

5.基址变址寻址
将基址寄存器的内容和指令中给出的地址偏移量相加,从而得到一个操作数的地址。

比如:LDR R0,[R1,#4]
指令分析:将R1+4的值放入R0寄存器中

6.多寄存器寻址
就是一条指令可以完成多个寄存器值的传送。最多可以传16个寄存器的值。用”-“连接,”,”分隔。
例如:LDMIA R0!,{R1-R4}
LDMIA R0!,{R1,R3}

7.相对寻址
与基地变址寻址类似,以PC的当前值作为基地址,指令中的地址标号作为偏移量,两者相加。
例如:BL iehshx
….
iehshx ADD R0,#1

8.堆栈寻址
堆栈是数据结构里的。堆先进先出;栈先进后出。使用一个堆栈指针指示当前的操作位置,堆栈指针指向栈顶。ARM分别采用LDMFD 和 STMFD指令进行pop 和 push的操作。R13作为堆栈指针。
例如:STMFD R13!,{R0-R4}
LDMFD R13!,{R0-R4}

总结:在ARM中的常用寻址方式有八种:立即数寻址,寄存器寻址,寄存器间接寻址,寄存器移位寻址,基址变址寻址,多寄存器寻址,相对寻址,堆栈寻址。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值