汇编语言:请写一个程序把当前目录下的TEXT.TXT文件中的字符读出来显示在屏幕上,当遇到结束符时就停止读取。

时间:2021-09-23 12:33:54

题目:写一个程序把当前目录下的TEST.TXT文件中的字符内容读出来并显示在屏幕上,当遇到结束符时就停止读取。

我的test.txt中的内容是:

汇编语言:请写一个程序把当前目录下的TEXT.TXT文件中的字符读出来显示在屏幕上,当遇到结束符时就停止读取。

程序的运行结果如下:

汇编语言:请写一个程序把当前目录下的TEXT.TXT文件中的字符读出来显示在屏幕上,当遇到结束符时就停止读取。

我写的源代码如下:

EOF=065
DSEG SEGMENT
FNAME DB 'TEST.TXT',0 ;文件名
ERROR1 DB 'File not found',07H,0 ;提示信息
ERROR2 DB 'Reading error',07H,0
BUFFER DB ? ;1字节的缓冲区、
DSEG ENDS
;代码段
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG
START:MOV AX,DSEG
MOV DS,AX ;置数据段寄存器
;
MOV DX,OFFSET FNAME
MOV AX,3D00H ;读打开指定文件
INT 21H
JNC OPEN_OK ;打开成功,转
MOV SI,OFFSET ERROR1 ;显示打开不成功提示信息
CALL DMESS
JMP OVER
;
OPEN_OK:MOV BX,AX ;保存文件柄
CONT: CALL READCH ;从文件中读一个字符
JC READERR ;如读出错,则转
CMP AL,EOF ;读到文件结束符吗?
JZ TYPE_OK ;是,转
CALL PUTCH ;显示所读字符
JMP CONT ;继续
READERR:MOV SI,OFFSET ERROR2
CALL DMESS
;
TYPE_OK:MOV AH,3EH
INT 21H
OVER: MOV AH,07;为了显示
INT 21H ;为了显示
MOV AH,4CH
INT 21H
;
READCH PROC
MOV CX,1
MOV DX,OFFSET BUFFER ;置缓冲区地址
MOV AH,3FH ;置功能调用号
INT 21H ;读
JC READCH2 ;读出错,转
CMP AX,CX ;判文件是否结束
MOV AL,EOF ;设文件已经结束,置文件结束符
JB READCH1 ;文件确已结束,转
MOV AL,BUFFER ;文件未结束,取所读字符
READCH1:CLC
READCH2:RET
READCH ENDP
;
DMESS PROC
DMESS1:MOV DL,[SI]
INC SI
OR DL,DL
JZ DMESS2
MOV AH,2
INT 21H
JMP DMESS1
DMESS2:RET
DMESS ENDP


PUTCH PROC
PUSH DX
MOV DL,AL
MOV AH,2
INT 21H
POP DX
RET
PUTCH ENDP
CSEG ENDS
END START

程序的说明:

       程序代码的说明我的源程序里面已经注释了。我想多说两句的是那个结束符的处理方法,你可以看到我的结束符定义的的eof=065,而这个065就是ASCII码,大家可以翻看一下常用字符与ascii代码的对照表,可以知道这个065定义的字符就是A(大写的A)。所以,当程序读到内容是A时,便立即停止了读取操作。当然,在这里大家可以自己根据自己的需要来定义自己的结束符。

       如果大家觉得不错的话,可以给我评论,我也可以顺便向大家请教一下,谢谢。