c - 与 '%rbx' 后缀一起使用的寄存器 0x​​104567910 不正确

标签 c linux gcc assembly inline-assembly

我正在尝试使用 gcc 编译器在 Linux 下编译此代码:

static inline unsigned long get_current(void)
{
    unsigned long current;

    asm volatile (
    " movl %%esp, %%eax;"
    " andl %1, %%eax;"
    " movl (%%eax), %0;"
    : "=r" (current)
    : "i" (0xfffff000)
    );
    return current;
}

但我收到此错误:

program.c: Assembler messages: program.c:455: Error: incorrect
register `%rbx' used with `l' suffix

这里出了什么问题?

最佳答案

显然,您正在针对 64 位进行编译。如果不是您想要的,请尝试使用 gcc -m32,或者使用 64 位寄存器(%esp 在 x64 上根本没有意义)。

关于c - 与 '%rbx' 后缀一起使用的寄存器 0x​​104567910 不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57647188/

相关文章:

c - 海龟用 openGl 绘制分形

c - sdl 设置 Visual Studio 2010

c - 为什么最小化到工具栏并最大化控制台窗口后图形(点)全部被清除,但文本仍然在上面?

linux - 我有 AWS SAM local 0.2.11,但我无法将其升级到 0.3.0。升级没有发生

c++ - 模板化转换运算符类型推导在 clang 和 gcc 中不同

objective-c - sprintf 自发失败,具体取决于有哪些 printf 和 NSLog 调用

linux - 没有 .NET 的 Windows 身份验证 header 。可能的?

linux - 处理这个 inotify 比赛的正确方法?

c - 如何在 malloc() 之后成功 free() 指针

c++ - 编译时实际包含哪些文件