📄 keti1.asm
字号:
;file typy©&del YANGZHIJUN
.model small
.stack 100h
.data
handle dw ?
filenampl label byte
maxlen db 30
namlen db ?
filenam db 30 dup(?)
nam_end db '$'
fileend db 0
c_handle dw ?
c_filenampl label byte
c_maxlen db 30
c_namlen db ?
c_filenam db 30 dup(?)
filelen dw ?
filerow db 0
c_row db 10
row db 0
col db 0
onechar db ?
menu db ' KETI1(BY 031YZJ) ',10,13
db ' *****************************',10,13
db ' * 1. File type *',10,13
db ' * 2. File copy *',10,13
db ' * 3. File del. *',10,13
db ' * 4. Exit. *',10,13
db ' *****************************',10,13
db ' Your choice[1,2,3,4]:','$'
naminmeg db 'Input file name:\>','$'
pausmeg db 'Pass (Num.1-20) to change lines,any other key to continue:','$'
copymeg1 db 'Source file name and path:\>','$'
copymeg2 db 10,13,'Aim file name and path:\>','$'
copyreturn1 db 10,13,10,13,10,13,'File Copy right.Software(031)YangZhiJun@2005.3',10,13,'$'
copyreturn2 db ' Byte Has Copyed.','$'
delmeg db 10,13,'Make sure.If you don.t want to del the file press[n\N]:','$'
delreturn db 10,13, '[!] File del success.','$'
error1 db 10,13,'File open error!','$'
error2 db 10,13,'File write error!','$'
error3 db 10,13,'File didn.t find!','$'
error4 db 10,13,'File del error!','$'
.code
main proc far
mov ax,@data
mov ds,ax
mov es,ax
main_loop:
mov ax,0600h
call scrn
mov row,4
mov col,0
call curs
lea dx,menu
mov ah,9
int 21h
;
call getch
cmp al,'1'
jb main_loop
cmp al,'4'
jg main_loop
cmp al,'4'
je m_exit
cmp al,'1'
jne m_Two
call filetype
jmp main_loop
m_Two:
cmp al,'2'
jne m_Three
call filecopy
jmp main_loop
m_Three:
call filedel
jmp main_loop
m_exit:
mov ax,0600h
mov bh,7
mov ax,4c00h
int 21h
main endp
;
filetype proc near
mov ax,0600h
call scrn
mov row,03
mov col,00
call curs
mov fileend,0
mov ah,9
lea dx,naminmeg
int 21h
lea dx,filenampl
mov al,00
call nam_in_open
cmp ax,0000
jne t_nextstep
lea dx,error3
mov ah,09h
call getch
int 21h
ret;文件不存在 返回
t_nextstep:
mov handle,ax;保存文件代号
t_begin:
;
mov filerow,0
mov bh,0e1h
mov ah,06h
mov al,c_row
call scrn_bx
mov col,0
mov ah,25
sub ah,c_row
mov row,ah
call curs
;完成上卷和光标定位到新属性的行
t_again:
lea dx,onechar
mov bx,handle
mov cx,1
mov ah,3fh
int 21h ;读一个字符
push ax
;======
;mov ah,40h
;mov cx,1
;lea dx,onechar
;mov bx,0
;int 21h
lea bx,onechar
mov dl,[bx]
mov ah,02
int 21h ;显示一个字符
;======
pop ax
cmp ax,0
jne t_next
mov fileend,1 ;文件已结束
jmp t_return ; 返回
t_next:
cmp onechar,0ah
jne t_again ;不是换行字符 再读下一个字符
inc filerow ;记录行数加一
mov ah,filerow;
cmp ah,c_row ;比较是不是到了设定值
jb t_again ;没到 读下一个字符
call pause ;到了 暂停 看是否改变c_row值
jmp t_begin ;读下一页
;---------------------------------------------------------------------------------
t_return: ;文件已结束
mov bx,handle
call closefile ;关闭文件
call getch
ret ;返回主函数
pause proc near ;==================
mov ah,06h
mov al,1
call scrn
mov row,24
mov col,0
call curs
lea dx,pausmeg
mov ah,9
int 21h
call scanf
cmp ax,23
ja p_return
cmp ax,1
jb p_return
mov c_row,al
p_return:
ret
pause endp
filetype endp
;-----------------------------------
;文件拷贝
filecopy proc near
;
mov filelen,0000;文件长清零
mov fileend,00 ;文件结束标志清零
;
mov ax,0600h
call scrn
mov row,5
mov col,0
call curs
;光标定位 清屏
lea dx,copymeg1
mov ah,09
int 21h
lea dx,filenampl
mov cl,30
mov al,00
call nam_in_open;打开源文件
cmp ax,0000
jne c_next_name;打开成功
lea dx,error1
mov ah,09
int 21h
call getch
ret;源文件不存在 返回主函数
c_next_name:;读取下一个文件名
mov handle,ax
lea dx,copymeg2
mov ah,09
int 21h
lea dx,c_filenampl
call newfile;新建目标文件
cmp ax,0000
jne c_copy_begin;目标文件创建成功
;call getch
mov bx,handle
call closefile;关闭打开的源文件
ret ;存在同名文件 不覆盖 返回主函数
c_copy_begin:
;
mov c_handle,ax;
mov cx,1
lea dx,onechar
c_again:
mov bx,handle
mov ah,3fh
int 21h ;从源文件读一个字符
cmp ax,0000
jne c_next ;没到文件末尾
mov fileend,1;已是最后一个字符了
c_next:
mov bx,c_handle
mov ah,40h
int 21h ;写进目标文件
cmp fileend,1
je c_return
inc filelen;文件字节数加一
jmp c_again;读下一个字节
c_return: ;拷贝已完成
mov bx,handle
call closefile
mov bx,c_handle
call closefile
mov ah,09
lea dx,copyreturn1
int 21h
mov bx,0001
mov ax,filelen
call printf
lea dx,copyreturn2
mov ah,09
int 21h
call getch
ret
filecopy endp
; 文件删除
filedel proc near
mov ah,06
mov al,00
call scrn
mov row,5
mov col,0
call curs
lea dx,naminmeg
mov ah,09
int 21h
;mov ah,0ah
lea dx,filenampl
;---------------------------------------------------
call nam_in_open
cmp ax,0000
je d_return
lea dx,filenam
call closefile
;---------------------------------------------------
;int 21h
;mov cl,30
;mov ch,namlen
;lea di,filenam
;call nam_clear
;lea dx,filenam
;call
lea dx,delmeg
mov ah,09
int 21h
call getch
cmp al,'N'
jne d_next1
ret
d_next1:
cmp al,'n'
jne d_next2
ret
d_next2:
lea dx,filenam
mov ah,41h
int 21h
jc d_return
lea dx,delreturn
mov ah,09h
int 21h
call getch
ret
d_return:
lea dx,error4
mov ah,9
int 21h
call getch
ret
filedel endp
include asm.sub
end main
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -