为什么我无法成功编译此程序集?

时间:2011-04-04 12:19:25

标签: assembly

引自this question

.text
    call start
    str:
        .string "test\n"
    start:
    movl    $4, %eax
    movl    $1, %ebx
    pop     %ecx
    movl    $5, %edx
    int     $0x80
    ret

gcc -c test.S给出:

test.S: Assembler messages:
test.S:8: Error: suffix or operands invalid for `pop'

2 个答案:

答案 0 :(得分:2)

pop只是命令。在at& t语法中,您必须推迟操作数维度。所以你必须用“popl”改变“pop”行

修改

  1. 正确的答案是JensBjörnhager在我的64位笔记本电脑上的答案,你的代码通过指定它是一个32位架构正确组装。
  2. 操作数维度不是强制性的,但建议强烈

答案 1 :(得分:1)

您可能正在尝试编译32位程序集的64位系统。强制gcc使用 -m32 编译32位:

gcc -m32 -c test.S

修改

64位版本:

.text
    call start
    str:
        .string "test\n"
    start:
    movl    $1, %eax
    movl    $1, %edi
    popq    %rsi
    movl    $5, %edx
    syscall

    movl    $60,%eax
    movl    $0, %edi
    syscall