Linux
中的汇编语言
在阅读
Linux
源代码时,你可能碰到一些汇编语言片段,有些汇编语言出现在以
.S
为扩展名的汇编文件中,在这种文件中,整个程序全部由汇编语言组成。有些汇编命令出
现在以
.c
为扩展名的
C
文件中,在这种文件中,既有
C
语言,也有汇编语言,我们把出
现在
C
代码中的汇编语言叫所“嵌入式”汇编。不管这些汇编代码出现在哪里,它在一定
程度上都成为阅读源代码的拦路虎。
尽管
C
语言已经成为编写操作系统的主要语言,但是,在操作系统与硬件打交道的过
程中,在需要频繁调用的函数中以及某些特殊的场合中,
C
语言显得力不从心,这时,
繁琐但又高效的汇编语言必须粉墨登场。因此,在了解一些硬件的基础上,必须对相关的
汇编语言知识也所有了解。
读者可能有过在
DOS
操作系统下编写汇编程序的经历
,
也具备一定的汇编知识。但是,
在
Linux
的源代码中,你可能看到了与
Intel
的汇编语言格式不一样的形式,这就是
AT&T
的
386
汇编语言。
一、
AT&T
与
Intel
汇编语言的比较
我们知道,
Linux
是
Unix
家族的一员,尽管
Linux
的历史不长,但与其相关的很多事
情都发源于
Unix
。就
Linux
所使用的
386
汇编语言而言,它也是起源于
Unix
。
Unix
最初是
为
PDP
-
11
开发的,曾先后被移植到
VAX
及
68000
系列的处理器上,这些处理器上的汇编
语言都采用的是
AT&T
的指令格式。当
Unix
被移植到
i386
时,自然也就采用了
AT&T
的汇
编语言格式,而不是
Intel
的格式。尽管这两种汇编语言在语法上有一定的差异,但所基
于的硬件知识是相同的,因此,如果你非常熟悉
Intel
的语法格式,那么你也可以很容
易地把它“移植“到
AT&T
来。下面我们通过对照
Intel
与
AT&T
的语法格式,以便于你把
过去的知识能很快地“移植”过来。