鱼C论坛

 找回密码
 立即注册
查看: 1441|回复: 0

汇编怎么输出多行数据

[复制链接]
发表于 2013-5-1 21:35:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-7 20:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表