我需要在ASSEMBLY中编写一个程序来搜索当前文件夹的所有文件中的字符串(键盘输入)。 我可以使用什么中断以及该程序的算法是什么?
答案 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
进行快速扫描,然后在找到候选匹配项时进行逐字节比较。如果失败,则递增位置并重试。