dfsgfdhgdyjfhg 发表于 2013-5-1 21:35:14

汇编怎么输出多行数据

我在一个文件中写入多汗数据,写一个汇编程序读取文件中的内容,再显示文件中的内容,为什么值显示了最后一行的数据,前面的无法显示;输出:
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个字符)
READCHPROC
   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
   JCREADCH2        ;cf=1(文件读取失败)跳到函数返回jb004b
   CMP AX,CX                ;指针的位置,-,需要读入的字符数,若相等,则读完一次
                                        ;文件读完后,ax为0
   MOV AL,EOF
   JBREADCH1
   MOV AL,BUFFER        ;把读入的内容放入al中
READCH1:CLC                        ;清除进位标志cf,即cf=0
READCH2:RET                        ;函数返回
READCH ENDP
;

DMESS PROC
DMESS1:
   MOV DL,
   INC SI
   ORDL,DL
   JZDMESS2
   MOV AH,2                ;2 字符输出 DL=8位数据
   INT 21H
   JMP DMESS1
DMESS2:RET
DMESSENDP

;输出文件中的内容
PUTCH   PROC                ;程序定义伪代码
        PUSH DX
        MOV DL,AL
        MOV AH,2        ;2 字符输出 DL=8位数据
        INT 21H
        POP DX
        RET
PUTCH   ENDP
;
CSEG ENDS
   END START


页: [1]
查看完整版本: 汇编怎么输出多行数据