我正在查看这段 C 代码的反汇编代码:
#define GPIO_PORTF_DATA_R (*((volatile unsigned long *)0x400253FC))
int main(void){
// Initialization code
while(1) {
SW1 = GPIO_PORTF_DATA_R&0x10; // Read PF4 into SW1
// Other code
SW2 = GPIO_PORTF_DATA_R&0x01;
}
}
该SW1=
行的程序集是(抱歉无法复制代码):
以下是我的问题:
- 在第一行,PC = 0x00000A56,PC + 92 = 0x00000AB2,不等于 0x00000AB4,如图所示。为什么?
我对 SO 做了一些研究,发现 PC 实际上指向要执行的 Next Next 指令。
当 pc 用于读取时,ARM 模式下有 8 字节偏移,Thumb 模式下有 4 字节偏移。
但是 0x00000AB4 - 0x00000A56 = 0x5E = 94,它也不匹配 92+8 或 92+4。我哪里做错了?
参考: