如何检查字符串是否包含在另一个TASM中

时间:2018-07-18 19:55:20

标签: arrays string assembly offset tasm

我正在尝试检查一个字符串在TASM中是否包含另一个字符串。我尝试了这段代码,但是没有用:

DATASEG
str1 db "I Love The World$"
str2 db "Do You Love Me??$"
str3 db "I Don't like ya!$"
lst dw 3 dup(?)
check db "Love"
LengthOfCheck dw 4
strLength dw 16
cntr1 dw 0
includesArray dw 3 dup(?)
CODESEG
start:
    mov [lst], offset str1
    mov [lst+1], offset str2
    mov [lst+2], offset str3
    xor si, si
    mov ax, 0
    mov si, 0 
    mov bx, 0
    mov [cntr1], 0 ;
        CheckInclude:
            mov si, [cntr1]
            mov di, [lst+si] ;moves the string offset
            add di, bx
            mov si, offset check ;again, for the includment
            add si, ax
            mov cl, [si]
            cmp cl, [byte ptr di]
            je CheckNext
            jne MoveFrd
            CheckNext:
            inc ax
            cmp ax, [LengthOfCheck]
            je Match
            MoveFrd:
            inc bx
            cmp bx, [strLength]
            je nextString
            ExitL:
        jmp CheckInclude
        Match:
        mov si, [cntr1]
        mov dx, [lst+si]
        mov [includesArray+si], dx
        nextString:
        inc [cntr1]

*该代码只是一个尝试。我该如何解决?我想检查字符串是否包含“ check”并在“ IncludesArray”中包含偏移量。

1 个答案:

答案 0 :(得分:1)

mov [lst], offset str1
mov [lst+1], offset str2
mov [lst+2], offset str3

所有这些偏移量都是字大小的值,您错误地将其存储在字节大小的位置!

您在编写lst dw 3 dup(?)时正确定义了 lst 以容纳单词。
然后以这种方式使用它...

别忘了您的 cntr1 变量需要逐步执行2。

总的来说,这些是更改:

    mov [lst], offset str1
    mov [lst+2], offset str2
    mov [lst+4], offset str3

    add [cntr1], 2