LDR R1,= 0x12345678 和 LDR R1,0x12345678 区别???
原帖地址:http://wogoyixikexie.blog.163.com/blog/static/8877862420087255472140/?????????????????????? http://blog.csdn.net/denleeLDR R1,= 0x12345678 和 LDR R1,0x12345678 区别???
请教:??
? LDR? ? R1,=? 0x12345678? ? ? ;加载? 32? 位立即数?? ? 和? ?? ? LDR? ? R1,0x12345678? ? ?? ? 有什么不相同啊??? ? 一般在什么情况下用? ? LDR? ? R1,=? 0x12345678? ??? ? 在什么情况下用? LDR? ? R1,0x12345678? ??? ?? LDR? ? R0,=LED_TAB? ? ? ? ? ? ? ;加载标号地址?? ? 和? ?? ? LDR? ? R0,LED_TAB? ? ?? ? 有什么不相同啊??? ? 一般在什么情况下用? LDR? ? R0,=LED_TAB? ??? ? 在什么情况下用? ? LDR? ? R0,LED_TAB? ??? ? ?? ? ?? ? 谢谢!
/////////////////////////////////////////////////////////////////////////////////////////
回复:LDR R1,0x12345678 ...
1. 没有“LDR R1,0x12345678 ”
2. 以下两条指令是一样的,都被称为“伪指令”,就是说编译器会把这条指令替换成其他合适的指令。 LDR? ? R1,=0x12345678 LDR? ? R0,=LED_TAB? ? ? ? ? ? ?? 如果这些数值不太复杂,那么就会用mov指令代替,比如: ldr r1,=0x00 在编译时就会变成: mov r1,#0x00 如果这些数值很复杂,那么编译时,这个数值会被保存在某个地方,然后使用读内存的指令进行读取,比如: LDR? ? R1,=0x12345678 在编译时变成: ldr? r1,[pc,xxxxx]? // 这个xxx与pc相加,刚好就是some_locate的地址──编译器会帮你做好这一切 some_locate: .word 0x12345678 3. 你说“LDR? ? R0,=LED_TAB? ? ? ? ? ? ? ;加载标号地址? ”,没错, LED_TAB是个地址标号,就是一个数值而已,编译器连接程序时会确定它的值,如果它很简单,就会使用mov指令赋值;如果很复杂,就存在某个地址,然后用读内存的指令读出。 4. LDR? ? R0,LED_TAB?? 没有“=”号,它表示“读内存”. 比如: LDR? ? R0,LED_TAB?? LDR? ? R1,=LED_TAB?? LED_TAB: .work 0x12345678 R0的值是0x12345678,R1的值是LED_TAB标号值,就是0x12345678在内存中存放的地址 下面是另一位牛人的博文,我都贴上来吧 ************************************************************************* ?ARM汇编有ldr指令以及ldr、adr伪指令,他门都可以将标号表达式作为操作数,下面通过分析一段代码以及对应的反汇编结果来说明它们的区别。 ??? ?ldr???? r0,_start ?? 0x00000000:?e59f0004 ?ldr?r0,#4]?; 0xc 1.ldr???? r0,_start 2.adr???? r0,_start relocate: /* 把U-Boot重新定位到RAM */ 3.ldr???? r0,=_start ?????????????????????????????????????????????????????????????????? 为:0x00000010:?3000000c。如果 label-expr是一个外部表达式,或者未包含于当前段内,则汇编程序在目标文件中放置一个链接程序重定位命令。链接程序在链接时生成地址。 参考资料: 1.?ARM DUI 0204BSC,RealView 编译工具 2.0 版 汇编程序指南,http://infocenter.arm.com/help/index.jsp 2.?GNU汇编使用经验,http://blog.chinaunix.net/u1/37614/showart_390095.html 3.?对.lds连接脚本文件的分析,http://blog.chinaunix.net/u1/58780/showart.php?id=462971 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |