有关汇编中 JZ 和 JNZ中的问题

来源:百度知道 编辑:UC知道 时间:2024/06/06 14:49:02
想问下,在汇编程序的设计中 有语句 JZ 和 JNZ ,大概的意思是说判零转移。有一种情况,比如
DO: ADD AX, [SI]
INC SI
INC SI
DEC CX
JNZ DO
大概的意思是说只要CX不为零就做 DO 中的内容。
我想问的是 JNZ到底是判什么不为零,是CX还是CX 为零时所影响的状态标志位 ZF。如果是后者,那执行语句 ADD AX,[SI] 也会影响到ZF,当累加值等于零的时候也会停止做 DO 内的内容,而这种情况是我们所不能控制的。
如果是前一种又和我看到的另一个汇编程序相矛盾,这里就不列举出了。
知道的麻烦告诉我一声到底是怎么回事啊,我的财富值还有20,所以不能给你们多少 O(∩_∩)O哈哈~

Z可以理解为ZF,JNZ就是ZF不为1时跳转,你这个程序这儿是CX不等于零时跳转,CX不为零,则零标志ZF就为0,只有CX为0时ZF才为1,不跳转
ZX每次运算后都会变化,你的程序中的JNZ代表上一次运算(DEC CX)的结果

运算结果为0时ZF=1,不为零是ZF=0;

这个有点复杂,不晓得我讲清楚没得,好好理解一下哈

JNZ =jump if not zero 运算结果不为零则转移
ZF(Zero Flag)--零标志 若运算结果为零则ZF=1,否则ZF=0
1:jump if not zero指的是运算结果为零,而不是ZF=0
2:如果某些比较类等汇编指令并不保存运算结果,则需要根据具体指令查看标志位,比如cmp指令
比如
bool r=true;
if(r==true) //C的代码结果非0;但汇编运算后是ZF=1