Assembly 在x86_x64体系结构上组装x86程序集源代码

Assembly 在x86_x64体系结构上组装x86程序集源代码,assembly,x86,x86-64,Assembly,X86,X86 64,我正在读一本关于如何为x86Linux编写汇编的书 我想在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:

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

我想在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编写的,我希望能够为我的操作系统组装x86汇编

我在某个地方读到,通过将选项
--32
指定为--32 exit.s-o exit.o可以这样做,但是这样做,我收到了与以前相同的错误


如何在x86_x64体系结构上组装x86源代码?

此代码存在两个问题:

 mov1 $0, %ebx
它应该是
movl
,(请参见
1
l
之间的区别,在某些字体中它们是相同的。)

另一个小换行符是缺少的换行符,只需在文件末尾插入一个换行符即可


要组装文件,请使用
as--32 exit.s-o exit.o
(假设是64位汇编程序)

此代码有两个问题:

 mov1 $0, %ebx
它应该是
movl
,(请参见
1
l
之间的区别,在某些字体中它们是相同的。)

另一个小换行符是缺少的换行符,只需在文件末尾插入一个换行符即可


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

mov1
即使对于正确的32位x86汇编也是无效的。您可能需要
movl
(最后一个字符是
L
)。但这并不能解决您的问题,要使用您确实希望编译成32位应用程序的int 80h API,请尝试在感谢中给出的
gcc
命令。是的,我把l错当成了1。使用gcc编译器是可行的。顺便说一下,正如答案所列:“使用
-v
让gcc向您显示它运行以进行汇编和链接的命令。”
mov1
即使对于正确的32位x86汇编也是无效的。您可能需要
movl
(最后一个字符是
L
)。但这并不能解决您的问题,要使用您确实希望编译成32位应用程序的int 80h API,请尝试在感谢中给出的
gcc
命令。是的,我把l错当成了1。使用gcc编译器是可行的。顺便说一下,正如答案所列:“使用
-v
让gcc向您展示它运行以组装和链接的命令。”我已经尝试了您建议的命令。我不确定它是否失败,因为我的汇编程序不是64位的(我运行x86_x64)。有没有办法检查我的汇编程序是否是64位的?我必须使用gcc将其编译成32位二进制文件,这样我的操作系统才能执行。@MikeHawkins使用--32,您收到了什么错误消息?修复
mov1
错误后,这应该可以正常工作。我的评论不正确-我的意思是,汇编程序成功,但链接器失败,并显示以下消息:
ld:i386输入文件架构
exit.o'与i386:x86-64输出不兼容`这是否有效
ld-m elf_i386-o可执行文件。o
支持32位输出吗?我已经试过你建议的命令了。我不确定它是否失败,因为我的汇编程序不是64位的(我运行x86_x64)。有没有办法检查我的汇编程序是否是64位的?我必须使用gcc将其编译成32位二进制文件,这样我的操作系统才能执行。@MikeHawkins使用--32,您收到了什么错误消息?修复
mov1
错误后,这应该可以正常工作。我的评论不正确-我的意思是,汇编程序成功,但链接器失败,并显示以下消息:
ld:i386输入文件架构
exit.o'与i386:x86-64输出不兼容`这是否有效
ld-melf_i386-o可执行文件。o
是否支持32位输出?