汇编编写的一copy文件程序,DOXBOX运行,输入文件路径及名时总显示找不到文件,求大佬帮忙运行解决一下。

DATAS SEGMENT
fname_buf db 64,?
fname db 64 dup(0) ;文件名缓冲区

fnum_s dw ? ;源文件号
fnum_d dw ? ;新文件号
buffer db 512 DUP (?) ;读写缓冲区
msg1 db 0dh,0ah,'Please input the source file path and name:','$'
msg2 db 0dh,0ah,'Can not find the file, please input again:','$'
msg3 db 0dh,0ah,'Please input the destination file path and name:','$'

msg4 db 0dh,0ah,'The destination file is existed...',0dh,0ah,'please enter another name:','$'

msg5 db 0dh,0ah,'Error in copying file...',0dh,0ah,'please try again:','$'
msg6 db 0dh,0ah,'Error in reading file...',0dh,0ah,'please try again:','$'
msg7 db 0dh,0ah,'Error in writing file...',0dh,0ah,'please try again:','$'
msg8 db 0dh,0ah,'File copying success!','$'
msg9 db 0dh,0ah,'Copy another files?(y/n)','$'
DATAS ENDS

STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
;----------------------------------------------------------------------------
;该函数用于输入文件名及路径,并删除输入文件名后的回车符,使字符串为ASCIZ地址
getfname proc
;将保存输入文件名的缓冲区清空
mov si,0
mov cx,64
reset:
mov fname[si],0
inc si
loop reset
;循环执行reset,将fname字符串置为0
;---------------------------------------------
;输入源文件名及路径
lea dx,fname_buf;取地址操作
mov ah,0ah
int 21h
;将最后一个回车符换成0,使字符串为ASCIZ地址
mov si,0
set0:
cmp fname[si],0dh
je set0go
inc si
jmp set0
set0go:

mov fname[si],0

ret
getfname endp

;---------------------------------------------
START:
MOV AX,DATAS
MOV DS,AX
;---------------------------------
;打开源文件
input:
mov dx,offset msg1
mov ah,9
int 21h
call getfname
lea dx,fname
mov ax,3d00h
int 21h
jnc opensuc
lea dx,msg2
mov ah,9
int 21h
jmp input
opensuc:

mov fnum_s,ax

;---------------------------------

;创建目标文件
mov dx,offset msg3
mov ah,9
int 21h
;判断目标文件是否存在
build:
call getfname
lea dx,fname
mov ax,3d00h
int 21h

jc notext;有进位时CF=1跳转
;存在,关闭打开的文件
mov bx,ax

mov ah,3eh
int 21h

mov  dx,offset msg4
mov  ah,9
int 21h
jmp build

;-----------------------------
;目标文件不存在,建立目标文件
notext:

mov cx,0
lea dx,fname
mov ah,3ch ;建立普通新文件
int 21h
jnc save ;建立成功,保存新文件号
mov dx,offset msg5 ;不成功,显示错误信息
mov ah,9
int 21h
jmp start ;重新输入
save:

mov fnum_d,ax ;保存新文件号
mov ax,3d01h ;以只写方式打开新文件
int 21h
readf:

mov bx,fnum_s ;取源文件号
mov cx,512 ;读出512个字符
mov dx,offset buffer
mov ah,3fh
int 21h
jnc writef ;读成功,则写
mov dx,offset msg6 ;不成功,显示错误信息,关闭文件
mov ah,9
int 21h
jmp exit
;--------------------------
writef:

mov bx,fnum_d ;取新文件号
mov cx,ax ;按实际读入字数写文件
mov ah,40h
int 21h
jnc cmpcx ;写成功
mov dx,offset msg7 ;不成功,显示错误信息,关闭文件
mov ah,9
int 21h
jmp exit
cmpcx:

cmp cx,512 ;判断实际读入的字数是不是512
je readf ;如果是512,说明还没读到文件尾
mov dx,offset msg8 ;显示‘复制成功’
mov ah,9
int 21h
exit:

mov ah,3eh ;关闭文件
int 21h
mov bx,fnum_s
mov ah,3eh
int 21h
;------------------------------------------------------------------
;继续复制
again:
mov dx,offset msg9
mov ah,9
int 21h
mov ah,1
int 21h
cmp al,'Y'
je start
cmp al,'y'
je start
cmp al,'N'
je ok
cmp al,'n'
je ok
jne again

;------------------------------------------------------------------
ok:

MOV AH,4CH
INT 21H
CODES ENDS
END START

另外,运行时发生跳转错误,求大佬帮助,能贴出运行截图最好啦图片说明

找不到源文件

你在dosbox里执行下dir,看下目录,是不是在当前目录里。
dosbox会设置一个虚拟根目录,往往你的程序在它的子目录里。