在语句中使用它们时,程序计数器的值是多少? (集会)
What's the value of program counter when use them in a statement? (Assembly)
目前我有一个小的(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
?
显示的 PC 值几乎肯定不是绝对值。它们通常相对于模块的开头。
不同版本的ARM有不同的PC读取行为。早期版本的值相当于 0x9e。更高版本具有相当大的 "lookahead",因此它们的值为 0xa0 或更大。也就是说,在对 PC 进行采样时,它已经进一步排序以获取下一条指令。 因为@Notlikethat 找到了 1985 年的参考资料,说它们都是 +8 高级.
所以第二个指令源操作数PC, #0x20
将PC的值加32,但是PC的绝对地址(大致)是指令所在的位置,可以通过上面的数十亿字节重定位0x9e.
目前我有一个小的(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
?
显示的 PC 值几乎肯定不是绝对值。它们通常相对于模块的开头。
不同版本的ARM有不同的PC读取行为。早期版本的值相当于 0x9e。更高版本具有相当大的 "lookahead",因此它们的值为 0xa0 或更大。也就是说,在对 PC 进行采样时,它已经进一步排序以获取下一条指令。 因为@Notlikethat 找到了 1985 年的参考资料,说它们都是 +8 高级.
所以第二个指令源操作数PC, #0x20
将PC的值加32,但是PC的绝对地址(大致)是指令所在的位置,可以通过上面的数十亿字节重定位0x9e.