Assembly 整数$0x80,从头开始编程

Assembly 整数$0x80,从头开始编程,assembly,x86-64,Assembly,X86 64,我最近开始阅读,但在第一个节目中遇到了一个问题。程序非常简单: .section .data .section .text .globl _start _start: movl $1, %eax movl $0, %ebx int $0x80 但是在编译和运行时,我得到了错误非法指令:4。我确实编辑了程序,使其能够正确编译(删除了两个.sections,并将\u start更改为\u main),因此可能会影响它 我使用的是x86_64指令集(英

我最近开始阅读,但在第一个节目中遇到了一个问题。程序非常简单:

.section .data
.section .text

.globl _start

_start:
    movl    $1, %eax
    movl    $0, %ebx
    int     $0x80
但是在编译和运行时,我得到了错误
非法指令:4
。我确实编辑了程序,使其能够正确编译(删除了两个
.section
s,并将
\u start
更改为
\u main
),因此可能会影响它


我使用的是x86_64指令集(英特尔处理器)。

如果使用的是x86-64,则需要稍微更改ABI,请参阅。有关这些差异的非常好的总结,请参阅文章。

这段代码对我来说很好(在Linux上)。你在用什么操作系统?尽管如此,为什么要调用
fork
(2)syscall?也许,您需要退出系统调用(1)?啊,那是一个输入错误。我在MacOS10.7上。将其更改为1没有帮助。你是怎么编译的?我刚刚使用的是
gcc
。这可以编译,但是在链接时:
$ld exit-o exit/ld:warning:-macosx\u version\u min未指定,假设架构x86的10.7/未定义符号:/“start”,引用自:/-u命令行选项/(可能您的意思是:\u start)/ld:symbol(s)未找到推断体系结构x86_64
如果您的代码在exit.s中,请尝试
作为exit.s-o exit.o&&ld exit.o-o exit
有人可以指出,.section data、.section text和movl$1的含义,%eax执行指令movl$1,%eax存储系统调用或与值$1对应的系统调用存储在$eax中