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

📄 save.asm

📁 汇编的文件操作 自己做的 能实现一些简单的功能 即增删改查
💻 ASM
📖 第 1 页 / 共 2 页
字号:
 
 .model  small
 .stack  64
 .data
   clrf     db  0dh,0ah,"$"				;换行设置
   Error1   db  "Create file fail.",13,10,"$"           ;创建复制文件出错提示
   Error31  db  "Write file fail.",13,10,"$"            ;写复制文件内容出错提示
   Error2   db "error open source file$" 				;源文件 打开出错提示
   Error4   db "error move$"				;源文件的读写指针变化出错提示
   error3   db "read error$"				;源文件的读 出错提示   
   choseerr db 'input error'                            ;选功能号出错
   copyhead db '*****************copy file *****************$'
   inputmsg db 'input file name',0dh,0ah,'$'               	;提示用户输入预先建立的文件名
   sournam  db 32,0,32 dup('$')                       	;存放预先建立的文件名。由用户输入
   inputstr db  "input search string  $"              	;输入查找串提示
   searstri    db 100,0,100 dup("$")			;查找串的存放单元
   repmsg   db  "input replace string $"              	;输入替换串提示
   repstr   db  100,0,100 dup('$')                      ;替换串存放地址
   preline  dw 0001
   result1  dw 0000                                	;存放源文件字符数
   result1msg db 'the number of letter:$'
   result2  dw 0001 					;存放源文件行数
   result2msg db 'the number of line:$'
   handle   dw ?                                        ;存放源文件标号
   handle1  dw ?					;存放标号
   handle2  dw ? 
   linebank dw 0000
   temp     db ?                                        ;存放输入功能号标志,调用相关要求的功能
   dowhat   db '****** to do what?choose number:*******',0dh,0ah,0dh,0ah,'( 1: scan,2: search,3: replace,4: exit )$'
   succin   db 'succ input msg $'
   suc1     db "ok open $"				;源文件的缓冲区
   suc2     db "ok read $"   				;源文件的缓冲区
   
   buff     db -1,5000 dup("$") 				;源文件的缓冲区
   buff1    db 5000 dup ("$")				;替换后的缓冲区
   succinsear db "in sear $"
   outmsg   db "search one  ok $"			;查找到匹配字符串提示
   endmsg   db "end search,find string number: $"				;查找匹配串结束
   endrep   db "replace string number: $" 
   searres1 dw 0000
   searres2 dw 0000
   copypath db  "copy.txt",00                       	;复制文件名称,也即存放地址
   copysucc db  "copy file success.please check!",0dh,0ah,"replace string number:$"      ;复制文件完成提示
   .code 
main  proc far
         Mov     AX,@data
         Mov     DS,AX
         
 whatdo:                ;选择相关功能号
         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      temp1
	 cmp     al,'2'
	 je      temp2
	 cmp     al,'3'
	 je      temp3
	 cmp     al,'4'
	 je      temp4     
	 jmp     errorinput
temp1:    call    toscan
temp2:   call    tosear                                    
temp3:   call    torep                               
temp4:   mov     ax,4c00h
         int     21h
errorinput:
         Mov     ah,9  
         Mov     DX,Offset choseerr
	 Int     21H    
	 jmp     whatdo
          
 main  Endp        
;---------------------- ---- 取得一些必需的信息
toscan   proc    near
         Mov     Ah,09h
         Mov     DX,Offset inputmsg
	 Int     21H         ;提示输入文件名 
	 Mov     ah,0ah      ;取文件名
	 lea     dx,  sournam
         int     21h 
	 sub     bh, bh
	 mov     bl,[sournam+1]
	 mov     sournam[bx+2],0
	 mov     sournam[bx+3],0   
	 add     dx,2 
	 mov     ah,09h
	 int     21h 
	 mov     ah,09
	 lea     dx,clrf
	 int     21h
	 call    openread
toscan     endp
;------------------------------- 
tosear   proc     near	 
         Mov     Ah,09h
         Mov     DX,Offset inputmsg
	 Int     21H         ;提示输入文件名 
	 Mov     ah,0ah      ;取文件名
	 lea     dx,  sournam
         int     21h 
	 sub     bh, bh
	 mov     bl,[sournam+1]
	 mov     sournam[bx+2],0
	 mov     sournam[bx+3],0   
	 add     dx,2 
	 mov     ah,09h
	 int     21h 
	 mov     ah,09
	 lea     dx,clrf
	 int     21h
	 
         Mov     Ah,09h
         Mov     DX,Offset inputstr
	 Int     21H       ;提示输入查找串
	 mov     ah,09        
         lea     dx,clrf
         int     21h
	 Mov     ah,0ah      ;取查找串
	 lea     dx,  searstri
         int     21h 
	 sub     bh, bh
	 mov     bl,[searstri+1]
	 mov     searstri[bx+2],'$'   
	 add     dx,2 
	 mov     ah,09
	 int     21h 
	  
	 call    openread
tosear   endp	 
;------------------------------- 
torep      proc near	 
	 Mov     Ah,09h
         Mov     DX,Offset inputmsg
	 Int     21H         ;提示输入文件名 
	 Mov     ah,0ah      ;取文件名
	 lea     dx,  sournam
         int     21h 
	 sub     bh, bh
	 mov     bl,[sournam+1]
	 mov     sournam[bx+2],0
	 mov     sournam[bx+3],0    
	 add     dx,2 
	 mov     ah,09h
	 int     21h 
	 mov     ah,09
	 lea     dx,clrf
	 int     21h
	 
         Mov     Ah,09h
         Mov     DX,Offset inputstr
	 Int     21H       ;提示输入查找串
	 mov     ah,09        
         lea     dx,clrf
         int     21h
	 Mov     ah,0ah      ;取查找串
	 lea     dx,  searstri
         int     21h 
	 sub     bh, bh
	 mov     bl,[searstri+1]
	 mov     searstri[bx+2],'$'   
	 add     dx,2 
	 mov     ah,09h
	 int     21h 
	 mov     ah,09
	 lea     dx,clrf
	 int     21h

	 
	 Mov     Ah,09h
         Mov     DX,Offset repmsg
	 Int     21H         ;提示输入替换串
	 mov     ah,09
	 lea     dx,clrf
	 int     21h	 
	 Mov     ah,0ah       
	 lea     dx,  repstr ;取替换串
         int     21h 
	 sub     bh, bh
	 mov     bl,[repstr+1]
	 mov     repstr[bx+2],'$'   
	 add     dx,2 
	 mov     ah,09h
	 int     21h 
	 mov     ah,09
	 lea     dx,clrf
	 int     21h
         call    openread
torep  endp	 
;--------------------------------------------------------字符读进缓冲区buff
openread  proc    near
          Mov     AX,@data
          Mov     DS,AX
          mov     al,0
          Mov     Ah,3dH
          lea     dx,sournam
          add     dx,2
          Int     21H       ;按读写方式打开文件
          Jc      Err2 
          Mov     bx,AX; 
          push    bx
          mov     handle,ax
          jmp     read 
  Err2:
        mov      dl,al
        mov      ah,2
        add      dl,30h
        int      21h
        Mov      DX,Offset Error2
        jmp      ShowErr     
 read:     
          mov     cx,  0
          mov     dx, 0
          pop     bx
          cmp     dx, 0
          jge     point
          not     cx
 point:
          mov     al,00
          mov     ah, 42h
          int     21h;调节读写指针位置,基本上没发挥作用
          mov     ah,09
	  lea     dx,clrf
	  int     21h 
	  mov     si,1
  loopread:	   
	   mov     ah,3fh
	   lea     dx,buff[si]
	   mov     bx,handle
	   mov     cx,1
	   int     21h
           inc      result1
           and     ax,ax; 文件尾吗
           jz      close;是,退出
           
           cmp     buff[si],0ah;文件行尾吗?
           je      addline ;是,加一行
           
           inc     si
           jmp     loopread
         
  addline:
           inc     result2
           inc     si
           jmp     loopread   
 close:    mov      buff[si],-1
           mov     ah,3eh
           int     21h  
           mov     ch,temp
           cmp     ch,'1'
           je      totoscan
           jmp     tocmp   
totoscan:  
       
      	 lea dx,result1msg
     	  mov ah,9
     	 int 21h 
       	mov  cx,result2;显示行数和字符数
   	 sub  cx,1
   	 add  cx,cx
   	 sub  si,cx 
   	 sub  si,1 
   	 mov   ax,si
    	mov   cl,0
    
     	jmp   dis
 dis:
    mov   dl,10
    div   dl
    mov   bx,ax; ah余数 al商
    
    mov   dl,bh;显示余数
    
    push  dx
    inc   cl
    cmp   bl,0ah;是否除尽
    jb    gonext;显示最后一位商
    
    mov   ah,0 ;清零    
    jmp   dis;继续除
    
 gonext:
      
      mov   dl,bl
      add   dl,30h   
      mov   ah,02
      int   21h
     
 shang:
      pop     dx
      add     dl,30h   
      mov     ah,02
      int     21h
      dec     cl
      cmp     cl,0
      jne     shang       
      mov     ah,09
      lea     dx,clrf
      int     21h 
      mov     ah,09
      lea     dx,result2msg
      int     21h 
      mov     ax,result2
      mov     dl,10
      div     dl
      mov     dx,ax
      add     dl,30h
      mov     ah,02
      int     21h
      add     dh,30h
      mov     dl,dh
      mov     ah,02
      int     21h
      mov     ah,09
      lea     dx,clrf
      int     21h 
      mov  bx,1
      scanloop:
      mov  dl,buff[bx]
       cmp  dl,-1
       je   scannext
       cmp  dl, '$'
       je   scannext
       mov  ah, 2
       int  21h
       inc  bx
       jmp  scanloop
 scannext:
          mov     ah,3eh
          int     21h           
          call    exit
 tocmp:        
           mov     ch,temp
           cmp     ch,'2'
           je      totosear
           jne     totorep
totosear:   
           call    sear
totorep:    
           call    repl    
openread    endp

⌨️ 快捷键说明

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