Linux 要编译的最小示例&;使用gcc运行程序集?
gcc可以编译成可执行文件的最短汇编示例是什么Linux 要编译的最小示例&;使用gcc运行程序集?,linux,assembly,x86-64,Linux,Assembly,X86 64,gcc可以编译成可执行文件的最短汇编示例是什么 我遇到过,但是有太多的标签,如hi\u temp:,.data等,最简单的版本是什么?下面是一个Hello World在汇编中的示例,并给出了解释: 要编译并运行: .text .align 4 .globl main main: pushl %ebp movl %esp,%ebp xorl %eax,%eax leave ret 什么CPU(系列)、操作系统等?它应该输出“He
我遇到过,但是有太多的标签,如
hi\u temp:,.data
等,最简单的版本是什么?下面是一个Hello World在汇编中的示例,并给出了解释:
要编译并运行:
.text
.align 4
.globl main
main:
pushl %ebp
movl %esp,%ebp
xorl %eax,%eax
leave
ret
什么CPU(系列)、操作系统等?它应该输出“Hello world!”还是不输出?输出呢?规范的“Hello world”程序实际上输出了该文本。@Paul R,只要
返回1
就足够了(movq$1%rax
),我想知道完整程序集的最低版本(带有最低标记)。在这种情况下,您可能应该删除对“Hello world”的引用从您的问题中删除,以避免混淆gcc minimal.S
失败<代码>未定义的引用main'`您需要-m32-nostlib
-我将用一个更易于构建和运行的版本更新答案,它非常接近,如果您删除.align 4
行,它也可以工作。他说返回0
。添加xorl%eax,%eax
?它不是最小值,因为它与堆栈框架混在一起,这里不需要堆栈框架。是否需要.globl main
之前的缩进?不,缩进只是个人偏好。
.text
.align 4
.globl main
main:
pushl %ebp
movl %esp,%ebp
xorl %eax,%eax
leave
ret
$ gcc -m32 asm.S
$ ./a.out
.text
.globl main
main:
xorl %eax,%eax ;return 0
ret