2013-11-20 50 views
2

我有以下玩具示例彙編代碼,說明使用jnz。我的問題是:在下面的代碼中,jnz檢查什麼來決定它是否爲0?我跑了代碼,它似乎在檢查cx寄存器。從這一點我不確定。例如,如果我有一個cmpcxjnz檢查什麼? cxcmp結果?jnz檢查哪個寄存器

mov cx, 5 
mov ax, 0 
mov bx, 200 
add ax, bx 
inc bx 
dec cx 
jnz 0109 
int 3 

回答

4

它檢查狀態(FLAGS)寄存器中的零標誌。 要查看哪些指令修改此標誌,請參閱x86 software developers manual

它說,這大約DEC:

影響的標誌

CF標誌不受影響。根據結果​​將OF,SF,ZF,AF和PF標誌設置爲 。

因此,JNZ檢查由前面的指令設置的標誌,發生修改它,在你的情況下它是dec。

1

DEC instruction修改標誌字,所以條件跳轉會影響DEC的結果,該結果正好寫入cx

CMP指令與SUB在技術上是一樣的,唯一的區別是結果沒有被存儲,只有標誌被修改。