我是汇编的新手,我正在尝试让这个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
有人可以告诉我如何解决这个问题。
答案 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位。