问题 程序集文件扩展名,.s79,.s82,s90,.asm,.s等等......它们的区别是什么?


刚看到汇编扩展标题为几个平台,但只是在讨论它们是如何不同的。谢谢。


4954
2017-08-24 10:32


起源



答案:


.sNN IAR Embedded Workbench使用的版本为4 NN 根据处理器而有所不同:

.s12  NXP HCS12
.s18  Samsung SAM8
.s26  Renesas 78K
.s34  Renesas M16C/R8C
.s37  Renesas H8
.s43  TI MSP430
.s45  National CR16C
.s48  Renesas M32C
.s51  8051
.s53  Renesas R32C
.s66  Maxim MAXQ
.s68  NXP Coldfire
.s78  NXP S08
.s79  ARM
.s82  Atmel AVR32
.s85  Renesas V850
.s90  Atmel AVR

资源: https://www.iar.com/support/user-guides/#!?tab=userGuides

.asm 是装配的常见扩展。

.s 和 .S GNU工具用于汇编语言。不同的是 gcc 前端将C预处理器应用于具有扩展名的文件 .S,但不包含扩展名的文件 .s

有趣的事实:IAR汇编程序也接受 .msa (在研究上述情况时发现)。


11
2017-08-24 12:16



它不仅仅是GNU工具;其他Unix使用 .s / .S 同样的方式,这是 为什么 GNU工具使用它们。我会尽力说 .S 是手写的asm源, .s 用于编译器生成。即使你不这样做 需要 gcc在汇编之前通过CPP运行你的文件,我建议 .S 向其他人表明它是手写的。也没什么 gcc -S foo.c 或其他工具,如具有默认文件名的反汇编程序,将破坏它。 - Peter Cordes


答案:


.sNN IAR Embedded Workbench使用的版本为4 NN 根据处理器而有所不同:

.s12  NXP HCS12
.s18  Samsung SAM8
.s26  Renesas 78K
.s34  Renesas M16C/R8C
.s37  Renesas H8
.s43  TI MSP430
.s45  National CR16C
.s48  Renesas M32C
.s51  8051
.s53  Renesas R32C
.s66  Maxim MAXQ
.s68  NXP Coldfire
.s78  NXP S08
.s79  ARM
.s82  Atmel AVR32
.s85  Renesas V850
.s90  Atmel AVR

资源: https://www.iar.com/support/user-guides/#!?tab=userGuides

.asm 是装配的常见扩展。

.s 和 .S GNU工具用于汇编语言。不同的是 gcc 前端将C预处理器应用于具有扩展名的文件 .S,但不包含扩展名的文件 .s

有趣的事实:IAR汇编程序也接受 .msa (在研究上述情况时发现)。


11
2017-08-24 12:16



它不仅仅是GNU工具;其他Unix使用 .s / .S 同样的方式,这是 为什么 GNU工具使用它们。我会尽力说 .S 是手写的asm源, .s 用于编译器生成。即使你不这样做 需要 gcc在汇编之前通过CPP运行你的文件,我建议 .S 向其他人表明它是手写的。也没什么 gcc -S foo.c 或其他工具,如具有默认文件名的反汇编程序,将破坏它。 - Peter Cordes


文件扩展名(如果我理解正确的话)只是一种惯例,某些机制可以识别该文件。

例如。某些人使用.ASM来表示用某种汇编语言编写的源文件。

在Windows上.EXE是可以执行的程序的约定。 .Dll是可以由另一个可执行文件执行的代码的扩展。

因为它本身就是文件扩展名,通常没有内在含义,但它们确实帮助人们提供命名标准,从而帮助其他人了解它们的用途。


0
2017-08-24 11:08



我的理解是,对于汇编文件,一个扩展名,例如.asm足够好,就像所有可执行文件的exe / com一样。为什么这么多的装配扩展我认为必须有一些原因,但我不认为。


我注意到有时候使用的扩展有时与编写代码的微处理器类型有关。所以,如果是8051则可能是.s51。我真诚地怀疑这是普遍的。我敢打赌,制作这些工具的人只需随意选择一个扩展名。


0
2017-08-25 13:43