linux源代码中除了bootsect.s和head.s使用Intel汇编语言之外,其他的源代码都是使用AT&T汇编语言。虽然本科期间学习了汇编语言的相关知识,但是还是没有学习过AT&T汇编语言,因此在进行操作系统学习期间查看源代码时,会产生理解上的困难。这里会对AT&T的部分语言进行相应的介绍:
.globl begtext, begdata, begbss, endtext, enddata, endbss
.text
begtext:
.data
begdata:
.bss
begbss:
.text
entry start
start:
在setup.s源代码的开始部分会出现上面的代码,那么每个表示的是什么意思呢?下面将做一一讲解。
.text:表示该节中包含程序的代码,需指出该节是只读节。
.data:这种节包含程序已初始化的数据,也就是说,包含具有初值的那些变量
.bss:
•这个节包含程序还未初始化的数据,也就是说,包含没有初值的那些变量。当操作系统装入这个程序时将把这些变量都置为0
•使用.bss比使用.data的优势在于,.bss节在编译后不占用磁盘的空间,这样编译、连接生成的代码的尺寸会比较小。
•尽管在磁盘上不占空间,但是在可执行文件被读入内存后系统还是会为.bss节分配内存
.ascii:语法:.ascii “string” ….
•ascii 表示零个或多个(用逗号隔开)字符串,并把每个字符串(结尾不自动加“\0”字符)中的字符放在连续的地址单元。于此类似的 .asciz指令定义的字符串会在结尾处自动加 “\0”字符
.fill:语法:.fill repeat , size , value
•含义是反复拷贝size个字节,重复repeat次 ,其中size和