初级会员

- 积分
- 53
- 金钱
- 53
- 注册时间
- 2019-10-29
- 在线时间
- 15 小时
|
2金钱
本帖最后由 RongLiu 于 2019-11-6 15:51 编辑
看了正点原子的教程,在裸机篇教程中,对于ldr指令的使用有疑问,目前看到了关于ldr的3种使用形式:
1)ldr r0,=0x87800000
2)ldr r0, label
3)ldr r0, [r1]
关于1),是将一个立即数放到r0寄存器,因为高于8位的立即数mov指令不能放,所以高于8位的必须用 1)这种形式,这个指令是一个伪指令。没疑问。
关于2),有疑问了,label是一个标号,对应的是一个地址值,ldr r0,label,我理解的是将labe这个标号处(地址处)对应的值拷贝到r0。 不知是否正确,待确证。
关于3),r1寄存器存放的是ram中某个字的地址,ldr r0,[r1]则是将对应地址内存中的值送到r0。没疑问。
看起来,如果2)的理解我是真确的,那2)和3)意思感觉一样,既然这样为什么不直接都使用2)呢?
比如,内存中某个地址为0x87800000,将0x87800000处的值送入r0,直接这样:
ldr r0,0x87800000
而不是这样:
ldr r1,=0x87800000
ldr r0,[r1]
请各位坛友指正。谢谢!!
|
最佳答案
查看完整内容[请看2#楼]
ldr r0,label你的理解应该是正确的,将label出的值加载到r0中,这个很好验证的,直接读取I.MX6U内部的寄存器值就知道了,label就是寄存器地址。
|