新的引导程序清单
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,UNLOCKH.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 dbnmbt, 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
注: 该程序也必须在软盘启动后执行。
(南京燕士海)