| 比较详细的MBR的分析 |
 |
作者: 来源: 日期:2007-5-17 11:17:11 点击次数: |
|
; ; 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 ; 0000:06CF EBD5 JMP 06A6 ; ; ; 0000:06D1~0000:06D8分区引导记录装入失败时的处理 0000:06D1 4F DEC DI ;计数器减1 0000:06D2 74E4 JZ 06B8 ;五次读盘均未成功则转错误处理(注意这时SI=0) 0000:06D4 33C0 XOR AX,AX ;置功能号 0000:06D6 CD13 INT 13 ;复位磁盘系统 0000:06D8 EBB8 JMP 0692 ;再读 ; ; 0000:06DA 00 00 80 49 12 00 ...I.. ; ; 0000:06E0~0000:070C:使用扩展INT 13h功能读取分区引导记录的子程序 上一篇:扩展int13h调用详解(修正) 下一篇:自己编程实现多引导 |
|
|
 |
| 北京总部: 4006-505-808 |
| 上 海 部: 021-58358765 |
| 深 圳 部: 0755-83692929 |
| 浙 江 部: 13666673722 |
| 广 州 部: 020-83821091 |
| 重 庆 部: 023-86870422 |
| 昆 明 部: 15987117834 |
| 哈尔滨部: 13946167430 |
| 其它地区: 4006-505-808 | | | |
|
 |
|