0

我是组装新手,我正在尝试让这个 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

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

4

1 回答 1

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 位。

于 2013-01-18T20:13:49.733 回答