




免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
DOS引导扇区代码详解如果从软盘起动,则Dos引导程序被ROM BIOS直接加载到内存,若从硬盘起动,则被硬盘的主引导程序加载.不过都是被加载到内存的绝对地址0000:7C00H处.因此,Dos引导程序的第一条指令的地址一定是0000:7C00H.本人注: 本文所述的dos引导代码已经在bootsect.bak, 可以用winhex打开参考,但我试用过得,似乎有点问题, 直接就到最后的“Non-sytem disk or disk error. Replace and press any key when ready”Dos引导程序所做的事情如下:1调整堆栈位置2修改并用修改后的磁盘参数表来复位磁盘系统3计算根目录表的首扇区的位置及IO.SYS的扇区位置4读入根目录表的首扇区5检查根目录表的开头两项是否为IO.SYS及MSDOS.SYS6将IO.SYS文件开头三个扇区读入内存0000:0700H处7跳到0000:0700H处执行IO.SYS,引导完毕 上述每一步若出错,则显示Non system disk or disk error.信息,等用户按任一键后试图重新起动. 下面的Dos引导程序是从硬盘上得来的,显示MSDOS5.0,但Dos的ver命令报告的是6.22版.FAT表自然是16位的.说明: (DX) 表示寄存器DX的值 逻辑扇区号 以0面0道1扇区作为逻辑0扇区,而不是以Dos引导扇区为逻辑0扇区, 当然,对软盘来说二者是相同的,对硬盘则不同 面号 即磁头号 磁道号 即柱面号(对硬盘) 物理扇区号 由面号,磁道号,扇区号三者共同指定偏移 机器码 符号指令 说明=0000 EB3C JMP 003E ;跳过数据区 ;以下数据是厂商OEM信息和磁盘BPB表0000 90 4D 53 44 4F 53-35 2E 30 00 02 08 01 00 .MSDOS5.0.0010 02 00 02 00 00 F8 CC 00-3F 00 10 00 3F 00 00 00 .?.?.0020 F1 59 06 00 80 00 29 E3-0B 3F 26 53 4C 4D 20 20 .Y.).?&SLM0030 20 20 20 20 20 20 46 41-54 31 36 20 20 20 FAT16-003E FA CLI003F 33C0 XOR AX,AX0041 8ED0 MOV SS,AX0041 8ED0 MOV SS,AX0043 BC007C MOV SP,7C00 ; 初始化堆栈0046 16 PUSH SS0047 07 POP ES ;(ES)=0000H0048 BB7800 MOV BX,0078 ;1EH 号中断向量的地址为0000:0078H004B 36 SS: ;(SS)=0000H004C C537 LDS SI,BX ;取1EH号中断向量的内容存入DS:SI004E 1E PUSH DS ;该中断向量指向一个11字节的磁盘参 ;数表004F 56 PUSH SI ;取到后压入堆栈中保存0050 16 PUSH SS0051 53 PUSH BX ;保存地址0000:0078H0052 BF3E7C MOV DI,7C3E ;7C3E-7C00=003EH,即偏移003EH,以下 ;类推0055 B90B00 MOV CX,000B ;磁盘参数表共11字节0058 FC CLD0059 F3 REPZ005A A4 MOVSB ;将磁盘参数表复制到0000:7C3EH处005B 06 PUSH ES005C 1F POP DS ;(DS)=0000H005D C645FE0F MOV BYTE PTR DI-02,0F ;修改参数表中磁头定位时间0061 8B0E187C MOV CX,7C18 ;从BPB中取每磁道扇区数0065 884DF9 MOV DI-07,CL ;修改参数表中每磁道扇区数0068 894702 MOV BX+02,AX ;(AX)=0000H,修改1EH号中断向量 ;(段址)006B C7073E7C MOV WORD PTR BX,7C3E ;修改1EH号中断向量(偏移),这 ;样1EH号006F FB STI ;中断向量的内容为0000:7C3EH,指向新的磁盘参 ;数表0070 CD13 INT 13 ;用新的磁盘参数表来复位磁盘0072 7279 JB 00ED ;出错则转出错处理- ; 下面一段程序计算扇区位置0074 33C0 XOR AX,AX0076 3906137C CMP 7C13,AX ;偏移0013H处是Dos分区的总扇区数007A 7408 JZ 0084 ;为零表示大硬盘?007C 8B0E137C MOV CX,7C13 ;不为0则取出来放到偏移0020H处0080 890E207C MOV 7C20,CX ;这个值本程序未用,似乎为IO.SYS准备 ;的0084 A0107C MOV AL,7C10 ;取FAT表的个数0087 F726167C MUL WORD PTR 7C16 ;乘以一个FAT表所占的扇区数008B 03061C7C ADD AX,7C1C ;加上Dos分区前的扇区数(隐藏扇数,低位)008F 13161E7C ADC DX,7C1E ; 高位)0093 03060E7C ADD AX,7C0E ;加上Dos分区内的保留扇区数(低位)0097 83D200 ADC DX,+00 ; (高位)009A A3507C MOV 7C50,AX ;根目录表的首扇的逻辑扇区号(低位)009D 8916527C MOV 7C52,DX ; (高位)00A1 A3497C MOV 7C49,AX ;此处放IO.SYS的首扇的逻辑扇区号(低 ;位)00A4 89164B7C MOV 7C4B,DX ; (高 ;位)00A8 B82000 MOV AX,0020 ;根目录表中每项占32字节00AB F726117C MUL WORD PTR 7C11 ;乘以根目录表中的项数00AF 8B1E0B7C MOV BX,7C0B ;取每扇区的字节数00B3 03C3 ADD AX,BX ;这两条指令是为了取整00B5 48 DEC AX00B6 F7F3 DIV BX ;除以每扇字节数,得到根目录所占扇区 ;数00B8 0106497C ADD 7C49,AX ;得到根目录表后首扇的逻辑扇区号(低 ;位)00BC 83164B7C00 ADC WORD PTR 7C4B,+00 ; (高 ;位)- ;下面一段程序在根目录表中找系统文件IO.SYS和MSDOS.SYS00C1 BB0005 MOV BX,0500 ;内存缓冲区的偏移值00C4 8B16527C MOV DX,7C52 ;取根目录表的首扇的逻辑扇区号(高 ;位)00C8 A1507C MOV AX,7C50 ; (低 ;位)00CB E89200 CALL 0160 ;将逻辑扇区号转换为物理扇区号00CE 721D JB 00ED ;出错则转出错处理00D0 B001 MOV AL,0100D2 E8AC00 CALL 0181 ;读一个扇区到内存(根目录的首扇)00D5 7216 JB 00ED ;出错处理00D7 8BFB MOV DI,BX ;内存缓冲区的首址00D9 B90B00 MOV CX,000B ;比较11个字节00DC BEE67D MOV SI,7DE6 ;偏移01E6处是串IO SYS,长11 ;字节00DF F3 REPZ00E0 A6 CMPSB ;看第一项是否为IO.SYS00E1 750A JNZ 00ED ;不是则出错00E3 8D7F20 LEA DI,BX+20 ;跳过32字节就指向第二项00E6 B90B00 MOV CX,000B ;比较11个字节00E9 F3 REPZ00EA A6 CMPSB ;看第二项是否为MSDOS.SYS00EB 7418 JZ 0105 ;是则两个文件都已找到,跳过出错处理- ;下面一段进行出错处理00ED BE9E7D MOV SI,7D9E ;偏移019EH处是串Non system disk. ;.00F0 E85F00 CALL 0152 ;显示字符串00F3 33C0 XOR AX,AX00F5 CD16 INT 16 ;等待任一键按下00F7 5E POP SI00F8 1F POP DS ;得到1EH号中断向量的地址0000:0078H00F9 8F04 POP SI00FB 8F4402 POP SI+02 ;恢复1EH号中断向量的内容00FE CD19 INT 19 ;自举0100 58 POP AX0101 58 POP AX0102 58 POP AX ;清理堆栈0103 EBE8 JMP 00ED ;再次试图起动- ;下面读入IO.SYS的头3个扇区到内存0000:0700H处0105 8B471A MOV AX,BX+1A ;从根目录表第一项中取IO.SYS的首簇 ;号0108 48 DEC AX0109 48 DEC AX ;首簇号减二010A 8A1E0D7C MOV BL,7C0D ;取每簇的扇区数010E 32FF XOR BH,BH0110 F7E3 MUL BX ;(首簇号 - 2)乘以 每簇的扇区数0112 0306497C ADD AX,7C49 ;相加后得到IO.SYS的首扇的逻辑扇区 ;号0116 13164B7C ADC DX,7C4B011A BB0007 MOV BX,0700 ;内存缓冲区的偏移值011D B90300 MOV CX,0003 ;循环计数初值,读3个扇区0120 50 PUSH AX ;逻辑扇区号进栈(低位)0121 52 PUSH DX ; (高位)0122 51 PUSH CX ;循环计数器进栈0123 E83A00 CALL 0160 ;逻辑扇区号转换为物理扇区号0126 72D8 JB 0100 ;出错处理0128 B001 MOV AL,01012A E85400 CALL 0181 ;读一个扇区到内存缓冲区012D 59 POP CX ;循环计数出栈012E 5A POP DX012F 58 POP AX ;逻辑扇区号出栈0130 72BB JB 00ED ;读盘出错处理0132 050100 ADD AX,00010135 83D200 ADC DX,+00 ;下一个扇区0138 031E0B7C ADD BX,7C0B ;缓冲区指针移动一个扇区的大小013C E2E2 LOOP 0120 ;循环读入三个扇区013E 8A2E157C MOV CH,7C15 ;取磁盘介质描述,传给IO.SYS0142 8A16247C MOV DL,7C24 ;取系统文件所在的驱动器号0146 8B1E497C MOV BX,7C49 ;取IO.SYS的首扇的逻辑扇区号014A A14B7C MOV AX,7C4B014D EA00007000 JMP 0070:0000 ;执行IO.SYS,引导完毕- ;显示字符串的子程序0152 AC LODSB ;从串中取一个字符0153 0AC0 OR AL,AL0155 7429 JZ 0180 ;为0则已到串尾,返回(共用RET指令)0157 B40E MOV AH,0E0159 BB0700 MOV BX,0007015C CD10 INT 10 ;显示该字符015E EBF2 JMP 0152 ;循环显示下一个- ;将逻辑扇区号转换为物理扇区号的子 ;程序0160 3B16187C CMP DX,7C18 ;这两条指令是为了避免第二次除法时 ;除数0164 7319 JNB 017F ;为00166 F736187C DIV WORD PTR 7C18 ;逻辑扇取号除以每道扇区数,商(AX)= ;总磁016A FEC2 INC DL ;道数,余数(DX)再加一即为扇区号,因 ;为扇016C 88164F7C MOV 7C4F,DL ;区号是从1开始的,而不是从0开始0170 33D2 XOR DX,DX0172 F7361A7C DIV WORD PTR 7C1A ;总磁道数(AX)再除以面数,所得的0176 8816257C MOV 7C25,DL ;余数(DX)=面号(即磁头号)017A A34D7C MOV 7C4D,AX ;商(AX)=磁道号017D F8 CLC017E C3 RET ;正常返回017F F9 STC0180 C3 RET ;异常返回- ;读一个扇区的子程序0181 B402 MOV AH,02 ;读功能调用0183 8B164D7C MOV DX,7C4D ;需要的入口参数如下:0187 B106 MOV CL,06 ;(DL)=驱动器号0189 D2E6 SHL DH,CL ;(DH)=面号018B 0A364F7C OR DH
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年智能货架自动补货系统在化妆品零售领域的创新实践
- 2025年智能工业机器人协作作业控制技术创新趋势分析报告
- 医药商品购销员特殊工艺考核试卷及答案
- 网球知识竞赛题及答案
- 简单机械测试题及答案
- 物探工三级安全教育(公司级)考核试卷及答案
- 5C培训模拟试题重症医学专科资质培训班模拟考试试题及答案
- 2025年安全生产月知识竞赛试题及答案
- 地质样品制备工晋升考核试卷及答案
- 水利安全生产知识竞赛试题及答案
- 四川成都交易集团有限公司招聘笔试题库2025
- 2025-2026学年一年级上册统编版道德与法治教学计划
- 2025年《资料员专业基础知识》考试题库及答案
- 2025年法规审查要点与合规操作实务方案
- 2025年银发经济老年教育产业现状与未来发展趋势白皮书
- 国开2025年秋季《形势与政策》专题测验1-5答案
- 2025-2030中国金红石开发利用市场发展潜力与产销规模规划报告
- 2025年智慧数据中心绿色运维解决方案深度解析
- 成本控制与成本分析方法指导手册
- 环境灾害预警系统-洞察及研究
- 无人机基地技术支持与服务方案
评论
0/150
提交评论