non posso compilare questo programma tratto da un tutorial. Dovrebbe stampare "Hello World".Come compilare questo programma con in linea 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
sotto Linux mi dà il seguente errore:
gcc hello.c -o hello
hello.c: Assembler messages:
hello.c:5: Error: invalid instruction suffix for `pop'
C'è anche un modo per evitare di specificare le virgolette doppie per ogni linea?
Inoltre, mi piacerebbe sapere come modificare il programma per utilizzare libc
chiamata printf
anziché il servizio kernel
.
bene dovrebbe essere 'int main' per uno, ASM è piuttosto dipende dal sistema in modo che possa definitivamente bloccarsi a seconda di quale computer utilizzando il vostro – aaronman
Sembra che si sta compilando x86-32 codice per l'output un binario x86-64. – Nayuki
Si potrebbe togliere le 'l's e cambiare'% e * 'a'% r * ', che ottiene da qualche parte. Non fidarti della mia opinione su di esso, comunque. – Ryan