📄 mycopy1.asm
字号:
.MODEL SMALL
.DATA
HSOURCE DW 0
HTARGET DW 0
ERRMSG DB 'Error occurs while processing.$'
USAGEMSG DB 'Usage:',0DH,0AH,'mycopy <source file> <target file>$'
FUGAI DB 'DO YOU WANT TO COVER THE EXISTED FILE?[Y/N] $'
SOURCE DB 80h dup(0)
TARGET DB 80h dup(0)
BUFFER DB 8000H DUP(?)
.STACK 100H
.CODE
HUICHE MACRO ;用以回车的宏
MOV AH, 0EH
MOV AL, 0DH
INT 10H
MOV AL, 0AH
INT 10H
ENDM
START:
MOV AX, @data
MOV DS, AX
MOV AH, 62H
INT 21H
MOV ES, BX
MOV AL, ES:[80H] ;初始化,取命令行参数长度
MOV DI, 0
XOR AH, AH
XOR SI, SI
CMP DI, AX
JZ Usage
TrimLeft: ;去掉前导空格
INC DI
MOV CL, ES:[DI+81H]
CMP CL, 20H
JZ TrimLeft
SourceFileName: ;取源文件名
MOV CL, ES:[DI+81H]
CMP CL, 20H
JZ TrimMiddle
CMP DI, AX
JZ USAGE ;只键入一个参数
MOV SOURCE[SI],CL
INC DI
INC SI
JMP SourceFileName
TrimMiddle: ;去掉中间的空格
INC DI
MOV CL, ES:[DI+81H]
CMP CL, 20H
JZ TrimMiddle
XOR SI, SI
TargetFileName: ;取目标文件名
CMP DI, AX
JZ JUDGE
MOV CL, ES:[DI+81H]
MOV TARGET[SI],CL
INC DI
INC SI
JMP TargetFileName
JUDGE: LEA DX, TARGET ;判断目标是否存在
MOV AX, 3D00H
INT 21H
JC CopyFile
ASK: LEA DX, FUGAI
MOV AH, 09H
INT 21H
MOV AH, 00H
INT 16H
MOV AH, 0EH
INT 10H
CMP AL, 'Y'
JZ CopyFile
CMP AL, 'y'
JZ CopyFile
CMP AL, 'N'
JZ QUIT
CMP AL, 'n'
JZ QUIT
HUICHE
JMP ASK
CopyFile:
LEA DX, TARGET ;创建文件
MOV AH, 3CH
MOV CX, 0
INT 21H
LEA DX, SOURCE ;打开源文件
MOV AX, 3D00H
INT 21H
JB ERROR
MOV HSOURCE, AX
LEA DX, TARGET ;打开目标文件
MOV AX, 3D01H
INT 21H
JB ERROR
MOV HTARGET, AX
COPY:
MOV AH, 3FH ;读源文件
MOV BX, HSOURCE
MOV CX, 8000H
LEA DX, BUFFER
INT 21H
JB ERROR
MOV CX, AX
MOV AH, 40H ;写目标文件
MOV BX, HTARGET
LEA DX, BUFFER
INT 21H
JB ERROR
CMP AX, 8000H ;是否结束了?
JZ COPY
MOV AH, 3EH ;关闭文件
MOV BX, HSOURCE
INT 21H
MOV AH, 3EH
MOV BX, HTARGET
INT 21H
QUIT:
MOV AH, 4CH
INT 21H
ERROR:
LEA DX, ERRMSG
MOV AH, 9
INT 21H
JMP QUIT
Usage:
LEA DX, USAGEMSG
MOV AH, 9
INT 21H
JMP QUIT
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -