我从here复制它但编译失败:
[root@ test]# gcc -c test.S
test.S: Assembler messages:
test.S:8: Error: suffix or operands invalid for `pop'
[root@ test]# cat test.S
.text
call start
str:
.string "test\n"
start:
movl $4, %eax
movl $1, %ebx
popl %ecx
movl $5, %edx
int $0x80
ret
为什么?
OS:
CentOS release 5.5 (Final)
Kernel \r on an \m
答案 0 :(得分:2)
如果您再次仔细阅读question,您会注意到用户已经编写了一个应用程序来加载此代码,该代码先前已在运行时编译为二进制表示形式。代码本身不是完整的应用程序。 此代码不能生成有效的二进制(可执行)应用程序。
编写汇编代码时,您可以选择编写程序的编译器和语法。如果您有兴趣学习汇编,我建议您阅读 Programming from the Ground Up 。
以下示例来自from here:
.section .data
hello:
.ascii "Hello, World!\n\0"
.section .text
.globl _start
_start:
movl $4, %eax
movl $14, %edx
movl $hello, %ecx
movl $1, %ebx
int $0x80
movl $1, %eax
movl $0, %ebx
int $0x80
编译:
as hello.s -o hello.o
ld hello.o -o hello
./hello
Hello, World!