当前位置:   article > 正文

ARM 寻址方式(18)

ARM 寻址方式(18)

立即寻址: 也叫作立即数寻址。

就是 立即数,本身就包含在了 指令当中。

举例:

ADD R0, R0,#1

其中,#1 , 就是立即数,对于16进制的立即数, 需要在# 后加上 #0x.

寄存器寻址。

就是数据就在 寄存器中。

举例:

ADD,R0,R1,R2 。

寄存器,间接寻址。

就是,利用寄存器中的数值,来去内存中去寻找数据。

举例:

LDR R0, [R1]

基址变址寻址

就是 寄存器中的数值,加上一个数的这种方式。

举例:

相对寻址。

就是,以当前PC指针的地址作为基地址,然后将指令中的地址,作为偏移量,然后两者相加,得到一个新的地址。

疑问: 我不太明白 将指令中的地址作为偏移量这句话中的 偏移量是怎么得来的?

举例:

多寄存器寻址:

就是一条指令可以给多个寄存器 赋值,或者可以从多个寄存器中取出值来。

举例:

LDMIA R0, {R1,R2,R3,R4}

LDM 是指,R0 指向的地址的值, 付给多个寄存器。

首先将 [R 0] 的值 给到R1, 然后将[R0+4] 的值,给到R2, 然后将[R+8] 的值给到R3, 然后将[R0+12] 的值给到R4

IA的意思是指,当R0 做一次赋值之后,要往前移动4个字节。

这就相当于是在出栈。

与LDM对应的指令是 STM , 这个指令就是压栈了。

命令的格式是:

LDM(或STM){条件}{类型} 基址寄存器{!},寄存器列表{∧}

这是类型的分类。

举例:

STMFD  R13! ,{R0,R4-R12,LR}

这条指令的意思是,将寄存器表中的内容,写到R13所指向的内存中,如果加上了! 的换,那么再数据写完之后,还要更新一下R13 的值,相当于,再移动指针。

LDMFD, R13! ,{R0,R4-R12,PC}

这条指令的意思是,将堆栈中的数据,全部赋值到 寄存器组中。并且还要更新R13 所指向的位置。

注意,在寄存器组中,不管你写的顺序是什么,他都会,从新 从低到高排列好在进行赋值。

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

闽ICP备14008679号