为什么没有这个汇编代码用" .lnk"删除文件?延期?

时间:2015-11-22 17:51:58

标签: assembly x86-16 file-management emu8086

我正在尝试删除包含" .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

1 个答案:

答案 0 :(得分:2)

您可能会对这些观点感兴趣:

  • 将文件掩码更改为

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

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

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

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

  • 您无法解释

    的结果
    cmp [si], 'L'