我有以下玩具示例彙編代碼,說明使用jnz
。我的問題是:在下面的代碼中,jnz檢查什麼來決定它是否爲0
?我跑了代碼,它似乎在檢查cx
寄存器。從這一點我不確定。例如,如果我有一個cmp
和cx
,jnz
檢查什麼? cx
或cmp
結果?jnz檢查哪個寄存器
mov cx, 5
mov ax, 0
mov bx, 200
add ax, bx
inc bx
dec cx
jnz 0109
int 3
我有以下玩具示例彙編代碼,說明使用jnz
。我的問題是:在下面的代碼中,jnz檢查什麼來決定它是否爲0
?我跑了代碼,它似乎在檢查cx
寄存器。從這一點我不確定。例如,如果我有一個cmp
和cx
,jnz
檢查什麼? cx
或cmp
結果?jnz檢查哪個寄存器
mov cx, 5
mov ax, 0
mov bx, 200
add ax, bx
inc bx
dec cx
jnz 0109
int 3
它檢查狀態(FLAGS)寄存器中的零標誌。 要查看哪些指令修改此標誌,請參閱x86 software developers manual。
它說,這大約DEC:
影響的標誌
CF標誌不受影響。根據結果將OF,SF,ZF,AF和PF標誌設置爲 。
因此,JNZ檢查由前面的指令設置的標誌,發生修改它,在你的情況下它是dec。
DEC
instruction修改標誌字,所以條件跳轉會影響DEC
的結果,該結果正好寫入cx
。
CMP
指令與SUB
在技術上是一樣的,唯一的區別是結果沒有被存儲,只有標誌被修改。