2014-01-18 112 views
0

任務是搜索一個字符串,並查找輸入的字符是否在字符串MES3中或不是。這裏是我的代碼,但它不會搜索字符串中的所有字母,只是第一個。騎自行車上班,並通過所有的符號串字符串彙編

masm 
model small 
.DATA 
MSG1 DB 10,13,'CHARACTER FOUND :) $' 
MSG2 DB 10,13,'CHARACTER NOT FOUND :($' 
MSG3 DB 10,13,'there is no hope of doing this bla : $' 
MSG4 DB 10,13,'ENTER THE CHARACTER TO BE SEARCHED : $' 
NEW DB 10,13,'$' 
NEW1 DB 10,13,'$' 
NEW2 DB 10,13,'$' 



.CODE 
ASSUME CS:@CODE,DS:@DATA 
START: 
    MOV AX,@DATA 
    MOV DS,AX 
    LEA di,[MSG3] 

DOWN: 
    LEA dx,NEW 
    MOV AH,09H 
    INT 21H 
    LEA DX,MSG4 
    MOV AH,09H 
    INT 21H 

    MOV AH,01H 
    INT 21H 

    MOV DI,0 
UP1: 

    CMP AL,[MSG3+di] 
    JE DOWN3 
    INC DI 
    LOOP UP1 
    LEA DX,MSG2 
    MOV AH,09H 
    INT 21H 
    JMP FINISH 

DOWN3: 
    LEA DX,MSG1 
    MOV AH,09H 
    INT 21H 
FINISH: 
    INT 3 

    mov AX, 4c00h 
    int 21h 
    END START 

回答

0

LOOP指令搜索(您在LOOP UP1使用)遞減CX並跳轉到目標標籤如果CX != 0。因此,您需要將CX設置爲UP1標籤之前要比較的最大字符數。

或者您可以用CMP BYTE PTR [MSG3-1+di],'$'/JNE UP1代替LOOP UP1,因爲字符串是'$' - 終止。

+0

謝謝,但它仍然沒有工作。我設置CX爲34,但它仍然不認識其他符號比第一個 – user3185482

+0

它適用於我。如果我輸入例如一個'b',程序打印'CHARACTER FOUND:)'。如果我輸入的東西不在'MSG3'中,就像'q'一樣,它說'CHARACTER NOT FOUND:('。 – Michael

+0

我又做了,這次它的工作非常感謝你 – user3185482