ARM - 加载和存储装配说明

时间:2013-07-11 14:40:41

标签: c assembly arm

我正在尝试来自两个不同load个寄存器的storearm数据。

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

在我最初的尝试中,我尝试将寄存器r0指向的一些数据存储到注册r5。绝对存在 no 编译问题,但寄存器cannot be accessed.

中的数据

Load的情况也是如此。

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指南的帮助

知道我哪里出错

1 个答案:

答案 0 :(得分:3)

您的评论与您的​​代码不符:

  

在我最初的尝试中,我试图将寄存器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指向的内存位置 - 但它没有指向任何位置。