MBR的详细分析
0000:06EE 8BF4 MOV SI,SP ;规定磁盘地址包偏移指针,这时SP=7BEA 0000:06F0 50 PUSH AX ;保存AX 0000:06F1 52 PUSH DX ;保存DX 0000:06F2 B80042 MOV AX,4200 ;置扩展读功能号 0000:06F5 8A5624 MOV DL,[BP+24] ;取驱动器号,参照0000:0683 ; 入口参数:AH=功能号,02为读盘操作;DL=驱动器号 ; DS:SI=16字节磁盘地址包——第0字节:包长度(固定为10h);第1字节:保留,必须为0; ; 第2、3字节:所读扇区数;第4~5字节:内存目标缓冲区首址偏移; ; 第6~7字节:内存目标缓冲区首址段址; 第8~15字节:扇区LBA号码 ; 出口参数:成功则AH=0;错误则AH=错误代码 0000:06F8 CD13 INT 13 ;执行扩展读操作 0000:06FA 5A POP DX ; 0000:06FB 58 POP AX ; 0000:06FC 8D6410 LEA SP,[SI+10] ;7BEA+10h=7BFA→SP(注意是取偏移而不是取单元内容) 0000:06FF 720A JB 070B ;扩展读不成功转 0000:0701 40 INC AX ; 0000:0702 7501 JNZ 0705 ; 0000:0704 42 INC DX ;AX加1溢出时(比如0FFFFh+1)DX才加1 0000:0705 80C702 ADD BH,02 ;调整BX,使偏移量增加512字节(刚好一扇区) 0000:0708 E2F7 LOOP 0701 ;0701~0708一段代码暂未明白其真实意图! 0000:070A F8 CLC ; 0000:070B 5E POP SI ;
|