liyux中的setup.s文件

1. setup程序的主要作用是利用ROM BIOS中断读取机器系统数据,并将这些数据保存到0x90000开始的位置(覆盖掉了bootsect程序),所取得的参数和保留的内存位置见下表。

内存地址

长度

(字节)

名称

描述

0x90000

2

光标位置

列号(0x00-最左端),行号(0x00-最顶端)

0x90002

2

扩展内存数

系统从1M开始的扩展内存数值(KB

0x90004

2

显示页面

当前显示页面

0x90006

1

显示模式

 

0x90007

1

字符列数

 

0x90008

2

??

 

0x9000A

1

显示内存

显示内存(0x00-64k,0x01-128k,0x02-192k,0x30-256k

0x9000B

1

显示状态

0x00-彩色,I/O=0x3dX;0x11-单色,I/O=0x3bX

0x9000C

2

特性参数

显示卡特性参数

0x90080

16

硬盘参数表

第一个硬盘的参数表

0x90090

16

硬盘参数表

第二个硬盘的参数表

0x901FC

2

根设备号

根文件系统所在的设备号(bootsect.s中设置)

 

然后setup程序将system模块从0x10000-0x8ffff整块向下移动到内存绝对地址0x00000处。接下来加载中断描述符表寄存器(idtr)和全局描述符表寄存器(gdtr),开启A20地址线,重新设置两个中断控制芯片8259A,将硬件中断号重新设置为0x20-0x2f。最后设置CPU的控制寄存器CR0(机器状态字),从而进入32位保护模式进行,并跳转到位于system模块最前面部分的head.s程序继续运行。

2. 执行setup.s程序后内存映像

 

liyux中的setup.s文件_第1张图片

3. 硬盘基本参数表

    在PC机BIOS设定的中断向量表中,int 0x41的中断向量位置(4*0x41 = 0x0000:0x0104)存放的并不是中断程序的地址,而是第一个硬盘的基本参数表。int 0x46中断向量位置存放的是第二个硬盘的基本参数表。

4. A20地址线问题

    为了兼容8088实现回环而设置的专用信号。

你可能感兴趣的:(c,System,扩展)