?? 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 + -