📄 save.asm
字号:
;------------------------------
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 + -