0

我正在学习 Hack 汇编语言和跳转指令。谁能给我详细的解释,说明如何计算给定虚拟机代码的跳转指令。如果我有虚拟机命令,例如 push constant 0,我想了解如何找到跳转指令。

请给我详细的解释,以便我学习!

示例:虚拟机命令为“ push constant 0”。

如何从 THAT COMMAND 到以下书面 JUMP INSTRUCTIONS:

@SP

A = M

M = 0

@SP

M=M+1

上面的跳转指令只是一个例子,不是答案。

4

1 回答 1

1

跳转以 C 类型指令编码。

C 类型指令具有以下编码:

size (in bits):     1    2     7      3      3
                 +-----+----+------+------+------+
field            | A/C | XX | comp | dest | jump |
                 +-----+----+------+------+------+

区分A型和C型,A/C0针对A型和针对C型的A/C1

如果jumpC 类型指令的字段具有二进制值000,则不编码跳转。

否则,该字段中的任何其他二进制值都会对jump某种分支进行编码。如果分支的条件为真,它将控制转移到A寄存器中的值(有效地做pc := A),所以通常,一个分支指令之前是一个@指令,以加载A带有标签地址的寄存器,但其他方法是可能的。如果分支的条件为假,它将简单地前进到下一条顺序指令(pc := pc + 1而不是pc := A


请参阅以下演示文稿:https : //www.coursera.org/lecture/nand2tetris2/unit-0-4-hack-language-specification-MXyAQ,时间 7:57 获取 C 类型指令编码表。

于 2020-09-16T16:54:28.633 回答