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

📄 save.asm

📁 汇编的文件操作 自己做的 能实现一些简单的功能 即增删改查
💻 ASM
📖 第 1 页 / 共 2 页
字号:
 ;------------------------------ 
repl    proc   near
        mov    di,0
        mov    bx,-1
 rloopsear:
        inc    di
        inc    bx
        mov    si,2
        mov    ah,buff[di]
        cmp    ah,-1
        je     totorended
        mov    buff1[bx],ah;存缓冲区
        cmp     buff[di],0ah

        mov    al,searstri[si]
        cmp    al,buff[di]
        je     rinpush
        cmp    buff[di],'$'
        je     totorended
        jmp    rloopsear

 rinpush:
          push   di
          jmp    rgoon1
 rgoon1:  inc    si
         inc    di
         mov    al,searstri[si]
         cmp    al,"$"
         je     routsear
         cmp    al,buff[di]
         jne    rbackpop
         
   	 jmp    rgoon1
 rbackpop:
         pop   di        
         jmp   rloopsear
  totorended: jmp  rended
 ;-------------------------------------- 
 routsear: inc    searres2
           dec    bx;把第一个退了,即为被替换串的头
           mov    si,1
 ;-------------------------------------------------------
          mov    preline,di
          push   bx
          mov    cl,3
          mov    bx,preline
 rdismsgl:
           dec     bx
           
           mov    al,buff[bx]
           cmp    al,-1
           je     rdisl
           cmp    al,0ah
           je     rdeccl
           jne    rdismsgl     
  rdeccl:   dec  cl
            cmp  cl,0
            je   rdisl
            jne  rdismsgl
  rdisl:   ;从此开始显示六行
           inc  bx
           mov  dl,buff[bx]
           cmp  dl ,-1
           je   routdisl
           mov  ah,2
           int  21h
           cmp  dl, 0ah
           je   rinccl
           jne  rdisl
  rinccl:   
           inc   cl
           cmp   cl,6
           je    routdisl
           jne   rdisl
 routdisl:  
            pop   bx
            jmp  rloopin
 ;-----------------------------------------------------------
           
 rloopin:  inc    bx;把替换串写入
           inc     si
           mov     cl, repstr[si]
           cmp     cl,  "$" ;是否到达写入串的尾
           je      rtopop
           mov     buff1[bx],cl
           jmp     rloopin
 rtopop:   dec     bx ;因为在loopin里面增加了1
           mov     ah,09
	   lea     dx,clrf
	   int     21h 
           jmp     rrepop
 rrepop:
            dec   di       
            jmp   rloopsear     
;-------------------------------------------------------------------------------    
 rended:   mov    result1,bx
         
 	   mov     ah,09
	   lea     dx,clrf
	   int     21h 
           mov     ah,9
           lea     dx,copyhead
           int     21h
           call    copyfile
repl endp
 ;------------------------------------------------------------------   
 sear   proc   near
       
        mov    di,0
 loopsear:
        inc    di
        mov    si,2
        mov    al,searstri[si]
         
        cmp    al,buff[di]
        je     inpush
        cmp    buff[di],'$'
        je     ttended
        jmp    loopsear
 inpush:
         push   di
         jmp    goon1
    goon1:  
         inc    si
         inc    di
         mov    al,searstri[si]
         cmp    al,"$"
         je     outsear
         cmp    al,buff[di]
         jne    backpop
         jmp    goon1
ttended: jmp   ended
 backpop:
  ;---------------------------------------------------   
             
         pop  di        
         jmp  loopsear
  ;---------------------------------------------------   
 outsear:  
          mov    preline,di
          push   di
          mov    cx,linebank
          push   cx
          mov    cl,2
          mov    bx,preline
    dismsgl:
           dec     bx
           mov    al,buff[bx]
           cmp    al,-1
           je     disl
           cmp    al,0ah
           je     deccl
           jne    dismsgl     
    deccl: dec    cl
           cmp    cl,0
           jle    disl
           jne  dismsgl
    disl:   ;从此开始显示六行
          
           inc  bx
           mov  dl,byte ptr buff[bx]
           cmp  dl ,-1
           je   outdisl
           mov  ah,2
           int  21h
           
           cmp  dl, 0ah
           je   inccl
           jne  disl
    inccl:   
           inc   cl
           cmp   cl,6
           je    outdisl
           jne   disl
  outdisl:  
           dec   di
             
    ;------------------------------      
           inc     searres1
           mov     ah,09
	   lea     dx,clrf
	   int     21h 
	   mov     ah,9
           lea     dx,outmsg
           int     21h
           mov     ah,09
	   lea     dx,clrf
	   int     21h 

           jmp     loopsear
       
 ;-------------------------------- 
 ended:
         mov     ah,09
	   lea     dx,clrf
	   int     21h 
	   
           mov     ah,9
           lea     dx,endmsg
           int     21h
           
           mov     dl,10
           mov     ax,searres1
           div     dl
           mov     bx,ax
           
           mov     dx,bx
           mov     ah,2
           add     dl,30h
           int     21h
           
           mov     dl,dh
           mov     ah,2
           add     dl,30h
           int     21h
	
           mov     searres1,0
           mov     ah,09
	   lea     dx,clrf
	   int     21h 
           call    exit
sear endp
;-------------------- 
copyfile         proc    near
          	 Mov     AX,@data
          	 Mov     DS,AX
          	 mov     ah,09
	       	 lea     dx,clrf
	  	 int     21h 
	  	 
	  	 
	  	  mov  bx,0
       
  copyloop:
       
       mov  dl,buff1[bx]
       cmp  bx, result1
       je   copynext
       mov  ah, 2
       int  21h
       inc  bx
       jmp  copyloop
 copynext:
	    
	   	  Mov     AX,3c00H
	   	  Mov     CX,0    ;文件属性为归档
	   	  lea     DX, copypath
	   	  Int     21H       ;建立文件
	   	  Jc      Err1
	   	  Mov     handle2 ,AX;   存文件号
	  	  mov     bx,ax
	  
	
	   	 Mov     AX,4000H;写操作
	         
	   	 Mov     CX,result1    ;要写的字节数
	 
	   	 Mov     DX,Offset  buff1
	   	 Int     21H       ;写数据到文件
	   	 Jc      Err3
	   	 Mov     AX,3e00H
	   	 Int     21H       ;关闭文件
	     
	    	 jmp   	 succla
Err3:
          	Mov     DX,Offset Error31
       		Jmp     ShowErr
Err1:
      		Mov     DX,Offset Error1
      		Jmp     ShowErr
 
	   
succla:    
           mov     ah,09
	   lea     dx,clrf
	   int     21h 
	   
           mov     dx,offset copysucc
	   mov     ah,9
	   int     21h
	   
	   
           mov     dl,10
           mov     ax,searres2
           div     dl
           mov     bx,ax
           
           mov     dx,bx
           mov     ah,2
           add     dl,30h
           int     21h
           
           mov     dl,dh
           mov     ah,2
           add     dl,30h
           int     21h
           
           mov     searres2,0
	   call    exit
copyfile       endp
;----------------------------- 
exit    proc    near
ewhatdo: 
         mov    result1,0
         mov    result2,1  
         mov    si,0
               ;选择相关功能号
         mov     ah,09
	 lea     dx,clrf
	 int     21h
         Mov     ah,9  
         Mov     DX,Offset dowhat
	 Int     21H       
	 mov     ah,09
	 lea     dx,clrf
	 int     21h  
	 mov     ah,  1
	 int     21h
	 mov     temp,al
	 
	 mov     ah,  1
	 int     21h
	 
	 mov     al,temp
	 cmp     al,'1'
	 je      etemp1
	 cmp     al,'2'
	 je      etemp2
	 cmp     al,'3'
	 je      etemp3
	 cmp     al,'4'
	 je      etemp4     
	 jmp     eerrorinput
etemp1:    call    toscan
etemp2:    call    tosear                                    
etemp3:    call    torep                               
etemp4:   mov     ax,4c00h
         int     21h
eerrorinput:
         Mov     ah,9  
         Mov     DX,Offset choseerr
	 Int     21H    
	 jmp     ewhatdo
exit    endp
;------------------ 
ShowErr :
      Mov     AX,900H
      Int     21H
      call    exit
;--------------------       

      End    main

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -