ARM 伪指令
start MOVR0,#10ADRR4 ,start;-》SUB R4,PC,#0x0c
为什么Pc要减去12即0x0c而不是4
ADRR4 ,start;-》SUB R4,PC,#0x0c
运行这句的时候PC已经指向下一句了,所以实际减去的应该包含2句指令所占的空间。 执行完 ADR 这行,PC指针减去 12 后,会 +4。
(PC - 8),刚好就是 MOV R0,#10 这行。
楼主可以试试 SUB R4,PC, #0x08,这应该是个死循环。 arm8686 发表于 2015-1-5 12:18
执行完 ADR 这行,PC指针减去 12 后,会 +4。
(PC - 8),刚好就是 MOV R0,#10 这行。
谢谢大神 解释的真好谢谢我最近 再看ARM汇编还有个问题
是
start MOV R0,#10
ADRL R4,start+6000;->ADD R4,pc,#0xe800
; ADD R4,R4,#0x254
ADRL
怎么成了两个汇编,这个伪指令为啥要变成 那俩ADD
谢谢!!! pathletboy 发表于 2015-1-5 12:16
ADRR4 ,start;-》SUB R4,PC,#0x0c
运行这句的时候PC已经指向下一句了,所以实际减去的应该包含2句 ...
谢谢大神 解释的真好谢谢我最近 再看ARM汇编还有个问题
是
start MOV R0,#10
ADRL R4,start+6000;->ADD R4,pc,#0xe800
; ADD R4,R4,#0x254
ADRL
怎么成了两个汇编,这个伪指令为啥要变成 那俩ADD
谢谢!!! 为啥2个汇编你得看官方编译器怎么解释。
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0204ic/Cacecdga.html
ADRL 始终汇编为两个 32 位指令。 即使使用单个指令就可完成地址访问,也会生成多余的第二个地址。 pathletboy 发表于 2015-1-5 12:43
为啥2个汇编你得看官方编译器怎么解释。
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.du ...
我理解的是 因为一个指令放不开 那么大的地址 所以变成两个
书上说因为地址是程序相对偏移或寄存器相对偏移,ADRL产生与位置无关的代码。若label是程序相对偏移,则必需取值成与ARDL伪指令在同一代码区域的地址,否则连接后可能会超出范围。
什么叫位置无关的代码 什么叫同一代码区域 为什么会超出范围
PS 刚开始看arm 汇编一肚子问题请大哥耐心解答 非常感激 仔细看我给你的连接,你想要的答案上面都有,嵌入式学习,最重要的先要学会看文档,而不是问,问出来的东西,都是人家总结过的,只有一个结果,你却不知道中间过程,这样是不利于学习的。 pathletboy 发表于 2015-1-5 13:36
仔细看我给你的连接,你想要的答案上面都有,嵌入式学习,最重要的先要学会看文档,而不是问,问出来的东西 ...
额好吧我先看看 与非朋 发表于 2015-1-5 14:29
额好吧我先看看
恩恩看到了文档很全谢了
页:
[1]
2