チュートリアルからこのプログラムをコンパイルできません。 "Hello World"が表示されます。 Linuxでこのプログラムをinline asmでコンパイルするには?
void main()
{
__asm__("jmp forward\n\t"
"backward:\n\t"
"popl %esi\n\t"
"movl $4, %eax\n\t"
"movl $2, %ebx\n\t"
"movl %esi, %ecx\n\t"
"movl $12, %edx\n\t"
"int $0x80\n\t"
"int3\n\t"
"forward:\n\t"
"call backward\n\t"
".string \"Hello World\\n\""
);
}
gcc 4.7
私に次のエラーを与える:
gcc hello.c -o hello
hello.c: Assembler messages:
hello.c:5: Error: invalid instruction suffix for `pop'
また、各ラインの二重引用符を指定するには、回避する方法はありますか?
また、libc
をサービスの代わりにprintf
と呼び出すようにプログラムを変更する方法を知りたいと思います。
だけでなく、それがいずれかの 'int型main'である必要があり、それは間違いなくあなたがに出力するx86-32コードをコンパイルしているように見え、あなたが – aaronman
を使用しているコンピュータに応じて、クラッシュする可能性がありますので、ASMは依存きれいシステムであり、 x86-64バイナリ。 – Nayuki
'l'sを削除し、'%e * 'を'%r * 'に変更することができます。これはどこかにあります。しかし、私の意見を信用しないでください。 – Ryan