“程序计数器”和“起始地址”之间的区别

时间:2012-03-22 13:22:30

标签: c gdb embedded

我正在使用GDB在嵌入式设备上加载可执行文件。加载可执行文件时,GDB说:

xPSR: 0x01000000 pc: 0xf0094902 msp: 0x2001b508
Loading section .text, size 0x16240 lma 0x8000000
Loading section .data, size 0x8f0 lma 0x8016240
Start address 0x8000000, load size 92976

据我所知,pc是指令指针。我假设“起始地址”是pc的起始地址。但是,在GDB给出的信息中,起始地址(0x8000000,偶然与.text相同)pc(0xf0094902)相同。

pc和起始地址有什么区别?将起始地址与.text相同是否有意义?

3 个答案:

答案 0 :(得分:5)

我假设程序计数器是您加载后的当前值,但开始运行之前。当你开始运行时,那么当然取决于处理器,但它很可能描述了开始执行加载代码的地址,在允许处理器再次运行之前设置程序计数器的地址。如果您运行然后快速停止,您应该在.text范围内看到pc 0x80000000 + 0x16240

的内容

答案 1 :(得分:3)

这里提到的“起始地址”是二进制映像的开始,而不是执行起始地址。执行的起始地址是复位向量中的任何内容(假设您像以前一样使用Cortex-M3?)。

答案 2 :(得分:1)

维基百科:“根据特定计算机的详细信息,PC或IP保存正在执行的指令的内存地址,或者执行下一条指令的地址。”我不能确定,但​​可能正在执行下一条指令来执行。

编辑:

您可能会找到检查处理器文档的严谨答案。例如,在MSP430微控制器中,PC的初始条件是复位向量的地址。因此,请检查处理器doc以查找寄存器的初始条件。