如何根据Out-Alu输出的值执行跳转指令

时间:2016-07-26 20:05:44

标签: cpu-architecture

j1, j2 and j3 are bits for the jump instruction and comp instructions are the computation instructions like add etc.

来自计算机系统元素(Nand2Tetris)的图

看一下

的场景
 j1 = 1 (out < 0 )
 j2 = 0 (out = 0 )
 j3 = 1 (out > 0 )

如何 out&lt; 0 为真, out&gt; 0 out = 0 为false。 out如何同时具有正值和负值?

换句话说,当JNE指令要执行时虽然理论上看起来似乎对我有用但实际上不是吗?

2 个答案:

答案 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按常规方式工作:如果xy在减法之前相等,则会跳转。 (因此减法结果为零)。这就是Effect列中if(out!=0) jump所说的内容。

IDK是Nand2Tetris的语法,但希望这个想法很明确。

BTW,在x86 JNZ上是JNE的同义词,因此您可以使用与语义相关的任何一个。 JNE只有在作为比较的东西之后才真正有意义,即使大多数操作根据结果是否为零来设置ZF。