簡體   English   中英

我們可以使用運算符“&”的內聯GCC ARM程序集的地址嗎?

[英]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_regcore_reg->r0之間的關系。 至少"m"arm-xxx-gcc某些版本兼容。 在編譯器生成的代碼上運行objdump --disassemble ,以驗證其是否在執行所需的操作。

編輯: GCC手冊有很多信息,例如Gcc匯編程序約束機器特定 信息一般信息 互聯網上有許多教程,例如ARM匯編器Cookbook ,這是最好的教程之一。

暫無
暫無

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

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