马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
我在一个文件中写入多汗数据,写一个汇编程序读取文件中的内容,再显示文件中的内容,为什么值显示了最后一行的数据,前面的无法显示;输出:
EOF = 1AH
DSEG SEGMENT
FNAME DB 'MYFILE1.TXT',0
ERROR1 DB'File not found',07H,0
ERROR2 DB'Reading error',07H,0
BUFFER DB ?
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG
START:
MOV AX,DSEG
MOV DS,AX
;
MOV DX,OFFSET FNAME ;把变量名的地址传输到寄存器中去,在编译的时候完成
MOV AX,3D00H ;3DH 打开文件 DS:DX=文件说明,AL=模式
INT 21H
JNC OPEN_OK ;cf=0,>=,,文件打开成功
;
MOV SI,OFFSET ERROR1 ;si为error1的地址(偏移),
CALL DMESS ;输出si开始的内容,即输出错误信息
JMP OVER
;文件打开成功
OPEN_OK:
MOV BX,AX
;循环调用子程序
CONT:CALL READCH ;开文件,并读取cx个字符(1个字符)
JC READERR
CMP AL,EOF
JZ TYPE_OK
CALL PUTCH ;;输出文件中的内容
JMP CONT
;
READERR:MOV SI,OFFSET ERROR2
CALL DMESS
;
TYPE_OK:
MOV AH,3EH ;3EH 关闭文件 BX=文件号 注1
INT 21H
OVER:
MOV AH,4CH
INT 21H
;打开文件,并读取cx个字符(1个字符)
READCH PROC
MOV CX,1
MOV DX,OFFSET BUFFER ;把ds:dx,和buffer对应起来
MOV AH,3FH ;3FH 读文件或设备 BX=文件号 CX=字符数CX:DX=缓冲区
;成功:CF=0,DX:AX=新指针位置 失败:CF=1,AX=错误码
INT 21H
JC READCH2 ;cf=1(文件读取失败)跳到函数返回jb004b
CMP AX,CX ;指针的位置,-,需要读入的字符数,若相等,则读完一次
;文件读完后,ax为0
MOV AL,EOF
JB READCH1
MOV AL,BUFFER ;把读入的内容放入al中
READCH1:CLC ;清除进位标志cf,即cf=0
READCH2:RET ;函数返回
READCH ENDP
;
DMESS PROC
DMESS1:
MOV DL,[SI]
INC SI
OR DL,DL
JZ DMESS2
MOV AH,2 ;2 字符输出 DL=8位数据
INT 21H
JMP DMESS1
DMESS2:RET
DMESS ENDP
;输出文件中的内容
PUTCH PROC ;程序定义伪代码
PUSH DX
MOV DL,AL
MOV AH,2 ;2 字符输出 DL=8位数据
INT 21H
POP DX
RET
PUTCH ENDP
;
CSEG ENDS
END START
|