主题:一汇编题,请好心人帮忙
a19851222
[专家分:0] 发布于 2006-08-30 20:11:00
编写一个查找匹配字符串程序。
要求:从键盘输入一个句子和一个关键字,在句子中查找该关键字,给出关键字在句子中的位置。
注:关键字应该是一个单词,位置也是“第×个单词”这样描述。涉及有若干个合适匹配的问题。算法基本上会,只是对汇编不够熟悉,而且时间紧迫,请好心人帮忙
回复列表 (共5个回复)
沙发
每天爬行10cm [专家分:80] 发布于 2006-09-02 20:09:00
顶
板凳
每天爬行10cm [专家分:80] 发布于 2006-09-02 21:56:00
输入的句子中间不能有标点,单词之间用单个空格,句子结尾是标点。
data segment
mess1 db 0dh,0ah,'please type in a sentence',0dh,0ah,'$'
mess2 db 0dh,0ah,'please type in the word ',0dh,0ah,'$'
mess3 db 0dh,0ah,'the word appares at ',0dh,0ah,'$'
sntc label byte
max3 db 30
act db ?
max db 30 dup(' ')
word1 label byte
max2 db 15
act1 db ?
max1 db 15 dup(' ')
buffer db 15 dup(' ')
posit dw 0
ten db 10
counter db 0
col db 0
row db 0
data ends
;-------------------------------------------------------------------
code segment
assume cs:code,ds:data,es:data
main proc far
start:
mov ax,data
mov ds,ax
mov es,ax
lea dx,mess1
call print
lea dx,sntc
call input
lea dx,mess2
call print
lea dx,word1
call input
call compare
mov ax,4c00h
int 21h
main endp
;-------------------------------------------------------------
;print the message
print proc near
mov ah,09h
int 21h
ret
print endp
;-------------------------------------------------------------
;input a sentence and a word1
input proc near
mov ah,0ah
int 21h
ret
input endp
;-------------------------------------------------------------
compare proc near
lea si,act
trans1: mov counter,0 ;计数器
inc si ;消除空格的影响
cmp act,0 ;程序的出口
jz exit
lea di,buffer
dec act ;消除空格和最后标点的影响
trans:
cld
;moves a word1 to buffer
movsb ;把一个单词中的字符一个个的传给buffer
inc counter
dec act
cmp act,0
je finish
cmp byte ptr [si],' ' ;判断一个单词是否传输完毕
jne trans
finish:
inc posit ;比较buffer中的和想查找的单词
mov ch,0
mov cl,act1 ;首先判断二者字符个数是否相等
cmp cl,counter
je goon
jmp trans1 ;不相等就去传输下一个单词给buffer
goon: push si ;相等就比较
lea si,buffer
lea di,max1
repe cmpsb
pop si
jnz trans1 ;不相同就传输下一个单词
lea dx,mess3 ;相同就输出
call print
mov ax,posit
cmp ax,10
div ten
mov cx,ax
add cx,3030h
mov dl,cl ;可能是大于10的数
mov ah,2
int 21h
mov dl,ch
mov ah,2
int 21h
jmp trans1
exit:
ret
compare endp
;--------------------------------------------
;----------------------------------------------
code ends
end start
3 楼
a19851222 [专家分:0] 发布于 2006-09-05 19:28:00
谢谢谢谢谢谢,真好人阿!
4 楼
每天爬行10cm [专家分:80] 发布于 2006-09-05 20:28:00
别客气,这个程序还可以做许多改进,
兄弟啊,要不你给我的帖子评个分,我好..........啊[em1]
5 楼
a19851222 [专家分:0] 发布于 2006-09-06 10:17:00
呵呵,已经评了,再次感谢
我来回复