2015-04-22 118 views
0
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' 

我也试图定义字符串数组是这样的:查找字符串中指定字母的出现位置?

string db "nan bo Nanawa gosht bo Qasab" 

的JZ coindition是不正确的,似乎是什么问题?如果我删除了si增量指令,则条件返回true!

回答

1

如果您在英特尔的手工读取INC的描述,你会看到:

影响的标志
CF标志不受影响。根据结果​​设置OF,SF,ZF,AFPF标志。

所以你jz found指令是基于inc si的结果,而不是cmp结果来分支。我建议您将inc si指令移至loop back之前。

1

比较结果是通过检查零标志来计算的。

cmp string[si], 'a'之后,如果两者相同,则将设置零标志。所以你应该在比较后立即使用jz found

在你的代码的比较后使用inc si,而你失去了比较的结果,在这种情况下,如果si值为零后increment那么只有零标志将设置。

相关问题