在ASSEMBLY中搜索文件中的字符串

时间:2011-07-11 03:41:23

标签: string file assembly

我需要在ASSEMBLY中编写一个程序来搜索当前文件夹的所有文件中的字符串(键盘输入)。 我可以使用什么中断以及该程序的算法是什么?

1 个答案:

答案 0 :(得分:1)

嗯......这是我写的一些代码(至少我我写了它 - 它看起来像我写的代码,虽然它没有任何评论来证实它)列出目录中的文件:

.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进行快速扫描,然后在找到候选匹配项时进行逐字节比较。如果失败,则递增位置并重试。