新的一天又来到啦!话说为啥这么兴奋呢?想说说学习这本书的动机。看这本书到
现在,真的觉得是对c和汇编在开发应用方面的一本非常好的教材。从中可以回顾c和汇
编,学习开发过程,还有就是,了解一个最基础的操作系统。这些事情对我来说是非常
诱人的,于是学习这本书便是有意义的。
回到正题,开始第五天的笔记。
第五天一开始讲的是结构体。从书中的例子,我们可以更直观地体会为什么会有结
构体这样的东西。c语言是面向过程的语言,它相较于汇编的一大改进就是对函数的改
进。原来在汇编中,调用函数时只有标号,而参数分布地比较混乱,当编写一个稍复
杂的程序时,都需要自己先列个表,特地将函数和参数先列出来。在c语言中,调用一个
函数时,可以反映出函数标号,又可以反映出返回值类型,和所有的参数。也就是说,
它将一个子程序封装地更好了,并且直观地展现出它的外特性。但是其实一看这本书,
立马会有体会,有的函数,参数实在是太多了,虽说每个函数打头都要声明,但是一多
了,还是觉得不舒服。这就有了结构体。结构体是类的鼻祖。它相当于是一个自定义的
各种数据类型的元素的集合。它将很多具有某种现实意义的数据都归纳到一起,在传递
参数的时候,就可以以传递结构体的方式,而传递其包括的所有参数。这样就会显得方
便,而且思路清晰。
后面作者介绍了显示字符和鼠标的方法,此处鼠标只是显示,不能动,而且其背景
是固定色,所以没什么好说的。
接下来,作者介绍的东西我感觉就比较重要了,那就是GDT和IDT的初始化。GDT
是globle(segment)description table的缩写,就是全局段号记录表。为什么会有它是
为了解决多程序占用内存地址冲突的问题。如果不同的程序使用不同的段,那么即便大
家都有ORG 0 这样也不会冲突了。补充一句ORG指令后面跟的是偏移地址。而GDT这
个全局段号记录表到底记录了什么东西呢?它包括:
(1)段的大小
(2)段的起始地址
(3)段的管理属性(禁止写入,禁止执行,系统专用等)
CPU用8个字节(64)位来表示这些信息。即
struct SEGMENT_DESCRIPTIOR{
short limit_low,base_low;
char base_mid,access_right;
char limit_high,base_high;
}
段号类似于第四天的笔记中写的调色板号,但是段号可以用0~8191(2的13次
方)。于是定义这么多段就需要8192*8=64KB的空间,这就是GDT。
接下来讲了IDT,interrrupt descriptor table,中断记录表。每条信息也是8字节。
struct GATE_DESCRIPTOR{
short offset_low,selector;
char dw_count,access_right;
short offset_high;
}
IDT记录了0~255的中断号码与调用函数的对应关系。(哎呀,这个功能好像中断
向量表啊!)
虽然内容还没讲解完,但第五天的开发也就到此终止了,欠缺的内容一定会在之后
的笔记中继续补上。