获取ARM程序集中的PC值

时间:2010-04-27 18:11:37

标签: windows-mobile assembly arm

我有一个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

2 个答案:

答案 0 :(得分:7)

PC每次都相同,因为ldr r0, [r15]有固定地址(PC总是在那里相同)。使用R14,因为它包含返回地址,这可能是您需要的。或使用内联函数。

答案 1 :(得分:4)

如果这是一个真正的函数,你应该总是在这段代码中获得相同的值,因为你只是返回GetPC内部的当前PC。

你可能想要:

move r0, lr // put return address in r0
move pc, lr // return