簡體   English   中英

ARM內聯匯編-輸入操作數約束包含'='

[英]ARM inline assembly - input operand constraint contains '='

這是我當前的代碼:

void int32hex(u32 val, char *out) {
    asm("rev %[dst], %[src]" :: [dst]"=r"(val), [src]"r"(val));

    binhex((u8*)&val, 4, out);
}

我的想法是采用參數val ,使用rev指令翻轉它(字節序),然后將其傳遞。

根據我的閱讀,以上代碼似乎是正確的,目標寄存器具有=r標志,這意味着可以寫入該寄存器。 但是,當通過GCC運行時,出現錯誤:輸入操作數約束包含'='

如果我將標志更改為簡單的r則它將正常編譯,但val的值不會更改。

錯誤告訴您出了什么問題- =約束僅適用於輸出,不適用於輸入,並且您的asm模式具有兩個輸入(一個令人困惑地稱為“ dst”),而沒有任何輸出。 您可能打算將“ dst”作為輸出:

asm("rev %[dst], %[src]" : [dst]"=r"(val) : [src]"r"(val));

暫無
暫無

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

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