ARM寻址方式(ARM指令获取操作数的方式)

所谓寻址方式,指的是CPU去获取一个操作数的方式,可以是从指令中获取立即数、可以是从寄存器中获取,也可以是从内存中获取。    


          目录

1、立即数寻址

2、寄存器寻址

 3、寄存器移位寻址

4、寄存器间接寻址

5、基址加变址寻址

(1) 前向索引(先自增地址,再执行指令)

(2) 后向索引(先执行指令,再自增地址)


1、立即数寻址

立即数寻址指的是从指令中获取数据,比如

MOV R1,#1        @ 1 是立即数,生成二进制机器码以后,会被保存在指令中

CPU从内存拿到指令(二进制机器码)以后,直接从指令中取出操作数,也就是说参与运算的数来自于机器码,这种方式称为“立即寻址”。

2、寄存器寻址

顾名思义,寄存器寻址指的是参与运算的数据来自于其他寄存器

ADD R1, R2, R3            @ 参与运算的两个数分别来自于R1寄存器和R2寄存器

 3、寄存器移位寻址

寄存器里的数据并不是直接参与运算,而是参与运算的数据先经过移位,然后再参与运算

MOV R1, R2, LSL #1        @ 先将R2寄存器的数据左移1位,然后再保存到R1寄存器中

注意:MOV指令的操作位只有两位,这里要把 R2, LSL #1 看作一个整体 

4、寄存器间接寻址

之所以称之为“间接”,是因为寄存器里保存的是地址,不直接参与运算,通过地址来操作内存,取出数据参与运算

STR R1,[R2]    @ 并不是用R2这个寄存器来参与运算,只是用R2寄存器里保存的内容来操作内存

 

5、基址加变址寻址

下面以STR指令为例。

(1) 前向索引(先自增地址,再执行指令)

MOV R1, #0xFFFFFFFF
MOV R2, #0x40000000
STR R1, [R2, #8]             @ 将 R1 寄存器的数据保存到 R2+8 的地址位置

这里是先让 R2的地址临时自增8,然后将R1寄存器的数据保存到内存中 R2+8 的位置。R2寄存器保存的地址不受影响

如果要改变R2寄存器中的地址,需要在指令末尾加 “ ! ”,注意是英文字符

 

(2) 后向索引(先执行指令,再自增地址)

MOV R1, #0xFFFFFFFF
MOV R2, #0x40000000
STR R1, [R2], #8             @ 将 R1 寄存器的数据保存到 R2 的地址位置,然后让R2自增8

这里是先执行保存指令,然后让R2寄存器中的地址自增。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值