2017-10-13 19 views
0

J'ai créé un programme qui contient différentes fonctions, en fonction de la touche enfoncée. Mon programme crée un dossier puis un fichier .txt dans ce dossier. Je veux montrer une liste mise à jour des fichiers .txt dans le dossier que j'ajoute plus et le vérifie. Cependant, lorsque j'exécute mon programme, il affiche uniquement le dernier fichier .txt créé. Comment puis-je résoudre ce problème et afficher la liste de tous les fichiers .txt?Assemblage: Utilisation de 4eh et 4fh pour imprimer une liste contenant les fichiers dans un répertoire

variables déclarées:

file_spec db "*.*", 0 
DTA db 128h dup(0) 

dirlist proc near 
     mov dx,offset DTA 
     mov ah,1ah 
     int 21h 
     mov dx,offset file_spec 
     xor cx, cx 
     mov ah,4eh 
     int 21h 
     call print_name 
     call next_char 
     ret 
    dirlist endp 

    print_name proc near 
     mov dx,10 
     lea si, DTA + 1eh 
     ret 
    print_name endp 

    next_char proc near 
     lodsb 
     int 29h 
     test al, al 
     jnz next_char 
     mov al, 13 
     int 29h 
     mov al, 10 
     int 29h 
     mov dx, offset file_spec 
     xor cx, cx 
     mov ah, 4fh 
     int 21h 
     jnc print_name 
     ret 
    next_char endp 
+1

à quoi ressemble "file_spec"? avez-vous essayé 'db" * .txt ", 0'? – Tommylee2k

+0

Votre flux de code semble incorrect. 'jnc print_name' ira à' print_name', mettre 'dx' et' si' et retourner à 'dirlist' qui se termine alors. Vous ne parcourez pas les fichiers en boucle. – Jester

+0

@Jester Comment faire une boucle dans les fichiers? Désolé, je ne suis pas encore très familier avec toutes les fonctions. –

Répondre

0

Votre flux de code semble erroné. jnc print_name ira à print_name, définir dx et si et retourner à dirlist qui se termine alors. Vous ne parcourez pas les fichiers en boucle.

Une modification qui a du sens pour moi consiste à transformer next_char en une étiquette simple à l'intérieur de print_name au lieu d'une procédure autonome. En outre, mettre le find_next à l'intérieur de print_name est une mauvaise pratique de codage. Quelque chose comme ceci pourrait fonctionner:

file_spec db "*.*", 0 
DTA db 128h dup(0) 

dirlist proc near 
    mov dx,offset DTA 
    mov ah,1ah 
    int 21h 
    mov dx,offset file_spec 
    xor cx, cx 
    mov ah,4eh 
    int 21h 
    jc done 
next_name: 
    call print_name 
    call find_next 
    jnc next_name 
done: 
    ret 
dirlist endp 

print_name proc near 
    mov dx,10 
    lea si, DTA + 1eh 

next_char: 
    lodsb 
    int 29h 
    test al, al 
    jnz next_char 
    mov al, 13 
    int 29h 
    mov al, 10 
    int 29h 
    ret 
print_name endp 

find_next proc near 
    mov dx, offset file_spec 
    xor cx, cx 
    mov ah, 4fh 
    int 21h 
    ret 
find_next endp