ARM高分笔记--(三)ARM寻址方式

来源:互联网 发布:淘宝店铺无法订购花呗 编辑:程序博客网 时间:2024/05/18 05:37

寻址方式就是说: 处理器根据指令中给出的地址信息来寻找物理地址的方式


一、立即寻址

立即寻址也叫立即数寻址,就是说:操作数本身就在指令中,这个操作数就叫立即数。所以这种指令对应的寻址方式就叫立即寻址。

eg: 

 ADD R0,R0,#1     ; R0= R0+1

注意: 当操作数作为立即数时,必须以“#”为前缀,对于16进制的立即数还要加上 “0x“  或 ”&“

二、寄存器寻址

寄存器寻址就是:利用寄存器中的数值作为操作数。(这种寻址方式执行效率较高)

eg: 

 ADD R0 , R1 , R2    ;  R0 = R1+R2

三、寄存器间接寻址

寄存器间接寻址就是:以寄存器中的值作为操作数的地址,而操作数本身存放在存储器中

eg:

 ADD R0 , R1 ,[R2]   ; R0 = R1+R2    [ ]  表示取值符

四、基址变址寻址

基址变址寻址就是:将寄存器(基址寄存器)的内容与地址中给出的地址偏移量相加,从而得到一个操作数的有效地址

eg:

(1) LDR R0 , [R1 , #4]   ; R0 = [R1 + 4]  (2) LDR R0 , [R1 , #4]!   ; R0 = [R1 + 4]  , ! 叹号表示,同时还要改变基址寄存器中的值,R1 = R1 + 4(3) LDR R0 , [R1], #4    ;   R0 = [R1]  同时 改变基址寄存器的值 R1 = R1+4(4)LDR R0 , [ R1 , R2]   ; R0 = [ R1 + R2] 

判断是否位基址变址寻址的关键是看:最后基址寄存器是否有改变,如eg (3),如果不改变就是寄存器寄存器间接寻址

五、多寄存器寻址

多寄存器寻址:   一条指令可以完成多个寄存器值的传送

这种寻址方式可以用一条指令传送最多16个通用寄存器的值

eg: 

 LDMIA R0 , {R1,R2,R3,R4}    ; R1 = [R0] , R2 = [R0+4] , R3 = [R0+8] ,R4 = [R0+12]

其中,后缀 IA 表示每次执行完 加载/存储 操作后,R0 按字长度增加 

六、相对寻址

相对寻址就是: 以程序计数器PC的当前值为基地址,指令中的地址标号作为偏移量,将两者相加之后得到操作数的有效地址

eg: 

BL  NEXT    ; 跳转指令BL就采用了相对寻址.....NEXT .........MOV PC,LR;

七、堆栈寻址

堆栈是一种数据结构(它其实就是存储器中的一块连续存储单元,配合一个专用寄存器--存放堆栈指针实现的一种工具),它按先进先出的方式工作。

这里的专用寄存器叫堆栈指针,用来指示当前堆栈的操作位置,堆栈指针总是指向栈顶

名词解释: 

递增堆栈:数据向高地址方向生长

递减堆栈:数据向低地支方向生长

满堆栈:堆栈指针指向最后一个数据

空堆栈:堆栈指针指向最后一个数据的下一个位置


原创粉丝点击