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

📄 wfile.asm

📁 此程序是微机与接口技术的课程设计源程序
💻 ASM
字号:
;  FILENAME: WFILE.ASM
;内容:写文件  WRITE FILE
CRLF 	MACRO
      	MOV AH,02H
       	MOV DL, 0DH
       	INT 21H
       	MOV AH, 02H
       	MOV DL, 0AH
      	INT 21H
       	ENDM
DATA  	SEGMENT
FNAME 	DB 'DATA.AAA',0
MESS1 	DB 0DH,0AH,'INPUT SEGMENT VALUE. $'
MESS2 	DB 0DH, 0AH,' INPUT OFFSET VALUE. $'
EMESS 	DB 'ERROR $ '
ERROR 	DB 'INPUT ERROR !  INPUT ONCE MORE !',0DH, 0AH,'$'
DATBUF	DB 80 DUP(?)
DATA  	ENDS
STACK 	SEGMENT STACK 'STACK'
       	DB 50 DUP(?)
STACK 	ENDS
CODE  	SEGMENT
ASSUME  CS:CODE,DS:DATA, ES:DATA, SS:STACK
START: MOV AX, DATA
       	MOV DS, AX
       	MOV ES, AX
       	MOV AH, 09H
       	MOV DX,OFFSET MESS1
       	INT 21H             		;显示提示信息1
       	CALL GETNUM
      	MOV BP ,DX               	;段址→BP
       	MOV AH, 09H
       	MOV DX,OFFSET MESS2 		;显示提示信息2
       	INT 21H
       	CALL GETNUM
       	MOV SI, DX            	;偏移量→SI
       	MOV AH, 3CH
      	MOV CX,00H          		;建立名为DATA.AAA的文件,文件属性为可读写
       	MOV DX,OFFSET FNAME
       	INT 21H
       	MOV BX, AX
       	JC ERRORPR          		;建立文件出错转ERRORPR
       	CLD                 		;清方向标志
VVV:  	MOV CX,0080         		;字符缓冲区DATBUF能容纳的最大字符数
       	MOV DS,BP           		;DS指向内存数据区域段
       	MOV DI, OFFSET DATBUF 	;缓冲区首址
UUU:  	LODSB               		;从DS:SI取字符送AL
       	CMP AL,1AH         		;若为结束字符'CTRL-Z'则转EEE
       	JE EEE
       	STOSB               		;存于缓冲区DATBUF中
       	LOOP UUU
       	MOV AH, 40H
       	MOV CX, 0080
       	PUSH ES             		;缓冲区DATBUF中的80个字符
       	POP DS              		;写入文件DATA.AAA中
       	MOV DX,OFFSET DATBUF
       	INT 21H
       	JC ERRORPR          		;出错转ERRORPR
       	JMP VVV
EEE:  	MOV SI,OFFSET DATBUF
       	SUB DI,SI            		;缓冲区中存入
       	JE EXIT             		;字符数为零则转EXIT
       	MOV AH, 40H
       	MOV CX, DI
       	PUSH ES             		;将缓冲区中剩余字符写入文件
       	POP DS
       	MOV DX,OFFSET DATBUF
       	INT 21H
       	JC ERRORPR           		;出错转ERRORPR
EXIT: 	MOV AH, 3EH
       	INT 21H              		;关闭文件
       	JC ERRORPR
       	MOV AX, 4C00H
       	INT 21H                	;返回DOS
ERRORPR:  
MOV BX ,AX
       	MOV AH, 09H
       	MOV DX,OFFSET EMESS 		;显示出错信息
       	INT 21H
       	CALL BINIHEX         		;显示出错代码
       	JMP EXIT
BINIHEX  PROC NEAR
       	MOV CH,04           		;要显示数据的位数
ROT:  	MOV CL, 04
       	ROL BX,CL            		;最高4位移到最低4位
       	MOV AL,BL
       	AND AL,0FH           		;取低4位
       	ADD AL, 30H            	;变为ASCII码
       	CMP AL,3AH           		;大于9?
       	JL PRINT              		;不大于9转PRINT
       	ADD AL,27H               	;是a~f吗?
PRINT:	MOV DL,AL
       	MOV AH,02            		;显示出错代码
       	INT 21H
       	DEC CH              		;显示完4位数字否?
       	JNZ ROT              		;未完则转ROT
       	RET                     	;返回
BINIHEX   ENDP
GETNUM  PROC NEAR
       	PUSH CX
REGET:	XOR DX, DX
GGG:  	MOV AH, 01H
       	INT 21H
       	CMP AL, 0DH
       	JZ PPP
      	CMP AL, 20H
       	JZ PPP
       	SUB AL, 30H
       	JB KKK
       	CMP AL, 0AH
       	JB GETS
       	CMP AL,11H
       	JB KKK
       	SUB AL, 07H
       	CMP AL, 0FH
       	JBE GETS
       	CMP AL,2AH          		;参见字符匹配程序清单
      	JB KKK
       	CMP AL, 2FH
      	JA KKK
       	SUB AL, 20H
GETS: 	MOV CL, 04
       	SHL DX,CL
       	XOR AH ,AH
       	ADD DX, AX
       	JMP GGG
KKK: 	CRLF
       	MOV AH, 09H
       	MOV DX, OFFSET ERROR
       	INT 21H
       	JMP REGET
PPP:  	PUSH DX
       	CRLF
       	POP DX
       	POP CX
       	RET
GETNUM  ENDP
CODE  	ENDS
END 	START

⌨️ 快捷键说明

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