在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? –