Получение значения ПК в сборке ARM - PullRequest
3 голосов
/ 27 апреля 2010

У меня есть проект 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 ]

7 голосов
/ 27 апреля 2010

ПК всегда один и тот же, потому что ldr r0, [r15] имеет фиксированный адрес (ПК там всегда одинаковый). используйте R14, потому что он содержит обратный адрес, это может быть то, что вам нужно. или используйте встроенные функции.

4 голосов
/ 27 апреля 2010

Если это истинная функция, вы всегда должны получать одно и то же значение в этом коде, поскольку вы просто возвращаете текущий ПК, который находится внутри GetPC.

Вы, вероятно, хотите:

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