MBR的详细分析
0000:06A4 CD13 INT 13 ;读分区引导记录到0000:7C00起始的区域 ; ; 0000:06A6 7229 JB 06D1 ;不成功转 0000:06A8 BE2D07 MOV SI,072D ;错误信息字符串偏移→SI 0000:06AB 813EFE7D55AA CMP WORD PTR [7DFE],AA55 ;分区引导记录合法吗? 0000:06B1 745A JZ 070D ;合法则转(这是主引导记录唯一的正常出口) 0000:06B3 83EF05 SUB DI,+05 ;不合法则为换读其他扇区做准备 0000:06B6 7FDA JG 0692 ;只有一次换读扇区的机会! ; ; 0000:06B8~0000:06BF:错误预处理 0000:06B8 85F6 TEST SI,SI ;测试SI值是否为0,其意义在于确定该显示哪条信息 0000:06BA 7583 JNZ 063F ;不为0则转错误处理,显示“Missing operating system” 0000:06BC BE1A07 MOV SI,071A ;错误信息字符串偏移→SI 0000:06BF EB8A JMP 064B ;转错误处理,显示“加载操作系统时出错” ; ; 0000:06C1~0000:06CF:整理扩展读所需入口参数,然后调用扩展读子程序 ; 这段代码只有在以扩展读方式读取分区引导记录时才有机会获得执行 0000:06C1 98 CBW ;转换字节AL为字AX,执行后,AX中是一次要读的扇区数 0000:06C2 91 XCHG CX,AX ;AX→CX,CX→AX,执行后,CX中是一次要读的扇区数 0000:06C3 52 PUSH DX ; 0000:06C4 99 CWD ;将字AX转换为双字→DX,AX 0000:06C5 034608 ADD AX,[BP+08] ; 0000:06C8 13560A ADC DX,[BP+0A] ;执行后,DX:AX=LBA绝对物理扇区号 0000:06CB E81200 CALL 06E0 ;调用扩展读子程序 0000:06CE 5A POP DX ;
|