主题:查找匹配字符串~~~~~~~
千穗09
[专家分:0] 发布于 2006-11-24 21:18:00
程序接收用户键入的一个关键字及关键句子.如果句子中不包含关键字则显示'No match';如果句子中包含关键字则显示'match'且把该字在句子中的位置用十六进制数显示出来~~~~~~~~~~~~~~
请高手帮帮忙啊~~~~~~~~我刚学汇编啊!~~~~~~~~一窍不通啊~~~~~~帮帮忙啊~~快啊
回复列表 (共5个回复)
沙发
bruce1914 [专家分:250] 发布于 2006-11-25 13:19:00
大概提示一下:
利用DOS中断输入字符串放入buffer中,如果是win32编程,要用到控制台的ReadConsole函数。
用cmp和loop将关键字与buffer的每一个字符进行比较
将比较结果输出
板凳
windychen00 [专家分:40] 发布于 2006-11-26 03:15:00
我转发一个相关的代码你
data segment
msg db 'Please type your words!',10,13,'$'
words db 100,?,100 dup(?)
error db 'Error!please type your words again',10,13,'$'
data ends
code segment
assume cs:code,ds:data
start: mov ax,data
mov ds,ax
lea dx,msg
mov ah,09h
int 21h
next: lea dx,words
mov ah,0ah
int 21h
mov dl,0ah
mov ah,02h
int 21h
mov dl,0dh
mov ah,02h
int 21h
mov cl,words+1
cmp cl,7
jb err
mov si,2
s1: mov al,words[si]
inc si
dec cl
jz err
c1: cmp al,'s'
jne s1
c2: mov al,words[si]
inc si
dec cl
cmp al,'t'
jne s1
c3: mov al,words[si]
inc si
dec cl
cmp al,'u'
jne s1
c4: mov al,words[si]
inc si
dec cl
cmp al,'d'
jne s1
c5: mov al,words[si]
inc si
dec cl
cmp al,'e'
jne s1
c6: mov al,words[si]
inc si
dec cl
cmp al,'n'
jne s1
c7: mov al,words[si]
inc si
dec cl
cmp al,'t'
jne s1
jmp exit
err: lea dx,error
mov ah,09h
int 21h
jmp next
exit: mov ah,4ch
int 21h
code ends
end start
3 楼
windychen00 [专家分:40] 发布于 2006-11-26 03:15:00
上面的是:从键盘输入一串字符 在这串字符中是否有字"student"
4 楼
千穗09 [专家分:0] 发布于 2006-11-27 15:43:00
DATAREA SEGMENT
STRING1 DB "ENTER KEYWORD:$"
STRING2 DB "ENTER SENTENCE:$"
STRING3 DB "MATCH AT LOCATION:$"
STRING4 DB "NO MATCH.",13,10,"$"
STRING5 DB "H OF THE SENTENCE.$"
KEYWORD DB 50D,?,51D DUP(?)
SENTENCE DB 50D,?,51D DUP(?)
DATAREA ENDS
CODE SEGMENT
MAIN PROC FAR
ASSUME CS:CODE,DS:DATAREA,ES:DATAREA
START: PUSH DS
SUB AX,AX
PUSH AX
MOV AX,DATAREA
MOV DS,AX
MOV ES,AX
LEA DX,STRING1
MOV AH,09H
INT 21H
LEA DX,KEYWORD
MOV AH,0AH
INT 21H
MOV AH ,02H
MOV DL,0AH
INT 21H
LEA DX,STRING2
MOV AH,09H
INT 21H
LEA DX,SENTENCE
MOV AH,0AH
INT 21H
MOV AH,02H
MOV DL,0AH
INT 21H
LEA SI,KEYWORD+2
LEA DI,SENTENCE+2
MOV AX,0
MOV AL,[SENTENCE+1]
MOV AH,[KEYWORD+1]
CMP AL,AH
JL NO
SUB AL,AH
MOV AH,0
MOV CX,AX
INC CX
5 楼
千穗09 [专家分:0] 发布于 2006-11-27 15:43:00
COMPARE : PUSH CX
MOV CX,3
CLD
REPZ CMPSB JZ MATCH
MOV AX,3
SUB AX,CX
SUB SI,AX
MOV AX,2
SUB AX,CX
SUB DI,AX
POP CX
LOOP COMPARE
NO: LEA DX,STRING4
MOV AH,09H
INT 21H
JMP EXIT
MATCH: POP CX
MOV BX,DI
LEA DX,STRING3
MOV AH,09H
INT 21H
SUB BX,OFFSET SENTENCE+2
SUB BX,2
CALL CHANGE
LEA DX,STRING5
MOV AH,09H
INT 21H
EXIT : RET
MAIN ENDP
CHANGE PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV CH,4
MOV CL,4
ROTATE: ROL BX,CL
MOV AL,BL
AND AL,0FH
ADD AL,30H
CMP AL,3AH
JL PRINTIT
ADD AL,7H
PRINTIT: MOV DL,AL
MOV AH,2
INT 21H
DEC CH
JNZ ROTATE
POP DX
POP CX
POP BX
POP AX
RET
CHANGE ENDP
CODE ENDS
END START
我来回复