回 帖 发 新 帖 刷新版面

主题:查找匹配字符串~~~~~~~

程序接收用户键入的一个关键字及关键句子.如果句子中不包含关键字则显示'No match';如果句子中包含关键字则显示'match'且把该字在句子中的位置用十六进制数显示出来~~~~~~~~~~~~~~



请高手帮帮忙啊~~~~~~~~我刚学汇编啊!~~~~~~~~一窍不通啊~~~~~~帮帮忙啊~~快啊

回复列表 (共5个回复)

沙发

大概提示一下:
利用DOS中断输入字符串放入buffer中,如果是win32编程,要用到控制台的ReadConsole函数。
用cmp和loop将关键字与buffer的每一个字符进行比较
将比较结果输出     
    

板凳

我转发一个相关的代码你
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 楼

上面的是:从键盘输入一串字符 在这串字符中是否有字"student"

4 楼

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 楼

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

我来回复

您尚未登录,请登录后再回复。点此登录或注册