程序计数器在声明中使用时的价值是什么? (部件)

时间:2015-04-22 21:10:59

标签: assembly arm

目前我有一个小型(ARM Cortex M4)汇编程序,我有一个问题的摘录如下:

PC    Instruction
0x9c  MOV    R0, #0
0x9e  LDR.N  R1, [PC, #0x20]
0xa0  STR.N  R0, [R1]

在第二行PC = 0x9e。但是,当访问PC作为其中一个操作数时,它有什么价值? 0x9e0xa0

1 个答案:

答案 0 :(得分:1)

显示的PC值几乎肯定不是绝对的。它们通常相对于模块的开头。

不同版本的ARM具有不同的PC读取行为。早期版本的值等于0x9e。后来的版本具有相当大的“前瞻性”,因此它们具有0xa0或更大的值。也就是说,当PC被采样时,它已经进一步排序以获取下一条指令。 Stricken因为@Notlikethat发现1985年的参考文献说它们都是+8高级。

因此第二个指令源操作数PC, #0x20将PC的值加32,但PC的绝对地址(大致)在指令所在的位置,可以通过0x9e以上的数十亿字节重新定位。