⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mycopy1.asm

📁 汇编程序,实现文件的考贝,可通过命令行参数输入文件名,并能很好地外理大文件
💻 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 + -