0

私はアセンブリが初めてで、このハローワールドプログラムを機能させようとしています:

.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 に答える