[英]Can we use Address of operator “&” inline GCC ARM assembly?
我們可以使用運算符“&”的內聯GCC ARM程序集的地址嗎? 如果是,那么我有一個core_regx結構,我需要將該結構的成員r0的地址傳遞到下面提到的代碼中:
asm volatile("ldr r3, [%0,#0]":: "r" (&(core_reg->r0)));
請檢查此代碼是否正確。
是的,您當然可以使用& 。 但是,我建議您的匯編程序說明符可能會有一些問題和更好的選擇。
asm volatile("ldr r3, %0":: "m" (core_reg->r0) : "r3");
您絕對應該將r3添加到clobber列表中。 另外, "m"
說明符可能更好。 如果core_reg
已經在r0
,則編譯器可以使用r0
成員的偏移量並生成諸如以下代碼:
add r0, r0, #12 ; assuming r0 is core_reg.
ldr r3, [r0]
編譯器知道core_reg
和core_reg->r0
之間的關系。 至少"m"
與arm-xxx-gcc
某些版本兼容。 在編譯器生成的代碼上運行objdump --disassemble
,以驗證其是否在執行所需的操作。
編輯: GCC手冊有很多信息,例如Gcc匯編程序約束 , 機器特定 信息和一般信息 。 互聯網上有許多教程,例如ARM匯編器Cookbook ,這是最好的教程之一。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.