2014-01-18 77 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