Я пытаюсь удалить файл с расширением «.lnk», используя архитектуру сборки 8086. Когда я пишу «jmp DELETE» после «mov si, dx» и пропускаю внутреннюю часть, 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
cmp [si], 'L'
. Некоторые ассемблеры считают это сравнением 16-битного WORD в [si], а не байта. - person Michael Petch   schedule 22.11.2015cmp [si], 'L'
(из них 4) должны иметь видcmp byte ptr [si], 'L'
- person Michael Petch   schedule 22.11.2015*
соответствует только файлам без расширения. Чтобы сопоставить все файлы, вам нужно*.*
, или чтобы сопоставить.lnk
файлов, используйте*.lnk
. - person lurker   schedule 22.11.2015