📄 rename.txt
字号:
.386
WRITE MACRO A
LEA DX,A
MOV AH,9
INT 21H
ENDM
DATA SEGMENT USE16
SII DW ?
DIRO DB 80 DUP(0)
DIRN DB 80 DUP(0)
DIR3 DB 80 DUP(0)
DIR_BUF DB 44 DUP(0)
LENG DW ?
LENG2 DW ?
OLD DB 5 DUP(0)
NEW DB 5 DUP(0)
BUF DB 0AH,0DH,'The file '
BUF1 DB 25 DUP(0) ,0AH,0DH,'is existed,do you want to cover it ,press y to cover it press other keys to skip: $'
FLAG DB ?
ERROR1 DB 0AH,0DH,'MINAND ERROR! $'
ERROR2 DB 0AH,0DH,'PATH ERROR OR PATH NOT EXISTED! $'
DATA ENDS
STACK SEGMENT USE16
DB 400 DUP(0)
STACK ENDS
CODE SEGMENT USE16
ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV AH,51H
INT 21H
MOV ES,BX
MOV SI,80H
INC SI
LEA DI,FLAG
CALL _PART
MOV SII,SI
LEA DI,DIRO
CALL _PART
MOV SI,SII
LEA DI,DIRN
CALL _PART
MOV SI,SII
LEA DI,DIR3
CALL _PART
MOV BX,CX
DEC BX
CMP DIRN[BX],'\'
INC BX
JE NEXT
MOV DIRO[BX],BYTE PTR '\'
MOV DIRN[BX],BYTE PTR '\'
MOV DIR3[BX],BYTE PTR '\'
INC BX
MOV DIRN[BX],0
MOV DIRO[BX],0
MOV DIR3[BX],0
NEXT:
LEA DI,OLD
CALL _PART
LEA DI,NEW
CALL _PART
PUSH DS
POP ES
CMP FLAG,BYTE PTR '1'
JNE FLAG1
CALL SOME
JMP EXITT
FLAG1:
CMP FLAG, BYTE PTR '2'
JNE ERROR
MOV LENG,BX
MOV LENG2,BX
CALL RNAME
JMP EXITT
ERROR:WRITE ERROR1
EXITT:
MOV AH,4CH
INT 21H
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
RNAME PROC ;DIR保存路径 OLD 保存原始后缀,NEW保存新后缀,LENG路径串长度
PUSH DI
PUSH BX
MOV BX,LENG ;LENG,LENG1
MOV DIRO[BX],BYTE PTR '*'
MOV DIR3[BX],BYTE PTR '*'
INC BX
MOV DIRO[BX],BYTE PTR '.'
MOV DIR3[BX],BYTE PTR '.'
INC BX
LEA DI,DIRO
LEA SI,OLD
CALL ADDS
LEA DI,DIR3
LEA SI,OLD
CALL ADDS
LEA DX,DIR_BUF
MOV AH,1AH
INT 21H
LEA DX,DIRO
MOV CX,0
MOV AH,4EH
INT 21H
JNC CHAN
CMP AX,3
JNE EXIT2
WRITE ERROR2
MOV AH,4CH
INT 21H
CHAN: CALL CHANGE
P3 : LEA DX,DIR3
MOV CX,0
MOV AH,4FH
INT 21H
JC EXIT2
CALL CHANGE
JMP P3
EXIT2 :
POP BX
POP DI
RET
RNAME ENDP
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
CHANGE PROC
PUSH BX
MOV BX,LENG2
LEA DI,DIR_BUF+30
P: MOV AL,[DI]
CMP AL,'.'
JE EXIT1
MOV DIRN[BX],AL
MOV DIRO[BX],AL
INC DI
INC BX
JMP P
EXIT1:
MOV DIRN[BX],'.'
MOV DIRO[BX],'.'
INC BX
MOV LENG ,BX
LEA DI,DIRO
LEA SI,OLD
CALL ADDS ;将原始后缀加于diro
MOV BX,LENG
LEA DI,DIRN
LEA SI,NEW
CALL ADDS ;将新后缀加于dirn
LEA DX,DIRO
LEA DI,DIRN
MOV AH,56H
INT 21H
CMP AL, 5
JNE OUT2
MOV SI,DI
LEA DI,BUF1
MOV BX,0
CALL ADDS
MOV DI,SI
MOV BX,DX
WRITE BUF
MOV AH,1
INT 21H
CMP AL,'Y'
JE RE
CMP AL,'y'
JNE OUT2
RE:
MOV DX,DI
MOV AH,41H
INT 21H
MOV DX,BX
MOV AH,56H
INT 21H
JNE OUT2
OUT2: POP BX
RET
CHANGE ENDP
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ADDS PROC ;DI 目的串,SI原串 bx 原串原始长度
PUSH DI
PUSH SI
PUSH BX
ADD DI,BX
P2: CMP [SI],BYTE PTR 0
JE EXIT3
MOV AL,[SI]
MOV [DI],AL
INC SI
INC DI
JMP P2
EXIT3:
MOV [DI],BYTE PTR 0
POP BX
POP SI
POP DI
RET
ADDS ENDP
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_PART PROC
PUSH AX
PUSH DI
MOV CX,0
A: CMP ES:[SI],BYTE PTR ' '
JNE B
INC SI
JMP A
B: MOV AL,ES:[SI]
MOV [DI],AL
INC CX
INC SI
INC DI
CMP ES:[SI],BYTE PTR ' '
JE OUT1
CMP ES:[SI],BYTE PTR 0DH
JNE B
OUT1:POP DI
POP AX
RET
_PART ENDP
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
REALL PROC
PUSH SI
PUSH DI
MOV SI,SII
LEA DI,DIRO
CALL _PART
MOV SI,SII
LEA DI,DIRN
CALL _PART
MOV SI,SII
LEA DI,DIR3
CALL _PART
MOV BX,CX
LEA DI,OLD
CALL _PART
LEA DI,NEW
CALL _PART
CALL SOME
POP DI
POP SI
RET
REALL ENDP
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
SOME PROC ;路径,原始后缀,新后缀,路径长度,由于递归故用堆栈保存长度,于是用Bx传入
MOV LENG ,BX
MOV LENG2,BX
call RNAME
MOV DIR3[BX],'*'
INC BX
MOV DIR3[BX],0
PUSH BX
LEA DX,DIR_BUF
MOV AH,1AH
INT 21H
LEA DX,DIR3
MOV CX,10H
MOV AH,4EH
INT 21H
JC EXIT3
MOV BX,LENG2
LEA DI,DIR_BUF+30
MOV AL,[DI]
CMP AL,'.'
JE PP
LOOP1:MOV AL,[DI]
CMP AL,0
JE PPP
MOV DIRN[BX],AL
MOV DIRO[BX],AL
MOV DIR3[BX],AL
INC DI
INC BX
JMP LOOP1
PPP:
MOV DIRN[BX],'\'
MOV DIRO[BX],'\'
MOV DIR3[BX],'\'
INC BX
MOV DIRN[BX],0
MOV DIRO[BX],0
MOV DIR3[BX],0
MOV SI,0
PP1 : CMP SI,20
JE QUIT1
PUSH WORD PTR DIR_BUF[SI]
ADD SI,2
JMP PP1
QUIT1:
CALL SOME
MOV SI,20
PP2 : CMP SI,0
JE PP
POP WORD PTR DIR_BUF[SI]
SUB SI,2
JMP PP2
PP: POP BX
LEA DX,DIR_BUF
MOV AH,1AH
INT 21H
LEA DX,DIR3
MOV CX,10H
MOV AH,4FH
INT 21H
JC EXIT4
PUSH BX
DEC BX
LEA DI,DIR_BUF+30
MOV AL,[DI]
CMP AL,'.'
JE PP
LOOP2:MOV AL,[DI]
CMP AL,0
JE PPPP
MOV DIRN[BX],AL
MOV DIRO[BX],AL
MOV DIR3[BX],AL
INC DI
INC BX
JMP LOOP2
PPPP : MOV DIRN[BX],'\'
MOV DIRO[BX],'\'
MOV DIR3[BX],'\'
INC BX
MOV DIRN[BX],0
MOV DIRO[BX],0
MOV DIR3[BX],0
MOV SI,0
PP5: PUSH WORD PTR DIR_BUF[SI]
ADD SI,2
CMP SI,20
JBE PP5
CALL SOME
MOV SI,20
PP4: POP WORD PTR DIR_BUF[SI]
SUB SI,2
CMP SI,0
JGE PP4
JMP PP
EXIT4:
RET
SOME ENDP
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
CLEAR PROC
PUSH DI
PUSH CX
CMP CX,0
JZ EXITA ;DI为路径址,CX为长度
LOOPA:MOV [DI],BYTE PTR 0
INC DI
LOOP LOOPA
EXITA:
POP CX
POP DI
RET
CLEAR ENDP
;>>>>>>>>>>>>>>>>>>>>>>>>>.>>>>>>>>
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -