Assembly 如何将.s转换为.asm?

Assembly 如何将.s转换为.asm?,assembly,gcc,gnu-assembler,Assembly,Gcc,Gnu Assembler,所以我和MikeOS玩得很开心,但我在集会上很差劲。所以我用C编写了一个程序,并用GCC(Ubuntu)将其转换为汇编。但当我转换它时,它最终会变成一个.s文件。那么如何将其转换为.asm?我用来生成.s文件的命令是 gcc -S test.c 另一种方法是,如何将.s转换为.bin?这可能也有帮助 谢谢 不需要转换。.s扩展用于汇编,就像.asm一样 同一种语言只有两个不同的扩展 如果要使用.asm,可以重命名该文件 但请记住,由编译器(如GCC)生成的程序集不太可能直接在独立环境(如自定义

所以我和MikeOS玩得很开心,但我在集会上很差劲。所以我用C编写了一个程序,并用GCC(Ubuntu)将其转换为汇编。但当我转换它时,它最终会变成一个.s文件。那么如何将其转换为.asm?我用来生成.s文件的命令是

gcc -S test.c
另一种方法是,如何将.s转换为.bin?这可能也有帮助


谢谢

不需要转换。
.s
扩展用于汇编,就像
.asm
一样
同一种语言只有两个不同的扩展

如果要使用
.asm
,可以重命名该文件

但请记住,由编译器(如GCC)生成的程序集不太可能直接在独立环境(如自定义操作系统)中使用,因为它将依赖于GCC和主机系统中可用的内容

如果要将ASM生成为不同的方言,请查看GCC标志,如
-masm

  • -masm=intel
    intel语法
  • -masm=att
    AT&T语法
编辑

正如Peter Cordes所提到的,惯例通常是对AT&T语法使用
.s
,对Intel使用
.asm


请注意,GCC仍将生成一个带有英特尔语法的
.s
文件,尽管…

.s也是汇编…是的,但是.asm是英特尔,.s是不同的。(我可能错了,我是汇编新手)请看我的答案…@ArenCoskun有几十个汇编程序使用文件扩展名
.asm
。如果不知道您需要什么汇编器,这个问题就无法回答。可以由GCC(即GAS AT&T语法或
.intel_syntax noprefix
from
-masm=intel
)组装的Asm肯定应该位于
.S
(C预处理器+汇编)或
.S
(仅汇编)文件中。我的意思是你当然可以叫它
.asm
,但是你也可以叫你的C源文件
hello.foobar
,然后用
-x
选项手动告诉它是什么类型的文件。按照惯例,
.asm
通常用于NASM源文件,而不是GAS。(英特尔语法的另一种风格)@PeterCordes按惯例是的,尽管GCC不关心并生成.s文件,不管语法如何……我不是这么说的。GCC无法生成NASM语法文件。NASM使用不同的指令,如
db“foo”,0
而不是
。asciz“foo”
,并且
mov edi,symbol
是mov立即数,而不是负载。所以它不像GAS
。英特尔语法
。有关英特尔语法不同风格的更多信息,请参阅。GAS可以从
gcc-s-masm=intel
汇编
.s
文件,而NASM不能。