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 所指向的位置。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值