2

我正在尝试使用程序集 8086 架构删除具有“.lnk”扩展名的文件。当我在“mov si, dx”之后写“jmp DELETE”并跳过内部、back1、back2、back3 部分时,我的代码会删除所有文件,但是当它逐个字符检查它是否具有 .lnk 扩展名时,它不会不要删除其中任何一个,甚至不删除扩展名为 .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
4

1 回答 1

2

您可能会对以下几点感兴趣:

  • 将文件掩码更改为

    *.*
    
  • 为什么要设置这么大的DTA?。

    DTA 44 dup(?)
    
  • 总是写cmp byte ptr [si], ...

  • 不要在 3 个字符之后停止比较。添加第四个比较以查看该点是否存在。然后你就会知道LNK确实是一个文件扩展名。

  • 您的 4Fh DOS 调用不需要 CX 和 DX 参数。

  • 你不解释结果来自

    cmp [si], 'L'
    
于 2015-11-22T18:25:06.930 回答