我正在尝试从两个不同的寄存器中loadstore数据。

int testing[64*1024]  __attribute__ ((aligned (8192)));
__asm__("MOV r0, %0" :: "r" (testing) : "r0");
__asm__("STR R5,[R0];");

在我最初的尝试中,我试图存储寄存器arm指向寄存器r0的一些数据。绝对没有编译问题,但是寄存器中的数据r5
cannot be accessed.的情况也是一样的。
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 at address 0x0
(gdb) x/x $r0
0xb6000 <testing>: 0x00000000

本质上,我试图实现一些内存内联寻址使用ldr和str。
我在树立自己的榜样时得到了this指南的帮助
知道我错在哪里吗

最佳答案

您的评论和代码不匹配:
在我最初的尝试中,我试图将寄存器r0指向的一些数据存储到寄存器r5[…]
__asm__("STR R5,[R0];");
您编写的指令将R5的值存储到R0指向的内存位置。寄存器R5不指向任何内存位置-在您的示例中,其值为0x00
__asm__语句不声明以任何方式使用的R5寄存器,因此编译器可以在其中自由放置任何临时值或变量。这也解释了:

(gdb) x/x $r5
0x0:    Cannot access memory at address 0x0

gdb命令试图访问R5指向的内存位置,但它不指向任何位置。

10-06 01:43