Странное поведение ldr [pc, #value]

Я отлаживал некоторый код C ++ (WinCE 6 на платформе ARM), и я нахожу некоторое поведение странным:

    4277220C    mov         r3, #0x93, 30
    42772210    str         r3, [sp]
    42772214    ldr         r3, [pc, #0x69C]
    42772218    ldr         r2, [pc, #0x694]
    4277221C    mov         r1, #0
    42772220    ldr         r0, [pc, #0x688]

Линия42772214 ldr r3, [pc, #0x69C] используется, чтобы получить некоторую константу из раздела .DATA, по крайней мере, я так думаю.

Что странно, что согласно коду r2 следует заполнять памятью с адреса pc = 0x42772214 + 0x69C = 0x427728B0, но в соответствии с содержимым памяти, загруженным из 0x427728B8 (8 байтов +), это происходит и для других использований ldr.

Это вина отладчика или мое понимание ldr / pc? Еще одна проблема, которую я не получаю - почему доступ к разделу .data относится к исполняемому коду? Я нахожу это немного странным.

И еще одна проблема: я не могу найти синтаксис 1-й команды mov (любой может указать мне спецификацию типа для большого пальца (1C2))

Извините за лайк описание, но я просто знакомлюсь со сборками.

Ответы на вопрос(1)

Ваш ответ на вопрос