FONT目录中:存放了BGI所使用到的各种字体文件
INCLUDE目录中:是Turbo C的库函数的所有的头文件,当要使用某个库函数时可以在这个目录下搜索,找到其所在文件和原型,这里不在详细叙述。
重点讲一下Lib目录:
init.obj文件是C语言的启动代码,它负责建立C程序运行的堆栈、初始化内存、调用C入口函数等。这部分代码是使用汇编书写的,其源代码可以在TC(官方版)里找到,名称为Init.ASM。
c0t.obj、c0s.obj、c0m.obj、c0c.obj、c0l.obj和c0h.obj文件,都是c code的入口函数实现,入口函数将会读取环境变量,并调用c语言中的main函数,将命令行参数传入main函数中,之后的控制权就交给了main函数,也就是我们常说的C的主函数main。由于Turbo C中有不
同的内存模式,因此以上6个文件分别对应TC中6种不同的内存模式。
cc.lib、ch.lib、cl.lib、cm.lib、cs.lib五个文件都是TC提供的ANSI C标准库的库文件,分别对用不同的内存模式:
cc compact模式
ch huge模式
cl large模式
cm medium模式
cs small模式
由于不同模式参数的入栈方式、函数的调用方式等等都各不一样,所以代码也不一样,因此需要分别提供各个模式的库文件。
再讲一下Turbo C中的内存模式。内存模式的出现不是由编译器决定的,而是由处理器的寻址方式决定的,在8086处理器中为了在16位寄存器的基础上寻址20位的地址,引入了段寄存器和分段寻址的方式。在编译器这一级,利用这种段式的寻址方式,可以实现多种不同的存储分配方法,因此就产生了所谓的不同的内存模式。
1. tiny模式: 程序和数据在一个64K字节的段内
2. small模式: 独立的代码段(64KB)和独立的数据段(64KB)
3. medium模式: 单个数据段(64KB)和多个代码段(1MB)
4. compack模式:单个代码段(64KB)和多个数据段(1MB)
5. large模式: 多个代码段(1MB)和多个数据段(1MB),数据指针不能跨越段边界,否则将回绕
6. huge模式: 多个代码段(1MB)和多个数据段(1MB),数据指针可以跨越段边界,不会回绕
在TC中内存模式与far、near、huge等关键字又有着密切的关系。在tiny、small模式下,所有的函数定义、全局变量定义和指针变量的定义,如果没有显示的加上far、near、huge等关键字,都默认为使用了near关键字;在medium模式下,函数定义默认使用了far关键字,变量定义默认使用了near关键字;在compact模式下函数定义模式使用了near关键字,变量定义默认使用了far关键字;large模式下函数定义和变量定义模认使用了far关键字;huge模式下函数定义模认使用了far关键字,变量定义默认使用了huge关键字。
near、far、huge关键字的真正含义是什么?这三个关键字只能用于修改函数、全局变量和指针变量,对于非指针类型的局部变量,这些关键字没有实际意义。这些关键字用于修饰函数时,huge的含义与far相同,用于指明该函数的调用方式为far调用方式,即调用时需要一个段值和一个段偏移组成的32bits调用地址,使用far call进行跳转,跳转前先压栈保存当前CS:IP。near修饰函数时,用于指明该函数的调用方式为near调用方式,调用时只需要一个16bits的近地址,即当前CS的段内偏移。
&