第三章计算机系统引导过程分 1.docx
《第三章计算机系统引导过程分 1.docx》由会员分享,可在线阅读,更多相关《第三章计算机系统引导过程分 1.docx(64页珍藏版)》请在冰豆网上搜索。
第三章计算机系统引导过程分1
第三章、计算机系统引导过程分析
第一节计算机加电自测(POST)
计算机在工作之前,必须检测并初始化所有系统部件,并将操作系统引导在内存中。
系统检测和初始化过程一般由ROMBIOS控制。
加电自测及初始化过程一般简称为POST(Power-onSelfTest)。
3.1.1计算机的启动方式:
1)系统加电(即开启系统):
BIOS跳至由处理器复位向量(F:
0000h)所指的入口点,执行所有POST测试和初始化工作。
POST调用BIOSINT19h引导系统。
2)通过硬件复位键(RESET键)复位系统:
(同上)。
3)通过按++三组合键(热启动):
INT09h键盘硬件中断服务例程将控制权转给BIOSPOST。
对64K以上的内存不作测试和初始化,但其他POST测试和初始化工作一律要执行。
然后POST调用BIOSINT19h引导系统。
3.1.2POST过程:
POST过程的初始化和自检功能是紧密联系的,一般可将这些功能分为二类:
与中心系统硬件有关的功能;与配置和非系统硬件有关的功能。
中心硬件POST测试失败一般引起严重的系统板错误,并产生喇叭信号。
在进行其他POST测试之前,中心硬件功能应正常,最重要的中心硬件最先测试和初始化。
POST测试和初始化中心硬件的顺序如下:
在测试和初始化完之后,POST验证存储在CMOSRAM中的系统配置数据是否与实际硬件一致。
然后,POST测试并初始化64K以上内存、键盘、软盘、硬盘驱动器、CRT控制器和其他非系统板硬件。
POST测试和
初始化配置与非系统硬件的顺序如下:
至此,计算机的加电自测完成。
加电自测过程中可能出现的故障以及解决的方法在第三章中将专题讨论,本章不再熬述。
第二节INT19h引导系统
在加电自测完成之后,计算机将控制权交给INT19h,由INT19h引导并加载操作系统。
在分析讨论INT19h工作过程之前,我们首先了解获得INT19h源程序的方法。
3.2.1获得INT19h源程序的方法:
由于计算机在加栽操作系统的过程中,INT19h的入口参数被多次修改(如图3-1),因而原INT19h被包裹上了一层或多层外壳。
因此原始的INT19h入口参数不能简单地从内存0000:
0064H处获得,而必须去掉它的所有外壳才能获得。
INT19h源程序的方法很多,下面以“采用DEBUG.EXE获得INT19h源程序”的方法为例,具体给大家介绍。
第一步、让计算机按缺省方式启动:
将启动盘根目录下的CONFIG.SYS和AUTOEXEC.BAT改名后重新启动即可。
之所以要按缺省方式启动,是因为按缺省方式启动时,INT19h被修改次数最少,也最容易找到原始INT19h的入口。
第二步、找到当前INT19h的入口地址:
INT19h的入口地址位于内存0000:
0064H处,用DEBUG的D命令即可显示。
第三步、获得并分析该层源程序:
采用文件重定位方法可获得源程序。
源程序分析举例如下:
0070:
00001809172301EA9308-7000000000000000...#....p.......
0070:
001000007C0323010000-0000000070000102..|.#.......p...
0070:
002000E8003500700013-80F5060007434F4E...5.p.......CON
0070:
00F070000080F5063307-434F4D3420202020p.....3.COM4
0070:
010010C81900C013979F-00F01559F800F019...........Y....
0070:
0110F2E600F01B53FF00-F04E03700000FFF8.....S...N.p....
0070:
06300000000000000000-0000FFFFFFFFFC01................
0070:
06400102C3E200F008A5-FE00F00987E900F0................
0070:
06500A73F700F00B73F7-00F00C73F700F00D.s....s....s....
0070:
066073F700F00E57EF00-F0701EF700F07273s....W...p....rs
0070:
0670F700F07373F700F0-7473F700F07645E8...ss...ts...vE.
0070:
068000F07765E800F054-03B8031F098309E7..we...T........
0070:
06900900000000000000-0000000000000000................
0070:
07FB0EPUSHCS
0070:
07FC1FPOPDS
0070:
07FD8E061A00MOVES,[001A]
0070:
0801B90500MOVCX,0005
0070:
0804BE0001MOVSI,0100
0070:
0807ACLODSB恢复10、13、15、19、1B中断向量
0070:
080898CBW
0070:
0809D1E0SHLAX,1
0070:
080BD1E0SHLAX,1
0070:
080D8BF8MOVDI,AX
0070:
080FADLODSW
0070:
0810ABSTOSW
0070:
0811ADLODSW
0070:
0812ABSTOSW
0070:
0813E2F2LOOP0807
0070:
0815803E400600CMPBYTEPTR[0640],00
0070:
081A7422JZ083E
0070:
081CBE4106MOVSI,0641
0070:
081FB90E00MOVCX,000E
0070:
0822ACLODSB
0070:
082398CBW
0070:
08248BF8MOVDI,AX
0070:
0826ADLODSW恢复02、08、09、0A、0B、0C、0D、0E、72、
0070:
08278BD8MOVBX,AX73、74、76、77中断向量
0070:
0829ADLODSW
0070:
082A83FBFFCMPBX,-01
0070:
082D740DJZ083C
0070:
082F3DFFFFCMPAX,FFFF
0070:
08327408JZ083C
0070:
083403FFADDDI,DI
0070:
083603FFADDDI,DI
0070:
083893XCHGBX,AX
0070:
0839ABSTOSW
0070:
083A93XCHGBX,AX
0070:
083BABSTOSW
0070:
083CE2E4LOOP0822
0070:
083E803E0D0000CMPBYTEPTR[000D],00
0070:
08437403JZ0848
0070:
0845E83000CALL0878
0070:
0848CD19INT19
第四步、获得并分析原INT19h源程序:
通过第三步分析可知,原INT19h入口的位置(F000:
E6F2H)。
采用文件重定位方法可获得源程序。
3.2.2INT19h中断处理程序及分析:
由于原始INT19h的内容存在于计算机的BIOS中,因此INT19h的内容与BIOS的版本和生产厂家有关,不同版本和生产厂家BIOS的INT19h内容不同。
但是、不管是那个版本或生产厂家BIOS的INT19h在加栽操作系统时,所完成的任务是相同或基本相同的。
下面举例分析:
例一、MRBIOS(c)1988INT19h分析:
F000:
E6F2E9151BJMP020A
......
F000:
020AB80000MOVAX,0000
F000:
020D8ED8MOVDS,AX
F000:
020FB80000MOVAX,0000
F000:
02128EC0MOVES,AXDS,ES←0
F000:
0214FACLI(ClearInterruptenableFlag)
F000:
021526ES:
将41H中断向量置为F000:
283H
F000:
0216C70604018302MOVWORDPTR[0104],0283
F000:
021C26ES:
其中,41H中断为硬盘参数中断
F000:
021D8C0E0601MOV[0106],CS
F000:
022126ES:
将1EH中断向量置为F000:
278H
F000:
0222C70678007802MOVWORDPTR[0078],0278
F000:
022826ES:
其中,1EH中断为软盘参数中断
F000:
02298C0E7A00MOV[007A],CS
F000:
022DFBSTI
F000:
022EB90300MOVCX,0003置读次数
F000:
0231B200MOVDL,00置A驱
F000:
0233E82100CALL0257读0头0道1扇区引导记录到0:
7C00H
F000:
02367205JB023D读失败,转023D
F000:
0238EA007C0000JMP0000:
7C00执行0:
7C00H的引导记录(软盘)
F000:
023DB90300MOVCX,0003置读次数
F000:
0240B280MOVDL,80置硬盘驱号
F000:
0242E81200CALL0257读0头0道1扇区引导记录到0:
7C00H
F000:
0245720EJB0255读失败,执行ROM-BASIC(INT18H)
F000:
024726ES:
引导记录模块最后一个字为AA55H
F000:
0248813EFE7D55AACMPWORDPTR[7DFE],AA55
F000:
024E7505JNZ0255不是,转INT18H
F000:
0250EA007C0000JMP0000:
7C00成功,执行引导记录(硬盘)
F000:
0255CD18INT18ROM-BASIC
●复位驱动器及读引导记录子程序
F000:
0257B400MOVAH,00复位磁盘
F000:
0259CD13INT13
F000:
025B7213JB0270复位失败,转270H
F000:
025DB402MOVAH,02复位成功,置读扇区功能号
F000:
025FB001MOVAL,01置要读的扇区数
F000:
0261BB007CMOVBX,7C00读到内存0:
7C00H(ES:
BX指标)
F000:
026451PUSHCX
F000:
0265B500MOVCH,00置磁道号(柱面号)
F000:
0267B101MOVCL,01置要读首扇区号
F000:
0269B600MOVDH,00置要读磁头号
F000:
026BCD13INT13
F000:
026D59POPCX成功,反回
F000:
026E7307JNB0277
F000:
027080FC80CMPAH,80失败,超时错?
F000:
0273E0E2LOOPNZ0257未够3次,继续
F000:
0275F9STC
F000:
0276C3RET
F000:
0277C3RET
例二、AMIBIOS(c)1993INT19h分析:
F000:
E6F2E93CA0JMP8731
......
F000:
873133C0XORAX,AX
F000:
87338EC0MOVES,AX
F000:
8735FACLI
F000:
8736FCCLD
F000:
8737B8C7EFMOVAX,EFC7
F000:
873ABF7800MOVDI,0078
F000:
873DABSTOSW
F000:
873EB800F0MOVAX,F000
F000:
8741ABSTOSW修改1E中断指向F000:
EFC7
F000:
8742BF007CMOVDI,7C00
F000:
8745B90001MOVCX,0100
F000:
8748F3REPZ
F000:
8749ABSTOSW0000:
7C00---0000:
7DFF填F000
F000:
874AFBSTI
F000:
874B33D2XORDX,DX
F000:
874D33C0XORAX,AX
F000:
874FCD13INT13软驱复位
F000:
8751E83677CALLFE8A判断操作系统启动顺序是C:
A:
或A:
C:
F000:
87542406ANDAL,06
F000:
87567431JZ8789启动顺序是C:
A:
则转移
F000:
8758E86900CALL87C4读软盘引导记录
F000:
875BE8A026CALLADFE判断是否读成功
F000:
875E734CJNB87AC成功则转移
F000:
8760E8CB64CALLEC2E判断是否有硬盘
F000:
8763A808TESTAL,08
F000:
87657512JNZ8779无硬盘则转移
F000:
8767B280MOVDL,80
F000:
8769E85800CALL87C4读硬盘主引导记录
F000:
876CE30BJCXZ8779
F000:
876E7209JB8779读失败则转移
F000:
877026ES:
F000:
8771813EFE7D55AACMPWORDPTR[7DFE],AA55比较硬盘主引导记录标志
F000:
87777443JZ87BC标志存在则转移
F000:
8779CD18INT18ROM-BASIC
......
F000:
8789E8A264CALLEC2E判断是否有硬盘
F000:
878CA808TESTAL,08
F000:
878E7512JNZ87A2
F000:
8790B280MOVDL,80
F000:
8792E82F00CALL87C4读硬盘主引导记录
F000:
8795E30BJCXZ87A2
F000:
87977209JB87A2
F000:
879926ES:
F000:
879A813EFE7D55AACMPWORDPTR[7DFE],AA55
F000:
87A0741AJZ87BC
F000:
87A2B200MOVDL,00
F000:
87A4E81D00CALL87C4读软盘引导记录
F000:
87A7E85426CALLADFE判断是否读成功
F000:
87AA72CDJB8779
F000:
87ACBF007CMOVDI,7C00
F000:
87AF26ES:
F000:
87B08B05MOVAX,[DI]
F000:
87B2B98000MOVCX,0080
F000:
87B5FACLI
F000:
87B6FCCLD
F000:
87B7F3REPZ
F000:
87B8AESCASB
F000:
87B9FBSTI
F000:
87BAE3BDJCXZ8779判断软盘引导记录的存在性
F000:
87BCE84B64CALLEC0A
F000:
87BFEA007C0000JMP0000:
7C00控制权交给主引导记录或引导记录
●复位驱动器及读引导记录子程序
F000:
87C453PUSHBX
F000:
87C5B90400MOVCX,0004
F000:
87C8BB007CMOVBX,7C00
F000:
87CB51PUSHCX
F000:
87CCB90100MOVCX,0001
F000:
87CFB80102MOVAX,0201
F000:
87D2CD13INT13
F000:
87D459POPCX
F000:
87D5730CJNB87E3
F000:
87D750PUSHAX
F000:
87D833C0XORAX,AX
F000:
87DACD13INT13
F000:
87DC58POPAX
F000:
87DDD0E4SHLAH,1
F000:
87DF7202JB87E3
F000:
87E1E2E8LOOP87CB
F000:
87E35BPOPBX
F000:
87E4C3RET
●通过读成功与否给BH赋初值
F000:
ADFEB700MOVBH,00
F000:
AE00E306JCXZAE08如果读完4次(CX=0)则转移
F000:
AE02B701MOVBH,01
F000:
AE047303JNBAE09读成功则转移
F000:
AE06B702MOVBH,02
F000:
AE08F9STC进位标志位置1(CF=1)
F000:
AE09C3RET
F000:
EC2EB08EMOVAL,8E
F000:
EC30E8AEFFCALLEBE1
F000:
EC33A8C0TESTAL,C0
F000:
EC35C3RET
F000:
EBE1E670OUT70,AL
F000:
EBE3E300JCXZEBE5
F000:
EBE5E300JCXZEBE7
F000:
EBE7E471INAL,71
F000:
EBE9C3RET
第三节硬盘主引导记录
硬盘的主引导记录与计算机硬件无关,但与所使用的操作系统种类以及该操作系统的版本有密切的关系。
DOS操作系统与XENIX操作系统下的硬盘主引导记录不一样;DOS3.30操作系统与DOS6.20操作系统下的硬盘主引导记录也有一些区别。
即使如此,但它们所完成的功能与作用则是基本相同的。
因此,我们在学习硬盘主引导记录时,只需分析其一种即可触类旁通,达到学习的目的。
3.3.1获得主引导记录的方法:
获得主引导记录的方法很多也很简单。
下面仅以采用DOS提供的DEBUG.EXE程序获得硬盘主引导记录的方法为例,简单介绍其方法。
C:
\>DEBUG
-a
xxxx:
0100movax,0201ah为功能号al为读扇区数
xxxx:
0103movbx,0200es:
bx为所读扇区在内存中的存放位置
xxxx:
0106movcx,0001cx为所读磁道号和扇区号
xxxx:
0109movdx,0080dh为所读磁头号dl为所读磁盘的盘符
xxxx:
010Cint13h
xxxx:
010Eint3h设置断点
xxxx:
010F
-g
注:
INT13h的具体使用方法请查阅有关书籍
3.3.2硬盘主引导记录分析(DOS6.20):
硬盘主引导记录的功能是读出硬盘自举分区的BOOT程序,并把控制权转移到分区BOOT程序。
xxxx:
7C00FACLI
xxxx:
7C0133C0XORAX,AX
xxxx:
7C038ED0MOVSS,AX
xxxx:
7C05BC007CMOVSP,7C00重置堆栈
xxxx:
7C088BF4MOVSI,SP
xxxx:
7C0A50PUSHAX
xxxx:
7C0B07POPESES=0
xxxx:
7C0C50PUSHAX
xxxx:
7C0D1FPOPDSDS=0
xxxx:
7C0EFBSTI
xxxx:
7C0FFCCLD
xxxx:
7C10BF0006MOVDI,0600
xxxx:
7C13B90001MOVCX,0100
xxxx:
7C16F2REPNZ移动引导记录从0000:
7c00到0000:
0600
xxxx:
7C17A5MOVSW
xxxx:
7C18EA1D060000JMP0000:
061D跳转到
xxxx:
7C1DBEBE07MOVSI,07BE
xxxx:
7C20B304MOVBL,04
xxxx:
7C22803C80CMPBYTEPTR[SI],80判断0000:
07be是否为活动分区
xxxx:
7C25740EJZ7C35是活动分区则转移
xxxx:
7C27803C00CMPBYTEPTR[SI],00
xxxx:
7C2A751CJNZ7C48
xxxx:
7C2C83C610ADDSI,+10
xxxx:
7C2FFECBDECBL
xxxx:
7C3175EFJNZ7C22
xxxx:
7C33CD18INT18进入ROM-BASIC
xxxx:
7C358B14MOVDX,[SI]
xxxx:
7C378B4C02MOVCX,[SI+02]
xxxx:
7C3A8BEEMOVBP,SI
xxxx:
7C3C83C610ADDSI,+10
xxxx:
7C3FFECBDECBL
xxxx:
7C41741AJZ7C5D分区表正常
xxxx:
7C43803C00CMPBYTEPTR[SI],00
xxxx:
7C4674F4JZ7C3C
xxxx:
7C48BE8B06MOVSI,068B
xxxx:
7C4BACLODSB
xxxx:
7C4C3C00CMPAL,00
xxxx:
7C4E740BJZ7C5B
xxxx:
7C5056PUSHSI
xxxx:
7C51BB0700MOVBX,0007用白色
xxxx:
7C54B40EMOVAH,0E于屏幕
xxxx:
7C56CD10INT10写提示
xxxx:
7C5