Assembly 在x86_x64体系结构上组装x86程序集源代码
我正在读一本关于如何为x86Linux编写汇编的书 我想在x86_x64 Linux操作系统上汇编以下程序集源代码(exit.s):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:
.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位输出?