[英]ARM - Load and Store assembly instructions
我正在嘗試從兩個不同的arm
寄存器load
和store
數據。
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.