| 比较详细的MBR的分析 |
 |
作者: 来源: 日期:2007-5-17 11:17:11 点击次数: |
|
0000:0620 382C CMP [SI],CH ; 0000:0622 7C09 JL 062D ;大于等于80h转[注意JL指令:(SF xor OF)=1则转] 0000:0624 7515 JNZ 063B ;不为0则[SI]一定小于80h,只能转错误处理了! 0000:0626 83C610 ADD SI,+10 ;为零则检查下一表项 0000:0629 E2F5 LOOP 0620 ;检查下一表项 0000:062B CD18 INT 18 ;四表项的状态字节都为0,则系统只好调用INT 18h了! ; ; 0000:062D~0000:0639:检查剩余的分区表项——状态字节必须为零,否则显示错误信息“分区表无效”然 ; 后当机!拜托,微软搞错没有,怎么用中文提示信息?真TM傻得可爱! ; 这里还有个小BUG,前面放行原则是只要状态字节大于等于80h,那么如果这个字节是诸如A0h、E5h之类数值 ; 呢?嘿嘿,这个引导记录统统认为是有效的可引导分区了! 0000:062D 8B14 MOV DX,[SI] ;为读分区引导记录做准备:磁头号→DH,驱动器号→DL 0000:062F 8BEE MOV BP,SI ;SI→BP,保存可引导分区表项的指针 ; 0000:0631 83C610 ADD SI,+10 ;其余的分区表项还要检查检查的 0000:0634 49 DEC CX ; 0000:0635 7416 JZ 064D ;CX=0则检查顺利通过,转继续 0000:0637 382C CMP [SI],CH ; 0000:0639 74F6 JZ 0631 ;为零,是合法表项,再查下一表项 ; ; 0000:063B~0000:064B:执行错误处理——报告错误信息后当机 0000:063B BE1007 MOV SI,0710 ;错误信息字符串偏移+1→SI 0000:063E 4E DEC SI ;SI-1→SI 0000:063F AC LODSB ;SI+1→SI 0000:0640 3C00 CMP AL,00 ; 0000:0642 74FA JZ 063E ;AL=0则表明一条错误信息显示完毕,系统陷入一个死循环 0000:0644 BB0700 MOV BX,0007 ;字符方式显示 0000:0647 B40E MOV AH,0E ; 0000:0649 CD10 INT 10 ;以写电传方式显示信息(只显示一个字符) 0000:064B EBF2 JMP 063F ;显示下一个字符,直到遇到提示信息结束为止 ; ; 0000:064D~0000:0662:判断可引导分区的分区类型,然后转相应处理程序。 0000:064D 894625 MOV [BP+25],AX ;BP=指向第一个可引导分区表项的指针,这时AX=0000h 上一篇:扩展int13h调用详解(修正) 下一篇:自己编程实现多引导 |
|
|
 |
| 北京总部: 4006-505-808 |
| 上 海 部: 021-58358765 |
| 深 圳 部: 0755-83692929 |
| 浙 江 部: 13666673722 |
| 广 州 部: 020-83821091 |
| 重 庆 部: 023-86870422 |
| 昆 明 部: 15987117834 |
| 哈尔滨部: 13946167430 |
| 其它地区: 4006-505-808 | | | |
|
 |
|