赞
踩
立即寻址: 也叫作立即数寻址。
就是 立即数,本身就包含在了 指令当中。
举例:
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 所指向的位置。
注意,在寄存器组中,不管你写的顺序是什么,他都会,从新 从低到高排列好在进行赋值。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。