jnz检查哪个寄存器

时间:2013-11-20 10:46:02

标签: assembly x86

我有以下装配代码的玩具示例,说明了jnz的用法。我的问题是:在下面的代码中,jnz检查是什么决定它是否是0?我运行代码,在我看来它检查cx寄存器。从这一点来说我不确定。例如,如果我有cmpcx,那么jnz会检查什么? cxcmp结果?

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

3 个答案:

答案 0 :(得分:4)

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

它说的是DEC:

  

受影响的旗帜

     

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

因此,JNZ检查前一条指令所设置的标志是否会发生修改,在你的情况下它是dec。

答案 1 :(得分:1)

DEC instruction修改了标志字,因此条件跳转对DEC的结果起作用,恰好写入cx

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

答案 2 :(得分:0)

JNZ操作码检查零标志的状态。因此,在DEC cx和CMP之间,写入的内容将对该标志产生影响。因此,之后写的一个将决定JNZ的操作。