首页 > 解决方案 > GCC 扩展内联汇编 - “mov 的指令后缀无效”

问题描述

我试图了解 GCC 中的扩展内联汇编是如何工作的。但是当我尝试运行一个简单的测试程序时,我收到错误:“mov 的指令后缀无效”

示例程序:

unsigned char destination;
unsigned char ret;
unsigned int somevalue;

asm ("movb %1, %%al\n\t"
    "push %1\n\t"
    "pop edx\n\t"
    "not %%al\n\t"
    "movb %%al, %0"
    : "=r" (destination), "=r"(somevalue)
    : "r" (ret));

destination应加载到al. 之后somevalue被推入堆栈。之后,它会在edx寄存器中弹出。not应执行al包含 值的指令destination。之后将结果发送给ret。没有限制使用哪些寄存器来执行这个程序(我猜这意味着所有寄存器都是clobbers?)。

标签: c++gccassemblyinline-assembly

解决方案


推荐阅读