我正在尝试检查一个字符串在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”中包含偏移量。
答案 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