鱼C论坛

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

汇编怎么输出多行数据

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

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

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

x
我在一个文件中写入多汗数据,写一个汇编程序读取文件中的内容,再显示文件中的内容,为什么值显示了最后一行的数据,前面的无法显示
  1. ;输出:
  2. EOF = 1AH
  3. DSEG SEGMENT
  4.   FNAME DB 'MYFILE1.TXT',0
  5.   ERROR1 DB'File not found',07H,0
  6.   ERROR2 DB'Reading error',07H,0
  7.   BUFFER DB ?
  8. DSEG ENDS

  9. CSEG SEGMENT
  10.   ASSUME CS:CSEG,DS:DSEG
  11. START:
  12.      MOV AX,DSEG
  13.      MOV DS,AX
  14.      ;
  15.      MOV DX,OFFSET FNAME        ;把变量名的地址传输到寄存器中去,在编译的时候完成
  16.      MOV AX,3D00H                ;3DH 打开文件 DS:DX=文件说明,AL=模式
  17.      INT 21H
  18.      JNC OPEN_OK                ;cf=0,>=,,文件打开成功
  19.      ;
  20.      MOV SI,OFFSET ERROR1        ;si为error1的地址(偏移),
  21.      CALL DMESS                ;输出si开始的内容,即输出错误信息
  22.      JMP OVER
  23. ;文件打开成功
  24. OPEN_OK:
  25.      MOV BX,AX
  26. ;循环调用子程序
  27. CONT:CALL READCH        ;开文件,并读取cx个字符(1个字符)
  28.      JC READERR
  29.      CMP AL,EOF
  30.      JZ TYPE_OK
  31.      CALL PUTCH                ;;输出文件中的内容
  32.      JMP CONT
  33.      ;
  34. READERR:MOV SI,OFFSET ERROR2
  35.       CALL DMESS
  36.       ;
  37. TYPE_OK:
  38.      MOV AH,3EH                ;3EH 关闭文件 BX=文件号 注1
  39.      INT 21H
  40. OVER:
  41.      MOV AH,4CH
  42.      INT 21H
  43.          
  44. ;打开文件,并读取cx个字符(1个字符)
  45. READCH  PROC
  46.      MOV CX,1
  47.      MOV DX,OFFSET BUFFER        ;把ds:dx,和buffer对应起来
  48.      MOV AH,3FH                ;3FH 读文件或设备 BX=文件号 CX=字符数CX:DX=缓冲区
  49.                                         ;成功:CF=0,DX:AX=新指针位置 失败:CF=1,AX=错误码
  50.      INT 21H
  51.      JC  READCH2        ;cf=1(文件读取失败)跳到函数返回jb004b
  52.      CMP AX,CX                ;指针的位置,-,需要读入的字符数,若相等,则读完一次
  53.                                         ;文件读完后,ax为0
  54.      MOV AL,EOF
  55.      JB  READCH1
  56.      MOV AL,BUFFER        ;把读入的内容放入al中
  57. READCH1:CLC                        ;清除进位标志cf,即cf=0
  58. READCH2:RET                        ;函数返回
  59. READCH ENDP
  60. ;

  61. DMESS PROC
  62. DMESS1:
  63.      MOV DL,[SI]
  64.      INC SI
  65.      OR  DL,DL
  66.      JZ  DMESS2
  67.      MOV AH,2                ;2 字符输出 DL=8位数据
  68.      INT 21H
  69.      JMP DMESS1
  70. DMESS2:RET
  71. DMESS  ENDP

  72. ;输出文件中的内容
  73. PUTCH   PROC                ;程序定义伪代码
  74.         PUSH DX
  75.         MOV DL,AL
  76.         MOV AH,2        ;2 字符输出 DL=8位数据
  77.         INT 21H
  78.         POP DX
  79.         RET
  80. PUTCH   ENDP
  81. ;
  82. CSEG ENDS
  83.    END START
复制代码


小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-7-6 15:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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