поиск строки в файле в ASSEMBLY - PullRequest
0 голосов
/ 11 июля 2011

Мне нужно написать программу в СБОРКЕ, чтобы искать строку (ввод для клавиатуры) во всем файле текущей папки. Какое прерывание я могу использовать и каков алгоритм этой программы?

1 Ответ

1 голос
/ 11 июля 2011

Хм ... вот код, который я написал (по крайней мере, я думаю я написал его - похоже, код, который я написал, хотя у него нет комментариев для его подтверждения)чтобы вывести список файлов в каталоге:

.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

Вот еще один, который открывает и отображает файл:

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

Поиск данных в файле будет в основном вопросом написанияstrstr на ассемблере.Возможно, вы захотите начать с быстрого сканирования, используя rep cmpsb, а затем выполнить побайтное сравнение, когда найдете подходящее соответствие.Если это не помогло, вы увеличиваете позицию и попробуйте снова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...