[英]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.