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 outlook无法配置成功
  • ¥15 Pwm双极模式H桥驱动控制电机
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换