| 比较详细的MBR的分析 |
 |
作者: 来源: 日期:2007-5-17 11:17:11 点击次数: |
|
;使用长度最短的指令将[BP+25]起始的两个单元清零 ;这两个单元将被用来存放中间变量 0000:0650 96 XCHG SI,AX ;此时SI清零的最佳指令选择(仅1字节),将服务于0000:06B8 0000:0651 8A4604 MOV AL,[BP+04] ;取分区类型(本例是“06”喽——FAT16主DOS分区) 0000:0654 B406 MOV AH,06 ;为扩展INT 13h无法使用做好更改分区类型的准备 0000:0656 3C0E CMP AL,0E ;0Eh:需要用扩展INT 13h访问的FAT16主DOS分区 0000:0658 7411 JZ 066B ;0Eh类型的分区转066Bh 0000:065A B40B MOV AH,0B ; 0000:065C 3C0C CMP AL,0C ;0Ch:需要用扩展INT 13h访问的FAT32分区 0000:065E 7405 JZ 0665 ;0Ch类型的分区转0665h先行预处理 0000:0660 3AC4 CMP AL,AH ;0Bh:用传统INT 13h就可以访问的FAT32分区 0000:0662 752B JNZ 068F ;其他类型的分区转068Fh ; ; 0000:0664~0000:06A1:根据分区类型和分区表表项内容进行读取分区引导记录前的处理工作 0000:0664 40 INC AX ;★★★0Bh类型的分区由此开始处理,此条指令用意是清ZF位 0000:0665 C6462506 MOV BYTE PTR [BP+25],06 ;★★★0Ch类型的分区由此开始处理 ;为什么取值06,一时没有自圆我说的解释,请耐心几天吧。 0000:0669 7524 JNZ 068F ;请注意上面指令对ZF位的影响:0Bh类型分区转,0Ch则不转 ; 0000:066B~0000:068C这段代码仅当分区类型是0Ch、0Eh才有获得执行的机会 0000:066B BBAA55 MOV BX,55AA ;★★★0Eh类型的分区由此开始处理 0000:066E 50 PUSH AX ; 0000:066F B441 MOV AH,41 ;扩展INT 13h功能,检测BIOS是否已经支持扩展INT13h 0000:0671 CD13 INT 13 ;入口参数:BX=55AAh,DL=驱动器号,AH=41h 0000:0673 58 POP AX ;执行完恢复AX为060Eh 0000:0674 7216 JB 068C ;不支持则转 上一篇:扩展int13h调用详解(修正) 下一篇:自己编程实现多引导 |
|
|
 |
| 北京总部: 4006-505-808 |
| 上 海 部: 021-58358765 |
| 深 圳 部: 0755-83692929 |
| 浙 江 部: 13666673722 |
| 广 州 部: 020-83821091 |
| 重 庆 部: 023-86870422 |
| 昆 明 部: 15987117834 |
| 哈尔滨部: 13946167430 |
| 其它地区: 4006-505-808 | | | |
|
 |
|