c - gcc中汇编语句的问题

标签 c gcc compiler-construction assembly

我在尝试在 FreeBSD 64 位中运行的 C 程序中遇到了一段汇编代码。

void  *curbrk;   
__asm__ __volatile__(
        "movl .curbrk, %%eax;"
        "movl %%eax, %0"
            : "=r" (curbrk)
            :: "%eax"
    );

我收到类似“mov missing suffix or operand”的错误。(上面的代码遵循 AT&T 语法)是什么决定了我应该用于代码的语法 - 编译器(gcc 遵循 AT&T 语法)或处理器(我是在英特尔处理器上工作)。问题是由于代码采用 AT&T 语法还是我遗漏了什么?

最佳答案

如果您有 64 位 GCC,除非您使用 -m32 开关输出 32 位目标代码,否则上述代码将无法完成,因为 64 位指针值将不适合 32 位 EAX 寄存器.使用 -m32 生成 32 位输出,或者使用 rax 代替 eax 并将 movl 更改为 mov(不带“l”)

关于c - gcc中汇编语句的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5777113/

相关文章:

c - GCC 左移溢出

compiler-construction - 在这个 Scala 代码中 compare 与 compareTo 有何不同?

c++ - 向 C++ 源代码添加注释语法

c - 打印二维字符数组

c++ - FSEvents C++ 示例

c - 将二进制 blob 与 GCC 链接时的奇怪行为

generics - Seq.iter 比 native 映射慢 : any generic solution?

c - 动态内存分配代码

c - 以负整数退出 while 循环

gcc - 如何在源代码中的特定行检查 GCC 预处理器定义