2013-01-18 51 views
0

我是新来组装,我试图让这个Hello World程序的工作:的Hello World大会非法指令:4

.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 

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

+0

我该如何在Mac上写一个hello world? – carloabelli

回答

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

+0

非常感谢! – carloabelli