Assembly jnz检查哪个寄存器

Assembly jnz检查哪个寄存器,assembly,x86,Assembly,X86,下面是一个汇编代码的玩具示例,演示了jnz的使用。我的问题是:在下面的代码中,jnz检查什么来决定它是否为0?我运行了代码,在我看来它检查了cx寄存器。从这一点上我不确定。例如,如果我有一个cmp和cx,那么jnz检查什么cx或cmp结果 mov cx, 5 mov ax, 0 mov bx, 200 add ax, bx inc bx dec cx jnz 0109 int 3 它检查状态(标志)寄存器中的零标志。 要查看哪些说明修改此标志,请参阅 上面说的是十二月: 受影响的旗帜 CF标志

下面是一个汇编代码的玩具示例,演示了
jnz
的使用。我的问题是:在下面的代码中,jnz检查什么来决定它是否为
0
?我运行了代码,在我看来它检查了
cx
寄存器。从这一点上我不确定。例如,如果我有一个
cmp
cx
,那么
jnz
检查什么<代码>cx或
cmp
结果

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

它检查状态(标志)寄存器中的零标志。 要查看哪些说明修改此标志,请参阅

上面说的是十二月:

受影响的旗帜

CF标志不受影响。设置OF、SF、ZF、AF和PF标志 根据结果

因此,JNZ检查前一条指令设置的标志,该标志恰好修改了它,在您的例子中,它是dec。

修改标志字,因此条件跳转作用于写入
cx
dec
的结果


CMP
指令在技术上与
SUB
指令相同,唯一的区别是不存储结果,只修改标志。

JNZ操作码检查零标志的状态。因此,在DEC cx和CMP中,后面写入的内容将对标志产生影响。因此,后面编写的代码将决定JNZ的操作