|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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
复制代码
|
|