Linux/boot

boot文件夹下三个文件

bootsect.s      setup.s     head.s       

0xFFFF0   (一开机指令运行的地址)

 0x7c00     (bootsect.s的二进制文件)

0x90000   (bootsect.s把自己移动到这个位置)

0x90200   (setup.s的二进制代码的位置)

0x10000 (system模块的位置system模块中包含head.s的二进制)

0x80000

 

本章主要描述boot/目录中的三个汇编代码文件,见列表2.1 所示。正如在前一章中提到的,这三个
件虽然都是汇编程序,但却使用了两种语法格式。Bootsect.s 和setup.s 采用近似于Intel 的汇编语言
法,需要使用Intel 8086 汇编编译器和连接器as86 和ld86,而head.s 则使用GNU 的汇编程序格式,
要用GNU 的as 进行编译。这是一种AT&T 语法的汇编语言程序。
                                列表2.1 linux/boot/目录
文件名     长度(字节)                 最后修改时间(GMT) 说明
bootsect.s   5052 bytes               1991-12-05 22:47:58
head.s         5938 bytes                1991-11-18 15:05:09
setup.s        5364 bytes                 1991-12-05 22:48:10

 

bootsect.s 代码是磁盘引导块程序,驻留在磁盘的第一个扇区中(引导扇区,0 磁道(柱面),0 磁头,
第1 个扇区)。在PC 机加电ROM BIOS 自检后,引导扇区由BIOS 加载到内存0x7C00 处,然后将自己移动
到内存0x90000 处。该程序的主要作用是首先将setup 模块(由setup.s 编译成)从磁盘加载到内存紧接
着bootsect 的后面位置(0x90200),然后利用BIOS 中断0x13 取磁盘参数表中当前启动引导盘的参数,
接着在屏幕上显示“Loading system...”字符串。再者将system 模块从磁盘上加载到内存0x10000 开始
的地方。随后确定根文件系统的设备号,若没有指定,则根据所保存的引导盘的每磁道扇区数判别出盘的
类型和种类(是1.44M A 盘?)并保存其设备号于root_dev(引导块的0x508 地址处),最后长跳转到setup
程序的开始处(0x90200)执行setup 程序。

 

 

查了汇编书BIOS0X13中断.

  AH        功能                    调用参数                                          返回参数

   0          磁盘复位            DL=驱动器号                                    失败 :  AH=错误码

                                           (00,01为软盘,80h,81h...为硬盘       

 

   1          读磁盘驱动器                                                                 AH=状态字节

              状态

 

  2          读磁盘扇区         AL=扇区数                                      读成功:

                                       (CL)6,7  (CH)0~7=磁道号                 AH=0

                                       (CL)0~5=扇区数                                AL=读取的扇区数 

                                       DH/DL=磁头号/驱动器号                  读失败:

                                       ES:BX=数据缓冲区地址                    AH=错误码

 

3         写磁盘扇区           同上                                                    写成功:

                                                                                                      AH=0

                                                                                                     AL=写入的扇区数

                                                                                                    写失败:

                                                                                                      AH=错误码

 

4.       检验磁盘扇区        AL=扇区数                                       成功:

                                        (CL)6,7  (CH)0~7=磁道号                  AH=0

                                        (CL)0~5=扇区数                                AL=检验的的扇区数 

                                       DH/DL=磁头号/驱动器号                   失败: AH=错误码

 

5      格式化盘磁盘         AL=扇区数                                        成功:

                                        (CL)6,7  (CH)0~7=磁道号                  AH=0

                                        (CL)0~5=扇区数                              

                                       DH/DL=磁头号/驱动器号                   失败:

                                      ES:BX=格式化参数表指针                 AH=错误码

                                                                                                   

 

发觉错误码都放在AH中.

学习过程中一定要有耐心,不能为了追究进度,一知半解.

 

 

你可能感兴趣的:(Linux/boot)