LDR - Буквальный пул - ARM
Я знаю, как загрузить непосредственное значение, используя инструкцию LDR в ARM.
Например:
LDR R0,=0x0804c088
Эта инструкция загружает значение (0x0804c088
) в реестрr0
, Когда я пытаюсь получить доступ к адресу, он сохраняется вx/x $r0
с помощьюgdb
, Я получаю сообщение:Cannot access memory at address
0x0804c088, Но это не адрес, это значение, хранящееся в этом регистре, и адрес
PC
относительный адрес, который хранится в буквальном пуле.
В чем ошибка, которую я там делаю? я что-то не так понял?
Кроме того, как мне установить буквальный пул, не могли бы вы привести пример?
@Carl Norum: Вот код.
__asm__("LDR R0,=0x0804c088");
__asm__("LDR R1,[PC, #34];");
O / P от GDB
(gdb) info registers
r0 0x804c088 134529160
r1 0xf2c00300 4072669952
r2 0x0 0
r3 0x1 1
r4 0x8961 35169
r5 0x0 0
r6 0x0 0
r7 0xbe8f4b74 3197062004
r8 0x0 0
r9 0xef99 61337
r10 0xf00d 61453
r11 0x0 0
r12 0x0 0
sp 0xbe8f4b74 0xbe8f4b74
lr 0x89a7 35239
pc 0x8a62 0x8a62 <test46+34>
cpsr 0x60000030 1610612784
(gdb) x/x $r0
0x804c088: Cannot access memory at address 0x804c088
(gdb) p/x$r0
$1 = 0x804c088
(gdb) p/x $r1
$2 = 0xf2c00300
(gdb) x/x $r1
0xf2c00300: Cannot access memory at address 0xf2c00300
(gdb) x/x $r15
0x8a62 <test46+34>: 0x1022f8df