2011-07-11 1 views
0

J'ai besoin d'écrire un programme dans ASSEMBLY pour rechercher une chaîne (entrée pour clavier) dans tous les fichiers du dossier en cours. Quelle interruption puis-je utiliser et quel est l'algorithme de ce programme?rechercher une chaîne dans un fichier dans l'ASSEMBLAGE

+3

Je suppose que ce sera infructueux, mais quelle plateforme ciblez-vous? –

+0

La langue n'affecte pas vraiment le (s) algorithme (s) que vous souhaitez utiliser. –

+0

@Jerry: Non, mais il demande des interruptions, ce qui implique qu'il veut plus qu'un algorithme général de recherche de chaînes. –

Répondre

1

Hmm ... voici un code que j'ai écrit (au moins je pense je l'ai écrit - il ressemble à du code que j'aurais écrit, mais il n'a pas de commentaires pour le confirmer) pour lister le fichiers dans un répertoire:

.model small, c 

.stack 

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

.code 
main proc 
    mov ax, @Data 
    mov ds, ax 
    mov dx,offset DTA 
    mov ah,1Ah 
    int 21h ; set DTA location 

    mov dx,offset file_spec 
    xor cx, cx 
    mov ah,4Eh 
    int 21h 
    jc quit 

print_name: 
    lea si, DTA + 30 
next_char: 
    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 
quit: 
    mov ax, 4c00h 
    int 21h 
main endp 
    end main 

Voici une autre qui ouvre et affiche un fichier:

data segment para public 'DATA' 
line db 80 dup(?) 
file db "test.txt" 
handle dw ? 
data ends 

code segment para public 'CODE' 
assume ds:data 
assume cs:code 
main proc 
    mov ax,data 
    mov ds,ax 

    ; okay. First, open the file 
    mov dx,offset file 
    mov ax,3d00h 
    int 21h 

    mov handle,ax 

read_loop: 

    mov dx,offset line 
    mov bx,handle 
    mov cx, 80 ; the size of our buffer. 
    mov ah,3fh 

    int 21h 

    jc done 

    test ax,ax 
    jz done 

    mov bx,1 
    mov cx,ax 
    mov dx,offset line 
    mov ah,40h 
    int 21h 
    jmp read_loop 

done: 

    mov ax,4c00h 
    int 21h 
main endp 
code ends 
     end main 

la recherche des données dans le fichier seraient essentiellement une question d'écrire un strstr en langage assembleur. Vous voudrez probablement commencer par une analyse rapide en utilisant rep cmpsb, puis effectuez une comparaison octet par octet lorsque vous trouvez une correspondance candidate. Si cela échoue, vous augmentez la position et réessayez.

+0

merci beaucoup. Cela m'aide vraiment –

Questions connexes