我正在尝试删除包含" .lnk"的文件。使用程序集8086体系结构扩展。当我写" jmp DELETE"在" mov si,dx"并且跳过内部,后退1,后退2,后退3部分,我的代码删除了所有文件,但是当它检查它是否具有逐字符扩展名时,它不会删除任何文件,甚至不删除文件。 lnk扩展。为什么会这样?
.MODEL SMALL
.STACK 100H
.DATA
FILE DB "*", 0
DTA DB 128H DUP(?)
FILENAME DB 50 DUP(?)
.CODE
MAIN PROC
MOV AX,@DATA
MOV DS,AX
;SET DTA
MOV DX,OFFSET DTA
MOV AH,1AH
INT 21H
;FIRST SEARCH
MOV DX,OFFSET FILE
MOV CX,0
MOV AH,4EH
INT 21H
JC QUIT
OUTER_LOOP:
;DELETE
LEA DX,DTA+30
mov si, dx
inner:
cmp [si], 0
je back1
inc si
jmp inner
back1:
dec si
cmp [si],'K'
je back2
jmp NEXT
back2:
dec si
cmp [si],'N'
je back3
jmp NEXT
back3:
dec si
cmp [si], 'L'
delete:
LEA DX,DTA+30
MOV AH,41H
INT 21H
;INITIATE NEXT SEARCH
NEXT:
MOV DX,OFFSET FILE
MOV CX,0
MOV AH,4FH
INT 21H
JC QUIT
JMP OUTER_LOOP
QUIT:
MOV AX,4C00H
INT 21H
MAIN ENDP
END MAIN
答案 0 :(得分:2)
您可能会对这些观点感兴趣:
将文件掩码更改为
*.*
为什么要设置这么大的DTA?
DTA 44 dup(?)
始终写cmp byte ptr [si], ...
不要在3个字符后停止比较。添加第四个比较以查看该点是否存在。然后你就会知道 LNK 确实是一个文件扩展名。
您的4Fh DOS调用不需要CX和DX参数。
您无法解释
的结果cmp [si], 'L'