引导扇区代码分析:07C0:0000FAcli;禁止中断07C0:000133C0xorax,ax07C0:00038ED0movss,ax;初始化运行堆栈,将 SS:SP指向运行代码前07C0:0005BC007Cmovsp,7C0007C0:0008FBsti;允许中断07C0:00098CC8movax,cs07C0:000B8ED8movds,ax;将 DS指向 CS相同地址,此处操作比较浪费,只用了一次07C0:000D52pushdx;引导扇区运行时 DX保存当前引导磁盘号;下面几条指令用于取得装入偏移地址,由于不能直接对 IP进行 mov指令;所以使用一条 CALL指令利用堆栈将 IP取出07C0:000EE80000call0011;执行一条函数调用指令,从而将下一条指令的地址压入堆栈07C0:00115Epopsi;取出刚刚压入的地址07C0:001281EE1100subsi,0011;减掉偏转地址得到实际的开始偏移07C0:00167412je002A;如果偏移为零跳转;判断装入地址是否为 0000:7C00如果是则使用远跳转进行地址转换到 003707C0:001881FE007Ccmpsi,7C00;装入偏移是否为 7C0007C0:001C7575jne009307C0:001E8CC8movax,cs;取得装入段地址,此句多余,见000907C0:00203D0000cmpax,0000;装入段地址是否为 000007C0:0023757Fjne00A407C0:0025EA3700C007jmp0037;使用远跳转指令进行地址转换;判断装入地址是否为 0000如果是则直接进行运行到 003707C0:002AC606AE0133movbyteptr[01AE],33;修改错误代码为 "3",意义为装载地址错误07C0:002F90nop07C0:00308CC8movax,cs;多余,同 001E07C0:00323DC007cmpax,07C0;装入段地址是否为 07C007C0:0035757Ejne00B5;前面这段代码用于解决不同系统装入地址的问题,合法地址为 0000:7C00或 07C0:0000;如果地址不正确,则进行错误处理,运行到此处地址应全部转换为 07C0:003707C0:00378CC8movax,cs;取什么取,一定是07C0了07C0:00398ED8movds,ax;这次才真的有用,见000B07C0:003BC606AE0134movbyteptr[01AE],34;修改错误代码为"4",意义为非法引导盘07C0:004090nop07C0:004180FA80cmpdl,80;查看当前引导磁盘号是否小于80,即不是硬盘或CDROM07C0:0044726Fjb00B5;如果是则转移错误处理07C0:0046C606AE0135movbyteptr[01AE],35;修改错误代码为"5",意义为引导扇区非法或不完整07C0:004B90nop07C0:004CBBFE07movbx,07FE;BX指向引导扇区结尾标志07C0:004F8B07movax,[bx];取出标志07C0:00513D55AAcmpax,AA55;是否为AA5507C0:0054755Fjne00B5;如果不是,则转移错误处理;装载BOOTFIX.BIN并运行,显示 "PressanykeytobootfromCD";如果没有此文件则直接跳过07C0:00565Apopdx;恢复引导磁盘号07C0:005788169904...