我有一个Windows Mobile 6 ARMV4I项目,我希望获得程序计数器的值。
该函数声明如下:
extern "C" unsigned __int32 GetPC();
我的汇编代码如下:
GetPC FUNCTION
EXPORT GetPC
ldr r0, [r15] ; load the PC value in to r0
mov pc, lr ; return the value of r0
ENDFUNC
但是,当我调用GetPC()
函数时,每次都得到相同的数字。所以,我假设我的集会没有做我认为它正在做的事情。有谁可以指出我可能做错了什么?
谢谢, PaulH
答案 0 :(得分:7)
PC每次都相同,因为ldr r0, [r15]
有固定地址(PC总是在那里相同)。使用R14,因为它包含返回地址,这可能是您需要的。或使用内联函数。
答案 1 :(得分:4)
如果这是一个真正的函数,你应该总是在这段代码中获得相同的值,因为你只是返回GetPC内部的当前PC。
你可能想要:
move r0, lr // put return address in r0
move pc, lr // return