1

次のサンプル コードをコンパイルすると (これらは本質的に目的のないジャンク アセンブリ ステートメントです)、次のエラーが発生します。

def-asm-pop.c:13:3: エラー: 数値定数の前に文字列リテラルが必要です

行 13 は、コメント化されていない「ASM」行です。

#define iMOV "mov %eax,%ebx\n\t"
#define iNOP "nop\n\t"
#define iASM __asm__(iMOV iNOP)

#define MOV 0xB8
#define NOP 0x90
#define ASM __asm__(MOV NOP)

int main() {

  //iASM;    /* This one works when uncommented */

  ASM;       /* The one causes the error when uncommented */

  return 0;

}

インライン アセンブリでのHello Worldスタイルの試みにはエラーがあるかもしれませんが、それは私が克服するためのもう 1 つの足がかりです。現時点では、テキスト コマンドを定義するのと同じように、オペコードのリストを定義してから、それらから構築されたアセンブリ ステートメント リストを定義することはできないようです。ステートメントASMのように機能させるにはどうすればよいですか?iASM

4

2 に答える 2

1

これはうまくいくかもしれません:

#define MOV ".byte 0xB8\n"
#define NOP ".byte 0x90\n"

もちろん、正確な構文はアセンブラに依存します (また、適切な機械語はターゲット プラットフォームに依存します)。これは、実験以外にはあまり役に立ちません。コードを書くのは良い方法ではありません。

于 2013-09-30T20:34:03.257 に答える