在 x86 的 gcc 内联汇编中,如何移动寄存器中标签的地址。它应该是什么而不是 $label 在这里,因为汇编器给出了错误 undefined reference to label。
请注意,标签在 asm block 之外,即在正常的 C 代码内。
__asm__ __volatile__ ("movl $label, %eax;");
label:
.....
最佳答案
你可以这样做:
register unsigned long eax __asm__("eax"); // See [1]
eax = &&label; // See [2]
label:
// some code
但是,请注意:GCC 可以自由地对优化后的代码重新排序,因此 C 标签
可能与您期望的位置不完全相同。
如果您需要精确放置 label
(例如,因为一些汇编代码会跳转到它),您最好在汇编中编写整个代码。
[1] http://gcc.gnu.org/onlinedocs/gcc/Local-Reg-Vars.html#Local-Reg-Vars
关于c - 如何移动寄存器中标签的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7973728/