Tôi không thể biên dịch chương trình này được lấy từ hướng dẫn. Nó sẽ in "Hello World".Làm thế nào để biên dịch chương trình này với nội tuyến 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
dưới Linux mang lại cho tôi những lỗi sau:
gcc hello.c -o hello
hello.c: Assembler messages:
hello.c:5: Error: invalid instruction suffix for `pop'
cũng Có cách nào để tránh để xác định dấu ngoặc kép cho mỗi dòng?
Ngoài ra, tôi muốn biết cách sửa đổi chương trình để sử dụng libc
gọi printf
thay vì dịch vụ kernel
.
cũng cần được 'int main' cho một, asm là hệ thống khá phụ thuộc nên nó chắc chắn có thể sụp đổ tùy thuộc vào máy tính của bạn sử dụng – aaronman
Dường như bạn đang biên soạn x86-32 mã để đầu ra một nhị phân x86-64. – Nayuki
Bạn có thể loại bỏ 'l' và thay đổi '% e *' thành '% r *', được ở đâu đó. Tuy nhiên, đừng tin vào ý kiến của tôi về nó. – Ryan