ARM处理器体系结构知识—[1]寻址方式

不同平台下的机器指令基本上都是进行数据处理的指令,这些指令大致可分为:读取、写入和运算。从CPU的视角看来重要的不是数据的值是多少,而是我该从哪里获取数据。处理数据的机器指令把数据的位置分为:

  • 立即数。数据直接保存在机器指令中,
MOV R0 , 1546
  • 寄存器。数据保存在寄存器中,在机器指令中给出相应的寄存器名称,
MOV R0 , R4
  • 内存。数据保存在内存中。机器指令使用多种灵活的方式进行寻址,
LDR R1 , [R0]

STMFD SP! , {R1-R5 , LR}

....

寻址方式

当数据保存在内存中时,需要以某种方式来给定这个内存单元的地址,处理器根据地址来定位内存单元中的数据,这种方式成为寻址方式。为了满足灵活的对内存数据进行寻址,机器指令中有多种寻址方式,在ARM平台中支持8种寻址方式。

立即寻址

机器指令的地址字段不是操作数的地址,而是操作数本身。由于避免了访问内存,机器指令执行时间短。

MOV R0 , #1234        ; R0 = 1234 ,在ARM平台中立即数以#作为前缀

寄存器寻址

当操作数保存在通用寄存器中,使用寄存器寻址,指令使用寄存器编号当作操作数地址进行取值操作,

MOV R0 , R4           ; R0 = R4

寄存器移位寻址

ARM平台特有指令,和寄存器寻址方式相似,只是在读取寄存器中的操作数前,对操作数执行移位操作。寄存器移位寻址支持五种移位操作:

  • LSL:逻辑左移,空位补零。
  • LSR:逻辑右移,空位补零。
  • ASR:算数右移,符号位不变,其余空位补零。
  • ROR:循环右移,移出的低位补空出的高位。
  • RRX:带扩展的循环右移,操作数右移一位,空出的高位用C标志位填充。
MOV R0 , R4 , LSL #2   ; R0 = R4 << 2 一般使用左移替代乘法操作,可以理解为R0 = R4 * 2

寄存器间接寻址

和寄存器寻址的区别是:指令中寄存器中不是操作数,而是操作数所在内存的地址,比寄存器间接寻址多了访问内存过程,所以称为“间接”,

LDR R0 , [R4]          ; 将R4的值作为地址,取出地址中的操作数赋给R0 , ARM平台使用LDR指令来处理地址相关的取值操作。

基址寻址

在寄存器间接寻址的基础上,把存有地址的寄存器作为基址,和提供的偏移量相加作为操作书的有效的地址进行寻址取值,常见于数组访问操作,

LDR R0 , [R4 , #4]     ; R4中地址加上4作为有效地址,读取此地址中的值赋给R0

多寄存器寻址

通过一条指令完成对多个(R0~R15,最多16个)通用寄存器的批量传送。多用于函数调用时的环境保护、参数传递、数据块拷贝等,

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

堆栈寻址

和多寄存器寻址相似,只是基址寄存器是一个特殊寄存器—堆栈指针寄存器SP,所以操作数或是从堆栈内存中批量读取或是批量写入到堆栈内存中,在读取和写入过程中遵从栈数据的“先进后出”结构特点。这种寻址方式是ARM平台特有寻址方式,需要使用特定指令LDMFA/STMFA、LDMEA/STMEA、LDMFD/STMFD、LDMED/STMED完成,其中FA、EA、FD、ED为指令后缀,具体含义见相应指令说明,

STMIA SP! , {R1-R7 , LR} ;将R1~R7和LR中的值入栈,常见于函数调用时的“现场环境保护”

LDMIA SP! , {R1-R7 , LR} ;将数据出栈,读取到R1~R7和LR中,“恢复现场”

相对寻址

以当前的PC寄存器中值作为基地址,加上指令中的地址标号偏移量,作为有效地址,

    BL LABEL             ;让处理器跳转到LABEL出的指令继续执行
    ....
LABEL:
    ....
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值