资源描述:
《DOS引导扇区代码详解》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、DOS引导扇区代码详解如果从软盘起动,则Dos引导程序被ROMBIOS直接加载到内存,若从硬盘起动,则被硬盘的主引导程序加载.不过都是被加载到内存的绝对地址0000:7C00H处.因此,Dos引导程序的第一条指令的地址一定是0000:7C00H.[本人注:本文所述的dos引导代码已经在bootsect.bak,可以用winhex打开参考,但我试用过得,似乎有点问题,直接就到最后的—“Non-sytemdiskordiskerror...Replaceandpressanykeywhenready”]Dos引导程序所做的事情如下:1>调整堆栈位置2>修改并用修改后
2、的磁盘参数表来复位磁盘系统3>计算根目录表的首扇区的位置及IO.SYS的扇区位置4>读入根目录表的首扇区5>检查根目录表的开头两项是否为IO.SYS及MSDOS.SYS6>将IO.SYS文件开头三个扇区读入内存0000:0700H处7>跳到0000:0700H处执行IO.SYS,引导完毕 上述每一步若出错,则显示"Nonsystemdiskordiskerror..."信息,等用户按任一键后试图重新起动. 下面的Dos引导程序是从硬盘上得来的,显示MSDOS5.0,但Dos的ver命令报告的是6.22版.FAT表自然是16位的.说明: (DX)
3、 表示寄存器DX的值 逻辑扇区号 以0面0道1扇区作为逻辑0扇区,而不是以Dos引导扇区为逻辑0扇区, 当然,对软盘来说二者是相同的,对硬盘则不同 面号 即磁头号 磁道号 即柱面号(对硬盘) 物理扇区号 由面号,磁道号,扇区号三者共同指定偏移机器码 符号指令 说明==============================================================================0000EB3C
4、 JMP 003E ;跳过数据区 ;以下数据是厂商OEM信息和磁盘BPB表0000 904D53444F53-352E300002080100 .MSDOS5.0.....00100200020000F8CC00-3F0010003F000000 ........?...?...0020F1590600800029E3-0B3F26534C4D2020 .Y....)..?&SLM0030202020202020464
5、1-543136202020 FAT16------------------------------------------------------------------------------003EFA CLI003F33C0 XOR AX,AX00418ED0 MOV SS,AX00418ED0 MOV SS,AX0043BC007C MOV SP,7C00 ;初始化堆栈004616 PUSH
6、 SS004707 POP ES ;(ES)=0000H0048BB7800 MOV BX,0078 ;1EH号中断向量的地址为0000:0078H004B36 SS: ;(SS)=0000H004CC537 LDS SI,[BX] ;取1EH号中断向量的内容存入DS:SI004E1E PUSH DS ;该中断向量指向一个11字节的磁盘参
7、 ;数表004F56 PUSH SI ;取到后压入堆栈中保存005016 PUSH SS005153 PUSH BX ;保存地址0000:0078H0052BF3E7C MOV DI,7C3E ;7C3E-7C00=003EH,即偏移003EH,以下
8、;类推0055B90B0