6】ARM伪指令

在ARM汇编语言编程中,伪指令并非真正的机器指令,他们不被处理器直接执行,而是由汇编器在预处理阶段处理。这些伪指令帮助程序员完成变量初始化、代码组织和优化等工作,简化编程过程。

一、ARM常用伪指令指令分析

相关问题

设定链接地址

链接地址代表汇编指令第一条指令的地址

仿汇编窗口

1.1 LDR R1,=0X12345678 分析

总结:编译器在编译的时候将 ldr r1,=0x12345678 编译为 ldr r1,[pc,#0x0008] 这一条读内存的指令。将PC寄存器的值加上偏移量算出0x12345678这个值所占据的内存的地址,然后将这个地址的数据读取进 r1 寄存器中。

1.2 LDR R1,=Label 分析

将标签对应的下条指令的地址读入 r1 中

总结:LDR R1,=Label 指令表示将label的地址写入 r1,label的地址由指定的代码段运行地址        (-T text=地址值)来决定。

编译器的做法:

  • 首先根据指定的代码段开始的地址,算出label标签对应的地址值
  • 然后将这个地址值存放在一个位置
  • 生成内存访问指令,根据 pc+固定偏移量,找到标签对应地址存放的位置在

注意:

当代码编译结束时,标签所表示的地址值(根据指定的代码段地址)已经编译死存放在程序文件中。

1.3 LDR R1,Label 分析

LDR R1,Label 表示读取 label 表示的地址对应的数据

1.4 ADR R1,Label 分析

ADR R0,Label 指令表示根据当前的PC的值 +/- 偏移量,动态获取当前Label所表示的内存地址

1.5 如何判别代码在实际内存中的运行的地址?

ADR R0,_start 可以知道,因为adr命令是根据PC寄存器的值动态获取地址

LDR R0,=start 无法知道,这条指令无论在哪里执行,R0的值都是固定的(取决于指定的链接地址)

ADR和LDR所获得的值可能是相同的,但两者的原理是不同的:ADR是加法指令,LDR是内存访问指令,即ADR是动态访问内存,LDR是静态访问内存。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值