|
北京总部: 4006-505-646 |
天 津 部: 4006-505-646 |
上 海 部: 4006-505-646 |
深 圳 部: 4006-505-646 |
广 州 部: 4006-505-646 |
重 庆 部: 4006-505-646 |
南 京 部: 4006-505-646 |
其它地区: 4006-505-646 | | |
|
|
|
MBR的详细分析
; 照扩展读方式读分区引导扇区时能正确跳转到相应的处理程序中。 0000:0681 8AE0 MOV AH,AL ;分区类型→AH 0000:0683 885624 MOV [BP+24],DL ;保存驱动器号→[BP+24] 0000:0686 C706A106EB1E MOV WORD PTR [06A1],1EEB ;修改0000:06A1处代码为"JMP 06C1" 0000:068C 886604 MOV [BP+04],AH ;注意:如果扩展INT13h不能使用则A改分区类型为06,但如果 ;扩展INT13h能使用,则仍保持原分区类型不变 0000:068F BF0A00 MOV DI,000A ;★★★其它类型分区由此开始处理。此条指令初始化计数器 0000:0692 B80102 MOV AX,0201 ;AH:读操作,AL:读取1个扇区的内容 0000:0695 8BDC MOV BX,SP ;SP=7C00→BX,指定分区引导记录装入内存的位置偏移 0000:0697 33C9 XOR CX,CX ;CX清零 0000:0699 83FF05 CMP DI,+05 ;注意5 0000:069C 7F03 JG 06A1 ;大于则转去读由分区表指定的分区引导扇区 0000:069E 8B4E25 MOV CX,[BP+25] ;小于则证明所读分区表指定的引导扇区无合法的引导记录, ;改按???再读,毕竟多一种选择多一次机会嘛!;) ; 以下标有①②者请注意它们的地址都是一样的,就是说实际运行中只可能是二者之一,但为了分析之方便,我 ; 把两者都列了出来以供对比,阅读时千万别看成是两条指令了啊! ①0000:06A1 034E02 ADD CX,[BP+02] ;获取分区引导扇区所在的柱面号和物理扇区号 ②0000:06A1 EB1E JMP 06C1 ;如果分区类型是0Ch、0Eh而且扩展读能使用则执行该指令 ; ; 0000:06A4:将可引导分区的分区引导记录装入内存指定区域 ; 入口参数:AH=功能号,02为读盘操作;AL=一次读取的扇区数 ; ES:BX=读入内存的起始地址 ; CH=10位柱面号的低8位;CL:高两位是10位柱面号的高两位,低6位是物理扇区号 ; DH=磁头号;DL=驱动器号,最高位(即位7)为0是软盘,为1是硬盘 | |
|
上一篇:扩展int13h调用详解(修正) |
下一篇:NBU 的tune | |
| | |