Linux 要编译的最小示例&;使用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

gcc可以编译成可执行文件的最短汇编示例是什么


我遇到过,但是有太多的标签,如
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