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 に答える