在x86的gcc內聯程序集中,如何移動標籤在寄存器中的地址。它應該是什麼,而不是$標籤在這裏,因爲彙編程序錯誤未定義的參考標籤。如何在寄存器中移動標籤的地址
請注意,該標籤在asm塊之外,即在正常的C代碼內。
__asm__ __volatile__ ("movl $label, %eax;");
label:
.....
在x86的gcc內聯程序集中,如何移動標籤在寄存器中的地址。它應該是什麼,而不是$標籤在這裏,因爲彙編程序錯誤未定義的參考標籤。如何在寄存器中移動標籤的地址
請注意,該標籤在asm塊之外,即在正常的C代碼內。
__asm__ __volatile__ ("movl $label, %eax;");
label:
.....
我得到了它,標籤也應被包裹在一個組裝塊,像這樣...
__asm__ __volatile__ ("label:");
你可以這樣做:
register unsigned long eax __asm__("eax"); // See [1]
eax = &&label; // See [2]
label:
// some code
但是,請注意:GCC可以在優化條件下自由地重新訂購代碼,因此C label
可能並不完全符合您的預期。
如果您需要精確放置label
(例如,因爲某些彙編代碼會跳轉到該代碼),您最好在彙編中編寫整個代碼。
[1] http://gcc.gnu.org/onlinedocs/gcc/Local-Reg-Vars.html#Local-Reg-Vars
是什麼錯誤? – ughoavgfhw
你在用什麼彙編語言? gcc內聯彙編?加油站 ? nasm? –