Josie0625 2020-05-11 17:00 采纳率: 0%
浏览 286

汇编dos调用打开文件为什么显示文件不存在呢

代码如下
路径什么的都是对的 就是打不开 希望好心人能帮帮忙

BUFFLEN=50
DSEG SEGMENT
INFOR1 DB 'Please input the path and the goal file(*:*.*):$'
INFOR2 DB 'Please input the path and the source file(*:*.*):$'
INFOR3 DB 'Copy success!$';操作命令提示
ERROR1 DB'Can not open the file! Please make sure whether the source file is exit!',07H,'$'
ERROR2 DB 'Can not creat the file!',07H,'$'
ERROR3 DB 'Reading error!',07H,'$'
ERROR4 DB 'Writing error!',07H,'$'
;错误命令提示
HANDLE1 DW 0
HANDLE2 DW 0
BUFFER DB BUFFLEN
DB ?
DB BUFFLEN DUP(0);定义一个缓存区
DSEG ENDS

CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG
START:MOV AX,DSEG
MOV DS,AX
MOV DX,OFFSET INFOR2
CALL DMESS;调用DMESS子程序
MOV DX,OFFSET BUFFER
MOV AH,0AH ;输入字符串
INT 21H
;调用NEWLINE子程序
CALL NEWLINE
LEA SI,BUFFER;将BUFFER的有效地址传个SI
MOV AL,[SI+1]
XOR AH,AH;AH清零
ADD SI,2;调整指针
ADD SI,AX
MOV BYTE PTR[SI],0
MOV DX,OFFSET BUFFER+2;将BUFFER+2的有效地址传给DX
MOV AX,3D00H
INT 21H
JNC OPENOK;进位标志被清转移到OPENOK
MOV DX,OFFSET ERROR1
CALL DMESS
JMP OVER
OPENOK:MOV HANDLE1,AX
MOV DX,OFFSET INFOR1
CALL DMESS
MOV DX,OFFSET BUFFER
MOV AH,0AH
INT 21H
CALL NEWLINE
LEA SI,BUFFER;将BUFFER的有效地址传给SI
MOV AL,[SI+1]
XOR AH,AH
ADD SI,2
ADD SI,AX
MOV BYTE PTR [SI],0
MOV DX,OFFSET BUFFER+2
MOV CX,0
MOV AH,3CH;建立文件
INT 21H
JNC CREAOK
MOV BX,HANDLE1
MOV AH,3EH;关闭文件
INT 21H
MOV DX,OFFSET ERROR2
CALL DMESS
JMP OVER
CREAOK:MOV HANDLE2,AX
CONT:MOV DX,OFFSET BUFFER
MOV CX,BUFFLEN
MOV BX,HANDLE1
MOV AH,3FH;读文件
INT 21H
JC READERR
OR AX,AX;进位标志CF清0
JZ COPY_OK
MOV CX,AX
MOV BX,HANDLE2
MOV AH,40H;写文件
INT 21H
JC WRITERR
JMP CONT
READERR:MOV SI,OFFSET ERROR3
CALL DMESS
JMP COPY_OK
WRITERR:MOV SI,OFFSET ERROR4
CALL DMESS
COPY_OK:MOV BX,HANDLE1
MOV AH,3EH
INT 21H
MOV BX,HANDLE2
MOV AH,3EH;关闭文件
INT 21H
MOV DX,OFFSET INFOR3
CALL DMESS
OVER:MOV AH,4CH
INT 21H
;函数NEWLINE实现在串字符后输出一个回车换行:
;功能:显示由DX所指的提示信息
;入口参数:DS:DX=需要输出字符串的首地址,字符串以S为结束标志
;出口参数:无
DMESS PROC
MOV AH,9;显示字符串
INT 21H
RET;段内返回
DMESS ENDP
;功能:形成回车和换行
;出口参数:无
;入口参数:无
NEWLINE PROC
PUSH AX
PUSH DX;保护寄存器
MOV DL,0DH
MOV AH,2;显示输出
INT 21H
MOV DL,0AH
MOV AH,2
INT 21H
POP DX
POP AX
RET
NEWLINE ENDP
CSEG ENDS
END START;程序结束`

  • 写回答

1条回答 默认 最新

  • zqbnqsdsmd 2020-05-13 01:31
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序