在目录汇编程序中显示隐藏文件

时间:2015-11-26 15:22:57

标签: assembly dos tasm 16-bit

帮我修复程序。程序必须在目录中显示隐藏文件,但它不起作用。当cx = 2时,程序还会显示未隐藏的文件:

.model     tiny
.code
org  100h         ; СОМ-file
start:
push cs         ;cs=ds
pop ds          

mov ah, 9       ;show message on screen
lea dx, msgpathrequest
int 21h

mov ah, 0Ah     ;write directory by keyboard
lea dx, path     
int 21h        

lea dx, pathstring 
push dx         
add dl, byte ptr[pathactual]    
xor al, al      
adc dh,al       
mov di, dx      
mov byte ptr[di], al

mov ah, 3Bh     ;change directory
pop dx          
int 21h
jc no_such_directory  

mov ah,1ah
mov dx,offset dta
int 21h

;find first file
mov ah,4Eh         
mov cx,2h           ; hidden files
lea dx,searchPath
int 21h
jc  no_more_files   ; if CF = 1 - files end

print:
mov ah,9h       
mov dx,offset dta + 1eh
int 21h

; new string
mov ah,9h
 mov dx,offset crlf
int 21h

mov ah,4Fh              ; find next file
mov dx,offset dta
int 21h
jc  no_more_files
mp print   

no_such_directory:
mov ah, 9       ;print message
lea dx, msgnosuchdir
int 21h
jmp no_more_files

no_more_files:                        
mov ah,9h
mov dx,offset message
int 21h

xor ax,ax
int 16h
mov ah,4ch
int 21h

msgpathrequest    db 0Ah, 0Dh, "Enter the full directory name: $"
msgnomorefiles  db 0Ah, 0Dh, "No files found in current directory$"
msgnosuchdir    db 0Ah, 0Dh, "No such directory$"
crlf db 0Dh,0Ah,'$' 
searchPath  db "*.*",0
dta     db 2ch dup (?)
            db "$"
message db 'Press any key...','$'
path        label byte 
pathlen     db 66
pathactual  db ?
pathstring  db 66 dup (?)
 end  start

Result

P.S。对不起我的英文

1 个答案:

答案 0 :(得分:5)

除了为int 21h的服务file attributes flag(FindFirst)和4e(FindNext)指定的4f之外,常规文件始终包含在结果中。唯一的例外是请求的类型是“卷标”。

必须通过查看文件的属性来过滤返回的文件是否感兴趣(查看Disk Transfer Area (DTA)偏移量15处的字节,你可以得到服务2f int 21h

的DTA地址