【问题标题】:Hello World Assembly Illegal instruction: 4Hello World Assembly 非法指令:4
【发布时间】:2013-01-18 19:26:32
【问题描述】:

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

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

【问题讨论】:

  • 那我怎么能在mac上写一个hello world呢。

标签: assembly


【解决方案1】:

您的代码的 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 位。

【讨论】:

    猜你喜欢
    • 2016-05-14
    • 2023-03-17
    • 2017-09-29
    • 2013-11-29
    • 2021-06-14
    • 1970-01-01
    • 1970-01-01
    • 2019-06-15
    • 2018-03-20
    相关资源
    最近更新 更多