Nie mogę skompilować tego programu z samouczka. Powinien wydrukować "Hello World".Jak skompilować ten program za pomocą wbudowanego modułu 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
pod Linuksem daje mi następujący błąd:
gcc hello.c -o hello
hello.c: Assembler messages:
hello.c:5: Error: invalid instruction suffix for `pop'
tam jest również sposób, aby uniknąć określić cudzysłowów dla każdego wiersza?
Chciałbym również wiedzieć, jak zmodyfikować program, aby korzystać z połączenia printf
zamiast usługi kernel
.
dobrze powinno być 'int main' dla jednego, ASM jest systemem bardzo zależny więc mogłoby to zdecydowanie awarii w zależności od jakiego komputera używasz – aaronman
To wygląda jakbyś kompilacji kodu x86-32 do wyjścia do plik binarny x86-64. – Nayuki
Możesz usunąć 'l's i zmienić'% e * 'na'% r * ', które gdzieś się dostanie. Nie ufaj jednak mojej opinii na ten temat. – Ryan