当前位置:   article > 正文

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) 前向索引(先自增地址,再执行指令)

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

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

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

 

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

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/1022174
推荐阅读
相关标签
  

闽ICP备14008679号