目前我有一个小型(ARM Cortex M4)汇编程序,我有一个问题的摘录如下:
PC Instruction
0x9c MOV R0, #0
0x9e LDR.N R1, [PC, #0x20]
0xa0 STR.N R0, [R1]
在第二行PC = 0x9e
。但是,当访问PC作为其中一个操作数时,它有什么价值? 0x9e
或0xa0
?
答案 0 :(得分:1)
显示的PC值几乎肯定不是绝对的。它们通常相对于模块的开头。
不同版本的ARM具有不同的PC读取行为。早期版本的值等于0x9e。后来的版本具有相当大的“前瞻性”,因此它们具有0xa0或更大的值。也就是说,当PC被采样时,它已经进一步排序以获取下一条指令。 Stricken因为@Notlikethat发现1985年的参考文献说它们都是+8高级。
因此第二个指令源操作数PC, #0x20
将PC的值加32,但PC的绝对地址(大致)在指令所在的位置,可以通过0x9e以上的数十亿字节重新定位。