c - ARM - Load and Store assembly instructions -


i trying load , store data 2 different arm registers.

int testing[64*1024]  __attribute__ ((aligned (8192))); __asm__("mov r0, %0" :: "r" (testing) : "r0"); __asm__("str r5,[r0];"); 

in initial attempt tried store data pointed register r0 register r5. there absolutely no compilation problems data in register cannot accessed.

it same case load well.

ldr r1,[r0]    (gdb) info registers r0             0xb6000  745472 r1             0x1      1 r2             0x0      0 r3             0xb6000  745472 r4             0x8961   35169 r5             0x0      0 r6             0x0      0 r7             0xbeba9664       3199899236 r8             0x0      0 r9             0xefb9   61369 r10            0xf02d   61485 r11            0x0      0 r12            0x0      0 sp             0xbeba9664       0xbeba9664 lr             0x89cb   35275 pc             0xeace   0xeace <test48+14> cpsr           0x60000030       1610612784 (gdb) bt #0  0x0000eace in test48 () #1  0x000089ca in main () (gdb) x/x $r5 0x0:    cannot access memory @ address 0x0 (gdb) x/x $r0 0xb6000 <testing>: 0x00000000 

essentially trying achieve memory inline addressing using ldr , str.

i took of this guide while building example

any idea going wrong

your comment , code not match:

in initial attempt tried store data pointed register r0 register r5 [...] __asm__("str r5,[r0];");

the instruction wrote stores value of r5 memory location r0 points to. register r5 not point memory location - value 0x00 in example.

the __asm__ statements not declare r5 register used in way, compiler free put temporary value or variable in it. explains:

(gdb) x/x $r5 0x0:    cannot access memory @ address 0x0 

your gdb command tries access memory location r5 points - not point @ any.


Comments