簡體   English   中英

ARM-加載和存儲組裝說明

[英]ARM - Load and Store assembly instructions

我正在嘗試從兩個不同的arm寄存器loadstore數據。

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

在最初的嘗試中,我嘗試將寄存器r0指向的某些數據存儲到寄存器r5 絕對沒有編譯問題,但是cannot be accessed.寄存器中的數據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實現一些內存內聯尋址。

在構建示例時,我得到了指南的幫助

知道我要去哪里錯了

您的注釋和代碼不匹配:

在最初的嘗試中,我嘗試將寄存器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指向的內存位置-但它沒有指向任何位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM