新的引导程序清单

Author: 南京燕士海 Date: 1993-11-05

        新的引导程序清单
        1299:0100  FACL  I
        1299:0101  2BC0  SUB  AX,AX
        1299:0103  8ED  0  MOV  SS,AX
        1299:0105 8EC0 MOV ES, AX
        1299:0107 8ED8 MOV DS, AX
        1299:0109 B8007CMOV AX, 7C00
        1299:010C8BE0 MOV SP, AX
        1299:010E FBSTI
        1299:010F 8BF0 MOV SI, AX;代码下移200H
        1299:0111 BF007E MOV DI, 7E00
        1299:0114 FCCLD
        1299:0115 B90001 MOV CX, 0100
        1299:0118 F3 REPZ
        1299:0119 A5 MOVSW
        1299:011A E90002 JMP 031D
        1299:011DB80102 MOV AX, 0201;读取原主引导记录
        1299:0120 B90300 MOV CX, 0003
        1299:0123 BA8000 MOV DX, 0080
        1299:0126 BB007CMOV BX, 7C00
        1299:0129 CD13  INT 13
        1299:012B90 NOP
        1299:012C90 NOP
        1299:012D90 NOP
        1299:012E BF0200 MOV DI, 0002 ; 二次机会输入PASSWORD
        1299:0131 BE0C7F MOV SI, 7F0C
        1299:0134 B90C00 MOV CX, 000C
        1299:0137 ACLODSB
        1299:0138 BB0700 MOV BX, 0007
        1299:013BB40E MOV AH, 0E
        1299:013DCD10 INT 10
        1299:013F E2F5 LOOP 0137
        ; 显示PASSWORD
        1299:0141 BE187F MOV SI, 7F18
        1299:0144 BD0300 MOV BP, 0003
        1299:0147 B400 MOV AH, 00
        1299:0149 CD16 INT 16
        1299:014B3804 CMP [SI] , AL
        ; 判断PASSWORD正确否
        1299:014D7506 JNZ 0155
        1299:014F 46 INCSI
        1299:0150 4DDECBP
        1299:0151 75F4 JNZ  0147
        1299:0153 EB0E JMP 0163
        1299:0155 BB0700 MOV BX, 0007
        1299:0158 B40E MOV AH, 0E
        1299:015ABO58 MOV AL, 58
        1299:015CCD10 INT 10
        1299:015E 4F DECDI
        1299:015F 75D0 JNZ 0131
        1299:0161 EBFE JMP 0161
        ; PASSWORD错, 死机
        1299:0163 BE4C00 MOV SI, 004C
        ; 填充INT 13跳转入口
        1299:0166 BFC77E MOV DI, 7EC7
        1299:0169 ADLODSW
        1299:016AABSTOSW
        1299:016BADLODSW
        1299:016CABSTOSW
        1299:016DBE2000 MOV SI, 0020
        ; 填充INT8跳转入口
        1299:0170 BFFD7E MOV DI, 7EFD
        1299:0173 ADLODSW
        1299:0174 ABSTOSW
        1299:1075 ADLODSW
        1299:0176 ABSTOSW
        1299:0177 BF0000 MOV DI, 0000
        ; INT13和INT8增添部分推向内存高端
        1299:017ABEB17E MOV SI, 7EB1
        1299:017DB95200 MOV CX, 0052
        1299:0180 8A04 MOV AL, [SI]
        1299:0182 1E PUSH DS
        1299:0183 50 PUSH AX
        1299:0184 B80090 MOV AX, 9000
        1299:0187 8ED8 MOV DS, AX
        1299:0189 58 POP AX
        1299: 018A8805 MOV [DI] , AL
        1299:018C1F POP DS
        1299:018D47 INCDI
        1299  018E 46 INCSI
        1299:018F E2EF LOOP 0180
        1299:0191 BB4C00 MOV BX, 004C
        ; 修改INT13向量
        1299:0194 D80000 MOV AX, 0000
        1299:0197 8907 MOV [BX] , AX
        1299:0199 B80090 MOV AX, 9000
        1299:019C894702 MOV [BX+ 02] , AX
        1299:019F B81A000 MOV AX, 001A
        1299:01A2 BB2000 MOV BX, 0020
        ; 修改INT8向量
        1299:01A5 8907 MOV [BX] , AX
        1299:01A7 B80090 MOV AX, 9000
        1299:01AA 894702 MOV [BX+ 02] , AX
        1299:01ADEB52 JMP 0201
        1299:01AF 90 NOP
        1299:01B0 90 NOP
        1299:01B1 9CPUSHF
        ; INT13补充内容
        1299:01B2 81FA8000 CMP DX, 0080
        1299:01B6 750DJNZ 01C5
        1299:01B8 83F901 CMP CX, + 01
        1299:01BB7508 JNZ 01C5
        1299:01BD80FC02 CMP AH, 02
        1299:01C0 7503 JNZ 01C5
        1299:01C2 B90300 MOV CX, 0003
        1299:01C5 9DPOPF
        ; 跳转到INT13入口
        1299:01C6 EA00000000 JMP 0000:0000
        ; 地址待填
        1299:01CB9CPUSHF
        ; INT8补充内容
        1299:01CC1E PUSH DS
        1299:01CD56 PUSH SI
        1299:01CE 57 PUSH DI
        1299:01CF 50 PUSH AX
        1299:01D0 31C0 XOR AX, AX
        1299:01D2 8ED8 MOV DS, AX
        1299:01D4 06 PUSH ES
        1299:01D5 8EC0 MOV ES, AX
        1299:01D7 BE8400 MOV SI, 0084
        1299:01DAADLODSW
        1299:01D8 3D6014 CMP AX.1460
        ; 判断INT21偏移地址是否正确
        1299:01DE 7506 JNZ 01E6
        1299:01E0 ADLODSW
        1299:01E1 3D7002 CMP AX, 0270
        ; 判断INT21段地址
        1299:01E4 7410 JZ 01F6
        1299:01E6 B80703 MOV AX, 0E07
        ; 报警  1299: 01E9 CD10 INT 10
        1299:01EBBF8400 MOV DI, 0084
        1299:01EE B86014 MOV AX, 1460
        1299:01F1 ABSTOSW
        1299:01F2 B87002 MOV AS, 0170
        1299:01F5 ABSTOSW
        
        ; 重新填充INT21向量
        1299:01F6 07 POP ES
        1299:01F7 58 POP AX
        1299:P1F8 5F POP DI
        1299:01F9 5E POP SI
        1299:01FA1F POP DS
        1299:01FB9DPOPF
        ; 跳转到INT8入口
        1299: 01FC EA00000000 JMP 0000:0000
        ; 地址待填
        1299: 0201 B80D0E MOV AX, 0E0D
        1299: 0204 CD10 INT 10
        1299: 0206 EA007C0000 JMP 0000: 7C00
        ; 跳转到原主引导记录
        该程序的安装过程为,首先执行程序1,MOVMBT.COM,将硬盘主引导程序搬至0头0柱3扇区,然后执行程序2,SETNMBT.COM,就可以将新主引导程序写入0头0柱1扇区。以后硬盘启动后便自动执行新主引导程序的各个功能。
        在安装完新主引导程序后,如果软盘启动想进入硬盘,可以执行程序3,UNLOCKH.COM,程序4,LOCKH.COM可以重新锁住硬盘。程序1:MOVMBT.COM
        mov  ax,0201h
        mov  dx,0080h
        movbx,200h
        movcx,0001  int13h
        movax,0301h  int13h  int20h
        程序2: SETNMBT.COM100 dbnmbt, bat, 0
        mov dx, 100h
        mov ax, 3d00h
        mov int 21hh
        mov bx, ax
        mov dx, 200h
        mov cx, 200h
        mov ah, 3fh
        int 21h
        mov ah, 3eh
        int 21h
        mov ax, 0301h
        mov cx, 0001h
        mov dx, 0080h
        mov bx, 200h
        int 13h
        int 20h
        程序3: UNLOCKH.COM
        mov ax, 0201h
        mov dx, 0080h
        mov cx, 0001h
        mov bx, 200h
        int 13h
        mov al, 04h
        mov [3c2] , al
        mov ax, 0301h
        int 13h
        int 20h
        注: 该程序必须在软盘启动后执行。
        程序4: LOCKH.COM
        mov ax, 0201h
        mov dx, 0080h
        mov cx, 0001h
        mov bx, 200h
        int 13h
        mov al, 0
        mov [3c2] , al
        mov ax, 0301h
        int 13h
        int 20h
        注: 该程序也必须在软盘启动后执行。
        (南京燕士海)