⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rd1.asm

📁 查找制定目录下的文件
💻 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		;读入BUFPATH
       mov  ah,1ah	
       mov  dx,offset mydata
       int  21h			;设点43字节的DTA


       mov  si,0		;初始化指针
       mov  di,0
  conter: 
       mov  al,bufpath[si]	;设立将bufpath存入path&outpath得循环
       cmp  al,0		;循环控制量
       jz   next
       mov  path[di],al
       mov  outpath[di],al	;传递过程
       inc  si			;指针指向下一字节
       inc  di
       jmp  conter
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		;准备保存dta缓存区
        mov  si,0
        push di
        mov  di,mydatabufsp
 pdta:
        mov  al,mydata[si]	;保存dta循环
        mov  mydatabuf[di],al	
        inc  si
        inc  di
        loop  pdta
        pop  di
        add  mydatabufsp,43
       
        
        mov  [bp],'\'		;给path&outpath后加'\'
        mov  [bx],'\'
        mov  cx,0

        mov  si,1eh
lop:
        mov  al,mydata[si]	;把文件名给path&outpath
        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 + -