我正在尝试从两个不同的寄存器中load
和store
数据。
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
指向的内存位置,但它不指向任何位置。