📄 rdw.asm
字号:
data segment
namemax db 32
actlen db ?
bufpath db 32 dup (0),'$'
path db 128 dup (0),'$'
outpath db 128 dup (0),'$'
wrongpath db 'The path is not correct!','$'
prompt1 DB 0ah,0dh,'Please input which catalog to reach:' ,'$',0ah,0dh
prompt2 DB 0ah,0dh,'The file-reach is over!','$' ,0ah,0dh
mydata db 43 dup (0),'$'
mydatabufsp dw 0
mydatabuf db 512 dup (0)
data ends
;---------------------------------------------------------------------
code segment
assume cs: code,ds:data,es:data
start:
mov ax,data
mov ds,ax
mov es,ax
lea dx,prompt1
mov ah,09h
int 21h
call INPUT
mov ah,1ah
mov dx,offset mydata
int 21h
mov si,0
mov di,0
cont:
mov al,bufpath[si]
cmp al,0
jz next
mov path[di],al
mov outpath[di],al
inc si
inc di
jmp cont
next:
lea bp,path[di]
sub bp,4
lea bx,outpath[di]
sub bx,4
mov [bx],'/'
mov [bx+1],'$'
sub di,3
lea dx, path
call scan
jmp lop_end
;-----------------------------------------------------------------------------------
scan proc near
mov cx,37h
mov ah, 4eh
int 21h
jnc judge
lea dx,wrongpath
mov ah,09h
int 21h
jmp lop_end
judge:
cmp mydata[1eh],'.'
jz nextfile_1
cmp mydata[15h],10h
jnz disp
mov cx,43
mov si,0
push di
mov di,mydatabufsp
pdta:
mov al,mydata[si]
mov mydatabuf[di],al
inc si
inc di
loop pdta
pop di
add mydatabufsp,43
mov [bp],'\'
mov [bx],'\'
mov cx,0
mov si,1eh
lop:
mov al,mydata[si]
cmp al,''
jz next1
mov path[di],al
mov outpath[di],al
inc cx
inc si
inc di
jmp lop
next1:
inc cx
push cx
push bp
push bx
add bp,cx
add bx,cx
mov [bx],'\'
mov [bx+1],'$'
mov [bp],'\'
mov [bp+1],'*'
mov [bp+2],'.'
mov [bp+3],'*'
inc di
call scan
pop bx
pop bp
pop cx
sub di,cx
call clean
jmp nextfile
nextfile_1:
jmp nextfile_2
disp:
push dx
lea dx,outpath
mov ah,09h
int 21h
lea dx,mydata[1eh]
mov ah,09h
int 21h
jmp cr
nextfile_2:
jmp nextfile
judge1: jmp judge
cr: mov dl,0dh
mov ah,02h
int 21h
mov dl,0ah
mov ah,02h
int 21h
pop dx
nextfile:
mov cx,37h
mov ah,4fh
int 21h
cmp ax,12h
jnz judge1
ret
scan endp
;--------------------------------------------------------------------------
clean proc near
mov cx,13
mov si,1
lop2:
mov [bx+si],0
mov [bp+si],0
inc si
loop lop2
mov [bp+1],'*'
mov [bp+2],'.'
mov [bp+3],'*'
mov [bx+1],'$'
mov si,0
mov cx,43
sub mydatabufsp,43
push di
mov di,mydatabufsp
copy2:
mov al,mydatabuf[di]
mov mydata[si],al
inc si
inc di
loop copy2
pop di
ret
clean endp
;----------------------------------------------------------------------------------------------
INPUT proc near
lea dx,namemax
mov ah,0ah
int 21h
mov cl,actlen
mov si,cx
mov bufpath[si],'\'
mov bufpath[si+1],'*'
mov bufpath[si+2],'.'
mov bufpath[si+3],'*'
ret
INPUT endp
;-----------------------------------------------------------------------------------
lop_end:lea dx,prompt2
mov ah,09h
int 21h
mov ax,4c00h
int 21h
code ends
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -