在x86_x64体系结构上汇编x86汇编源代码

问题描述

我正在读一本关于如何为x86 Linux编写汇编的书。

我想在x86_x64 Linux操作系统上汇编以下汇编源代码(exit.s):

.section .data

.section .text
.globl _start
_start:
    mov1 $1,%eax
    mov1 $0,%ebx
    int $0x80

通过调用此命令:as exit.s -o exit.o

但是,汇编器退出并出现以下错误

exit.s: Assembler messages:
exit.s: Warning: end of file not at end of a line; newline inserted
exit.s:6: Error: no such instruction: `mov1 $1,%eax'
exit.s:7: Error: no such instruction: `mov1 $0,%ebx'

据我所知,x86_x64 Linux的指令集与x86不同,因此出现错误。通过将mov1替换为mov,汇编程序将成功编译。但是,鉴于本书的其余部分都是为x86编写的,我希望能够为我的OS组装x86程序集。

我在某处读到可以通过指定选项--32来做到这一点,例如:as --32 exit.s -o exit.o,但是这样做,我会收到与以前相同的错误

如何在x86_x64体系结构上汇编x86源代码

解决方法

此代码有两个问题:

 mov1 $0,%ebx

应为movl,(请参见1l之间的区别,在某些字体中它们是相同的。)

另一个是次要的,就是缺少的换行符,只需在文件末尾插入一个。

要汇编文件,请使用as --32 exit.s -o exit.o(假设使用64位汇编器)