0635 7416 JZ GOOD_PARTITION_TABLE 搜索完毕,剩下的分区中无活动分区,分区表正常
0637 382C CMP [SI],CH
0639 74F6 JZ ONLY_ONE_ACTIVE_PARTITON_SEARCH_LOOP 如果还有活动分区则继续向下执行
INVALID_PARTITION_TABLE:
063B BE1007 MOV SI,0710 SI指向要显示的错误信息处
HANG_MACHINE_LOOP:
063E 4E DEC SI
DISPLAY_ERROR_MESSAGE_LOOP:
063F AC LODSB
0640 3C00 CMP AL,00
0642 74FA JZ HANG_MACHINE_LOOP
;到字符串尾时进入死循环,停止运行
0644 BB0700 MOV BX,0007
0647 B40E MOV AH,0E
0649 CD10 INT 10 显示错误信息
DISPLAY_ERROR_MESSAGE_LOOP_ALIAS:
064B EBF2 JMP DISPLAY_ERROR_MESSAGE_LOOP
GOOD_PARTITION_TABLE:
064D 894625 MOV [BP+25],AX
tmpvar=BP+25处清零,作为临时变量
0650 96 XCHG SI,AX SI=0
0651 8A4604 MOV AL,[BP+04]
;读分区类型入AL
0654 B406 MOV AH,06
0656 3C0E CMP AL,0E 类型 WIN95:
DOS 16-bit FAT, LBA-mapped
0658 7411 JZ TYPE_WIN95_DOS_16BIT_FAT_LBA
065A B40B MOV AH,0B
065C 3C0C CMP AL,0C 类型 WIN95 OSR2 32-bit FAT, LBA-mapped
065E 7405 JZ TYPE_WIN95_OSR2_32BIT_FAT_LBA
0660 3AC4 CMP AL,AH 类型 WIN95 OSR2 32-bit FAT
0662 752B JNZ TYPE_DEFAULT
0664 40 INC AX AX=0B0C
TYPE_WIN95_OSR2_32BIT_FAT_LBA:
0665 C6462506 MOV BYTE PTR [BP+25],06
;tmpvar=06
0669 7524 JNZ TYPE_DEFAULT
;这里有点问题,这个转移应该肯定不成立?
TYPE_WIN95_DOS_16BIT_FAT_LBA:
066B BBAA55 MOV BX,55AA
066E 50 PUSH AX
066F B441 MOV AH,41
0671 CD13 INT 13 int 13h扩展功能的检测,
IBM/MS INT 13 Extensions - INSTALLATION CHECK
0673 58 POP AX
0674 7216 JB INT13H_EXTENSION_UNSUPPORTED
;CF=1 - 不支持int 13h扩展功能
0676 81FB55AA CMP BX,AA55 BX不为AA55 - 不支持int 13h扩展功能
067A 7510 JNZ INT13H_EXTENSION_UNSUPPORTED
067C F6C101 TEST CL,01 CL不为1 - 不支持int 13h扩展功能
067F 740B JZ INT13H_EXTENSION_UNSUPPORTED
硬盘MBR全面分析(3) www.jdcok.com/anli/5/589.html