Linux
在linux内核的源代码中,以汇编语言编写的程序或程序段,有两种不同的形式。 第一种事完全的汇编代码,这样的代码采用.s作为文件的后缀。事实上,尽管是完全的汇编代码,现代的汇编工具也吸收了C语言的长处,也在汇编之前加上了一趟预处理,而预处理之前的文件则以.s为后缀。此类(.s)文件也和C程序一样,可以使用#include、#ifdef等等成分,而数据结构也一样可以在.h的文件中加以定义。 第二种是嵌在C程序中的汇编语言片断。虽然在ANSI的C语言标准中并没有关于汇编片段的规定,事实上各种实际使用的C编译中都作了这方面的扩充,而 GNU的C编译gcc也在这方面作了很强的扩充。 在DOS/windows领域中,386汇编语言都采用Intel定义的语句格式。可是,在Unix领域中,采用的却是由AT&T定义的格式。 AT&T的汇编与Intel的汇编主要有以下的区别: 在Intel格式中大多使用大写字母,而在AT&T格式中都使用小写字母。 在AT&T格式中,寄存器名要加上“%”作为前缀 ,而在Intel格式中不带前缀。 在AT&T的386汇编语言中,指令的源操作数的顺序与在Intel的386汇编语言中正好相反。 在AT&T格式中,访问指令的操作数的宽度有操作码名称的最后一个字母(操作码的后缀决定)。用作操作码后缀的字母有b(8位)。 w(16位)和1(32位)。 而在Intel格式中