gpt4 book ai didi

c - 如何移动寄存器中标签的地址

转载 作者:太空狗 更新时间:2023-10-29 12:21:09 27 4
gpt4 key购买 nike

在 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

[2] http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html

关于c - 如何移动寄存器中标签的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7973728/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com