|
楼主 |
发表于 2009-11-21 18:44:20
|
显示全部楼层
反汇编第1.1步
0000061b: ( ): mov bp, 0x07be ; bdbe07 ;7BE处是MBR的数据区,是BOOTINDICATOR,准备读取07be处的引导区标志
0000061e: ( ): mov cl, 0x04 ; b104 ;可以在4个分区的任意一个分区启动,所以这里设定检测次数为4
00000620: ( ): cmp byte ptr ss:[bp], ch ; 386e00 ;CH=00,SS:[BP]=XX的不确定值
00000623: ( ): jl .+0x0009 ; 7c09 ;如果SS:[BP]最高位为1则表示找到一个启动有效分区,并跳转到062e,查看其它分区还有没有重复的启
动标记
00000625: ( ): jnz .+0x0013 ; 7513 ;如果标志不为0,并且最高位也无效,则跳转到063a执行错误提示
00000627: ( ): add bp, 0x0010 ; 83c510 ;检查下一个分区的引导标志
0000062a: ( ): loop .+0xfff4 ; e2f4 ;跳到0620处循环
0000062c: ( ): int 0x18 ; cd18 ;没有启动分区则调用INT18H显示出错信息,如果CMOS中设置了其他启动媒体,则尝试从其它媒体启动
0000062e: ( ): mov si, bp ; 8bf5 ;使SI也指向当前分区的引导标志记录位置
00000630: ( ): add si, 0x0010 ; 83c610 ;指向下一个分区的引导标志记录位置
00000633: ( ): dec cx ; 49 ;循环次数减1,当DEC的结果为0时,会置位TF标志寄存器的ZR标志,影响后面JZ指令的执行
00000634: ( ): jz .+0x0019 ; 7419 ;如果后面的3个分区都检测完成,则CX会被减到0,同时ZR标志被置有效,程序将跳转到064d执行
00000636: ( ): cmp byte ptr ds:[si], ch ; 382c ;继续判断下一个分区的引导标志,这里0才是合法的标记,表示不存在第2个启动分区了
00000638: ( ): jz .+0xfff6 ; 74f6 ;如果标志为0则跳转到0630,表示暂未发现重复的启动标志,返回进行下一个判断循环
[ 本帖最后由 cxdzxc 于 2009-11-22 09:15 编辑 ] |
|