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

📄 4_8_3.asm

📁 一个非常有用的汇编音乐程序
💻 ASM
字号:
NAME	SYCX2_8_3
STACK	SEGMENT	PARA	STACK	'STACK'
	DB	256	DUP(0)
STACK	ENDS
DATA	SEGMENT
FILEN	DB	21			; 文件名允许长度为20
	DB	?			; 实际文件名长度
	DB	20 DUP(?)		; 存新文件名
ERROP	DB	'Open file error!',0AH,0DH,'$'
ERRWR	DB	'Write file error!',0AH,0DH,'$'
ERRRD	DB	'Read file error!',0AH,0DH,'$'
ERRMV 	DB	'Move file pointer error!',0AH,0DH,'$'
INMSG1	DB	'Please input filename:',0AH,0DH,'$'
INMSG2	DB	'Please input char:',0AH,0DH,'$'
BUFIN	DB	0F00H DUP(0)
DATA	ENDS
CODE	SEGMENT
	ASSUME	CS:CODE,DS:DATA,SS:STACK
Start:	MOV	AX,	DATA		; 装填DS段寄存器
	MOV	DS,	AX
	MOV	AX,	STACK		; 装填SS段寄存器
	MOV	SS,	AX
	CALL	OPFILE			; DX指向存放要打开的文件名字符串
	MOV	AL,	0		; 以只读方式打开
	MOV	AH,	3DH		; 打开文件
	INT	21H
	JC	OPERR			; 打开出错,转OPERR
	MOV	BX,	AX		; 转存文件号
	MOV	SI,	0		; 置缓冲区相对指针
	MOV	DX,	OFFSET	BUFIN	; 置缓冲区首地址
	MOV	CX,	0F000H		; 设读出字节数
	MOV	AH,	3FH		; 将文件内容读出到缓冲区BUFIN,
	INT	21H			; 实际读出字节数在AX中
	JC	RDERR			; 读出错,转RDERR
	MOV	DI,	AX		; 保存实际读出字节数在DI中
	MOV	AH,	3EH		; 关闭文件
	INT	21H
	;
	CALL	OPFILE			; DX指向存放要打开的另一文件名字符串
	MOV	AL,	2		; 以读写方式打开
	MOV	AH,	3DH		; 打开文件
	INT	21H
	JC	OPERR			; 打开出错,转OPERR
	;
	MOV	BX,	AX		; 转存文件号
	MOV	CX,	0
	MOV	DX,	0		; CX:DX表示移动读写指针的位移量,
					; 设为0
	MOV	AL,	2		; 从文件尾开始移动CX:DX表示的位移量
	MOV	AH,	42H		; 移动指针到文件尾
	INT	21H 
	JC	MVERR			; 移动指针出错,转MVERR
	;
	MOV	DX,	OFFSET	BUFIN	; 置缓冲区首地址
	MOV	CX,	DI		; 实际读出字节数放CX中
	MOV	AH,	40H		; 写文件
	INT	21H
	JC	WRERR			; 写出错,转WRERR
	JMP	CLFILE			; 转关闭文件
	;
OPERR:	LEA	DX,	ERROP		; 显示打开文件出错的信息
	JMP	DISP1
RDERR:	LEA	DX,	ERRRD		; 显示读文件出错的信息
	JMP	DISP1
WRERR:	LEA	DX,	ERRWR		; 显示写文件出错的信息
	JMP	DISP1
MVERR:	LEA	DX,	ERRMV		; 显示移动文件指针出错的信息
DISP1:	MOV	AH,	09H				
	INT	21H
	JMP	ENDO
	;
CLFILE:	MOV	AH,	3EH		; 关闭文件
	INT	21H
ENDO:	MOV	AH,	4CH
	INT	21H
; 子程序OPFILE功能:准备打开用户指定的文件
; 出口:DX指向存放要打开的文件名字符串		
OPFILE	PROC						; 
	PUSH	AX
	PUSH	BX
	LEA	DX,	INMSG1		; 显示要求输入打开的文件名的信息
MOV	AH,	09H				
	INT	21H
	LEA	DX,	FILEN		; 输入文件名
	MOV	AH,	0AH				
	INT	21H
	;
MOV	BL,	FILEN+1			; 取文件名长度
	MOV	BH,	0
	MOV	FILEN[BX+2],BYTE PTR 0	; 文件名末尾添加0
	MOV	DL,	0DH		; 输出回车
	MOV	AH,	2				
	INT	21H
	MOV	DL,	0AH		; 输出换行,准备显示后面内容
	MOV	AH,	2				
	INT	21H
	LEA	DX,	FILEN+2		; 指向文件名
	POP	BX
	POP	AX
	RET
OPFILE	ENDP
	;
CODE	ENDS
	END	Start

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -