Assembly 是否在字符串中查找指定字母的匹配项?
我也尝试过这样定义字符串数组:Assembly 是否在字符串中查找指定字母的匹配项?,assembly,x86,Assembly,X86,我也尝试过这样定义字符串数组: org 100h mov si, 0 mov di, 0 back: cmp string[si], 'a' inc si jz found jmp nfound found: inc di nfound: loop back ret string db 'n','a','n','b','o','N','a','n','a','w','a','g','o','s','h','t'
org 100h
mov si, 0
mov di, 0
back:
cmp string[si], 'a'
inc si
jz found
jmp nfound
found:
inc di
nfound:
loop back
ret
string db 'n','a','n','b','o','N','a','n','a','w','a','g','o','s','h','t','b','o','Q','a','s','a','b'
jz的假设从来都不是真的,有什么问题吗?如果我删除si增量指令,条件将返回true 如果阅读英特尔手册中的
INC
说明,您将看到:
受影响的标志CF
标志不受影响。根据结果设置的、SF
、ZF
、AF
和PF
标志
因此,您的jzfound
指令基于inc si
的结果而不是cmp
的结果进行分支。我建议您将inc si
指令移到环回
通过检查零标志计算比较结果之前的右侧
在cmp字符串[si]之后,“a”如果两者相同,则将设置零标志。因此,您应该在比较之后立即使用jzfind
在您的代码中,您在比较后使用的是inc si
,并且您丢失了比较结果,在这种情况下,如果si
的值在increment
之后为零,则只会设置零标志
string db "nan bo Nanawa gosht bo Qasab"