2015-04-22 53 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那麼只有零標誌將設置。

相關問題