最完整的 DOS 6.22 磁区备份程式
;Origin:............本..程..式..开..始......................;
;┌───────────────────────────┐;
;│格式宣告区--------------------------------------------│;
;└───────────────────────────┘;
TITLE Sky Wing System Universal Utility Tool Box ;标题,天翼系统万用多用途工具箱 字元长度限 60 字
; INCLUDE PASSWORD.H ; 引入密码标头档 Password.H
; INCLUDELIB PASSWORD.LIB ; 指定与密码程式库 Password.LIB 连结
; INCLUDELIB MUSIC.LIB ; 指定与音乐程式库 Music.LIB 连结
INCLUDE WINDOWS.H ; 引入视窗标头档 Windows.H
INCLUDELIB WINDOWS.LIB ; 指定与视窗程式库 Windows.LIB 连结
INCLUDE BIOS.INC ; 引入 BIOS.INC 公用巨集定义模组
INCLUDE DOS.INC ; 引入 DOS.INC 公用巨集定义模组
INCLUDE DOS.MAC ; 引入 DOS.H 公用巨集定义模组
.MODEL SMALL ;宣告一个小型模组 定义记忆体模式
; .286 ;
.STACK 100h ;
;─> ─────────────────────────────────────
.DATA ; 资料节段
;─> ─────────────────────────────────────
MyPSP DW ? ; 本程式执行时的 PSP 节段值
VirFile_C DB 7,7,0Ah,0Dh,' 请注意!! 你的档案可能遭到病毒修改 !!',0Ah,0Dh,'$'
VirFile_E DB 7,7,0Ah,0Dh,' Warring!! SKY.EXE maybe encounter Virus modifyed',0Ah,0Dh,'$'
Not_Parameter DB 7,0Ah,0Dh,' Warring!! SKY.EXE Not_Parameter$' ; 没有参数
;───────────────────────────────────────
Buffer DB 512 DUP (0) ;缓冲区起始偏移址
Buffer1 DB 512 DUP (0) ;缓冲区起始偏移址
Buffer2 DW 0 ;
DW 5 DUP (?) ;
PATH_1 DW ? ;
HANDLE DW ? ;存放档案代号 DW 0 , DB 0
Part_sav DB 'Partit.PAT',0 ; 档名
Boot_Sav DB 'BOOT.BOT',0 ; 档名
Par_Msg DB 11,'姹迋迋迋迋迋迋迋迋迋迋迋迋迋迋?
DB 0FFh,11,'? Partition table Check V1.00 ',11,'?
DB 0FFh,11,'? Copyright (C) By:upside. ',11,'?
DB 0FFh,11,'迋迋迋迋迋迋迋迋迋迋迋迋迋迋?'
Boot_Msg DB 11,'姹迋迋迋迋迋迋迋迋迋迋迋迋迋迋?
DB 0FFh,11,'? Boot area table Check V1.00 ',11,'?
DB 0FFh,11,'? Copyright (C) By: upside. ',11,'?
DB 0FFh,11,'迋迋迋迋迋迋迋迋迋迋迋迋迋迋?'
Chk_Err DB 7,0Ah,0Dh,'WARNING !! Your System Table had been modifyed$'
Chk_Ok DB 7,0Ah,0Dh,' System Table Check Ok !!$'
Reput_OK DB 7,0Ah,0Dh,' System Table Reput Ok !!$'
;───────────────────────────────────────
FileName_1 DB 'SKY.EXE',0 ; 档案名称
;───────────────────────────────────────
Import_Password DB 7,0Ah,0Dh,'请输入密码:$' ; 输入密码
Import_err DB 7,10,13,'你输入错误的密码!!$' ; 错误的密码
Password DB ' ; 内建密码
;───────────────────────────────────────
Wnd01_Data DB '╔═════════════════╗' ;视窗资料内容
DB '║ 天 翼 工 作 室 ║'
DB '╠════════╤════════╣'
DB '║A 硬碟分割表备份│F 启动磁区表备份║' ;功能表选项内容
DB '║B 硬碟分割表回存│G 启动磁区表回存║'
DB '║C │H ║'
DB '║D │I ║'
DB '║E │J 全能系统加速 ║'
DB '╠════════╧════════╣'
DB '║制作者: upside <02/17/1999>║'
DB '╟─────────────────╢'
DB '║ < 敬 请 尊 重 智 慧 财 产 权 > ║'
DB '║ ║'
DB '╚═════════════════╝'
Wnd01 Window <Wnd01_Data,20,06,38,14,3Fh,SHADOW_ON,19h> ;视窗结构体变数
; 视窗资料内容 X Y 宽 高 属 阴影状态 阴影属性
Menu01 Menu <22,09,02,05,10,16,01,02,00,4fh,3Fh,00,01,01,00,00,POPUP>
; 行 个 选 选 起
; 行 始
Task_table Label Word
DW SavePart,SaveBoot,RePart_1,ReBoot_1,NullTask
; 1 A 6 F 2 B 7 G 3 C
DW NullTask,NullTask,NullTask,NullTask,Quicken
; 8 H 4 D 9 I 5 E 10 J
; 音乐 DW NullTask,_play_music,NullTask,NullTask,NullTask
;───────────────────────────────────────
SavePart_OK DB ' < 硬 碟 分 割 表 备 份 成 功 > '
SavePart_WIN Window <SavePart_OK,22,17,34,01,0DFh,SHADOW_Off,NULL>
; 显 行
;───────────────────────────────────────
REPART_OK DB ' < 硬 碟 分 割 表 回 存 成 功 > '
REPART_WIN Window <REPART_OK,22,17,34,01,0DFh,SHADOW_Off,NULL>
;───────────────────────────────────────
SaveBoot_OK DB ' < 启 动 磁 区 表 备 份 成 功 > '
SaveBoot_WIN Window <SaveBoot_OK,22,17,34,01,0DFh,SHADOW_Off,NULL>
;───────────────────────────────────────
ReBoot_OK DB ' < 启 动 磁 区 表 回 存 成 功 > '
ReBoot_WIN Window <ReBoot_OK,22,17,34,01,0DFh,SHADOW_Off,NULL>
;───────────────────────────────────────
Quicken_OK DB ' < 系 统 加 速 程 式 成 功 > '
Quicken_WIN Window <Quicken_OK,22,17,34,01,0DFh,SHADOW_Off,NULL>
;───────────────────────────────────────
Joking_OK DB ' < 敬 请 尊 重 智 慧 财 产 权 > '
Joking_WIN Window <Joking_OK,22,17,34,01,0DFh,SHADOW_Off,NULL>
;───────────────────────────────────────
Screen DD 00000h ; 萤幕
;───────────────────────────────────────
MSG DB 'Made By SY BF ' ; 秀出作者ID
Save DB 30 DUP (0) ; 存放字型码,因为可重覆使用 所以只要 30 byte
ET_FILE DB 'C:\ET3\STDFONT.15',00h ; 倚天 16*15 字型档
NO_Chinese_C DB 0h,0h,'本程式需倚天中文系统' ;
End_Chinese DB 0h,0h,'天翼工作室感谢您' ; 里面的中文在程式中乃是以Big-5码的型式存放
;─> ─────────────────────────────────────
.CODE ; 程式节段
.STARTUP ; 程式初始化
;─> ─────────────────────────────────────
;┌───────────────────────────┐;
;│防止DEBUG的单步追踪功能-------------------------------│;
;└───────────────────────────┘;
;
; 玩过组合的人都知道电脑有个旗标 ,俗称 TF 旗标 ,将此旗标关掉 ,就不会有
; 单步执行的功能了。
; 因为当此位元为 1 时 ,电脑每执行一个指令都会触动 INT_01 ,而 DEBUG 就
; 是利用它来达到单步执行 ,在 BIOS 内无法下中断点(INT_03) ,所以在要侦错
; BIOS 下只能靠 TF 来追踪程式执行过程了。
;
; 如何关闭此旗标呢 ?
; 我们知道旗标有 16Bit , Bit8 即为TF旗标 :
; PUSHF ; ┐将旗标状态传回到 AX 内
; POP AX ; ┘
; AND AX,0FEFFh ; ─ 清掉 TF 旗标
; PUSH AX ; ┐将新旗标写回
; POPF ; ┘
;
; INT 1h ; 中断 1h 防 DEBUG 单步追踪
; INT 3h ;
; INT 7h ; 中断 7H 防 S-ICE 单步追踪
; 最后甚至当掉使用者的键盘 ,将键盘指向自己的程式 ,或是关掉键盘 ,
; 有的程式设计师为了省功 ,都用最简单的方法当掉键盘。
;
; Then I'm re-assembling with INT 3h squeezed in there:
;
; MOV AX,5Ah ; sample code to break into
; DB 0CCh ; or INT 3h, whatever.
; OUT 82551pa,AL
;
; And this would be the INT 3h handler (simple crude sample) :
;───────────────────────────────────────
; MOV AH,2Ah ; 取得系统时间 (CX=年 1980~2099 , DH=月, DL=日)
; MOV DX,0520h ;
; INT 21h ; DOS功能中断
;
; CMP DX,0520h ; 比较是否为10月10日
; JE ChkPart ; 是...... 不是,跳至下一行程式码执行....
;┌───────────────────────────┐;
;│档案长度侦测------------------------------------------│;
;└───────────────────────────┘;
MOV AH,3Dh ; 开档AX > AH 2bytes
MOV DX,OFFSET FileName_1 ; FileName_1 SKY.EXE
INT 21h ;
;
XCHG AX,BX ; MOV BX,AX
MOV AX,4202h ; 移动档案的写指标
XOR CX,CX ; 位移的低位元组
CWD ; 位移的高位元组
INT 21h ;
;─> $$$───────────────────────────────────
CMP AX,1E55h ; 测试本 ..
访客只能看到部份内容,免费 加入会员 或由脸书 Google 可以看到全部内容