У меня есть следующая программа (синтаксис сборки AT & T), которая прекрасно работает сама по себе, если я скомпилирую ее с помощью компилятора GCC в Windows x86:
LC0:
.ascii "Hello, world!\0"
.globl _main
_main:
pushl %ebp
movl %esp, %ebp
andl $-16, %esp
subl $16, %esp
call ___main
movl $LC0, (%esp)
call _puts
movl $0, %eax
leave
ret
Может ли эта простая программа выполняться в программе на Си? Я пробовал со следующим:
#include <stdlib.h>
int main()
{
__asm__ ("LC0:\n\t"
".ascii 'Welcome Message\0'\n\t"
"LC1:\n\t"
".ascii 'Hello\0'\n\t"
"_main:\n\t"
"LFB11:\n\t"
"leal 4(%esp), %ecx\n\t"
"andl $-16, %esp\n\t"
"pushl -4(%ecx)\n\t"
"pushl %ebp\n\t"
"movl %esp, %ebp\n\t"
"pushl %ecx\n\t"
"subl $20, %esp\n\t"
"call ___main\n\t"
"movl $1, 12(%esp)\n\t"
"movl $LC0, 8(%esp)\n\t"
"movl $LC1, 4(%esp)\n\t"
"movl $0, (%esp)\n\t"
"call _MessageBoxA@16\n\t"
"subl $16, %esp\n\t"
"movl $0, %eax\n\t"
"movl -4(%ebp), %ecx\n\t"
"leave\n\t"
"leal -4(%ecx), %esp\n\t"
"ret\n\t");
return 0;
}
Я получаю одну ошибку:
Ошибка: мусор в конце строки, первый нераспознанный символ - `8 '