先要理解这个逻辑语句执行会影响标志位,jcc指令是根据标志位工作的。jcc的具体行为在于它前面一条或者多条指令具体怎么影响标志位的。这里test cl, cl在cl是0的时候会置Z,否则清Z jz也就是根据这个跳转的。
累加器A为零时,跳转到到标号为:DELAY处。
只是判断用CMP,TEST之类的指令,只是比较,建议认真揣摩指令。
CMP EAX,EBX
JZ Y
JNZ N
不过一般情况不会这么写,N或者是Y的时候是可以不跳转的,如下:
CMP EAX,EBX
JZ Y
N:
扩展资料:
ZF汇编语言中的PSW标志寄存器中的一位,而JZ则是根据ZF决定是否跳转。若ZF=1(表示本次运算结果为0,不为0则ZF=0),则跳转,否则,不跳转ZF的状态根据其他指令的执行结果设置。
jz=jump if zero,即零标志为1就跳转,一般与cmp连用,用以判断两数是否相等
jz的另一种写法就是je,je=jump if equal,jz和je的作用是完全一样的
JZ是累加器A判零条件转移指令.
JZ rel ;若A=0,则PC+2+rel--->PC;否则,PC+2--->PC(rel : 以补码形式表示的8位地址偏移量,其值为-128~+127)
参考资料来源:百度百科-jz
JZ根据ZF决定是否跳转,若ZF=1,则跳转,否则,不跳转
ZF的状态根据其他指令的执行结果设置,
在这里,由TEST cl,cl设置的
很正常的 code
CPU没有判断条件,它只是傻傻的根据 flag 工作
test 正好是给它提供可靠 flag
而且test 和 CPU 一起工作的很好
你先要理解这个逻辑 语句执行会影响标志位,jcc指令是根据标志位工作的。jcc的具体行为在于它前面一条或者多条指令具体怎么影响标志位的。
这里test cl, cl在cl是0的时候会置Z,否则清Z jz也就是根据这个跳转的。