3

我有这个代码:

void  geninterrupt (int x) {
    __asm__(
    "movb x, %al \n"
        "movb %al, genint+1 \n"
        "jmp genint \n"
    "genint: \n"
        "int $0 \n"
    );
}

我怎样才能movb利用 的论点geninterrupt()

4

1 回答 1

2

您需要正确使用约束字段:

void  geninterrupt (int x) {
  __asm__("  movb %[x], %%al \n"
          "  movb %%al, genint+1 \n"
          "  jmp genint \n"
          "genint: \n"
          "  int $0 \n"
         : /* no outputs */
         : [x] "m" (x) /* use x as input */
         : "al" /* clobbers %al */
         );
}

这是关于 GCC 内联汇编的一个很好的操作方法以及相关 GCC 文档的链接。

编辑:因为您的 GCC 似乎无法处理标记的操作数

于 2013-10-14T20:44:00.007 回答