MBR的详细分析
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功能读取分区引导记录的子程序 ; 调用时,SP=7BFE。这段程序利用压栈寄存器方式构造了一个磁盘地址包,请注意体会。另外,0000:06FC处 ; 的一条指令就释放了几乎全部由本段程序占用的栈空间,构思之巧妙,绝对需要我们学习! ; 所以,分析该段程序,一个重点应放在栈的变化上。 0000:06E0 56 PUSH SI ;保存SI——注意,这次压栈并不构造磁盘地址包 0000:06E1 33F6 XOR SI,SI ;清零 0000:06E3 56 PUSH SI ; 0000:06E4 56 PUSH SI ; 0000:06E5 52 PUSH DX ; 0000:06E6 50 PUSH AX ;以上四条指令压栈的是扇区LBA号码*2 0000:06E7 06 PUSH ES ;压栈内存目标缓冲区首址段址 0000:06E8 53 PUSH BX ;压栈内存目标缓冲区首址偏移 0000:06E9 51 PUSH CX ;压栈所读扇区数 0000:06EA BE1000 MOV SI,0010 ;注意SI的高8位对应着磁盘地址包的保留字节,必须为0 0000:06ED 56 PUSH SI ;压栈磁盘地址包包长,执行完本条指令一个包已经构造完毕
|