来自计算机系统元素(Nand2Tetris)的图
看一下
的场景 j1 = 1 (out < 0 )
j2 = 0 (out = 0 )
j3 = 1 (out > 0 )
如何 out&lt; 0 为真, out&gt; 0 但 out = 0 为false。 out
如何同时具有正值和负值?
换句话说,当JNE
指令要执行时虽然理论上看起来似乎对我有用但实际上不是吗?
答案 0 :(得分:3)
如果退出&lt; 0,如果j1 = 1,则执行跳转。
如果out = 0,则在j2 = 1时执行跳转。
如果输出&gt; 0,如果j3 = 1,则执行跳转。
希望你现在能更好地理解这张桌子。特别是,如果out为非零,则执行JNE,如果out为零,则跳过JNE。
答案 1 :(得分:1)
如果那些匹配任何条件,而不是全部匹配,那么助记符就有意义。即如果差值大于或小于零则跳跃,但如果差值为零则不跳跃。
具体来说,sub x, y
/ jne target
按常规方式工作:如果x
和y
在减法之前相等,则会跳转。 (因此减法结果为零)。这就是Effect列中if(out!=0) jump
所说的内容。
IDK是Nand2Tetris的语法,但希望这个想法很明确。
BTW,在x86 JNZ
上是JNE
的同义词,因此您可以使用与语义相关的任何一个。 JNE只有在作为比较的东西之后才真正有意义,即使大多数操作根据结果是否为零来设置ZF。