Hello World Assembly非法指令:4

时间:2013-01-18 19:26:33

标签: assembly

我是汇编的新手,我正在尝试让这个hello world程序正常工作:

.data
msg:
    .ascii  "Hello, world!\n"
    len = . - msg
.text
    .globl start
start:
    movl $len,%edx
    movl $msg,%ecx
    movl $1,%ebx
    movl $4,%eax
    int $0x80
    movl $0,%ebx
    movl $1,%eax
    int $0x80

我用mac编译它:

as -o program.o program.s

然后将其链接到:

ld -o program program.o

两者都很完美,但是当我运行生成的程序时,我收到错误:

Illegal instruction: 4

有人可以告诉我如何解决这个问题。

1 个答案:

答案 0 :(得分:2)

代码的Mac等价物如下:

.data
msg:
    .ascii "Hello, world!\n"
    len = . - msg
.text
    .globl start
start:
    movq $len, %rdx
    lea msg(%rip), %rsi
    movq $1,%rdi
    movq $0x2000004,%rax
    syscall
    movq $0,%rdi
    movq $0x2000001,%rax
    syscall

请注意,sys调用约定是不同的(不同的寄存器,参数和调用机制),我已将其更改为64位。