为什么这不编译?

时间:2011-06-30 13:30:04

标签: assembly

我从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

1 个答案:

答案 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!