我正在学习 Hack 汇编语言和跳转指令。谁能给我详细的解释,说明如何计算给定虚拟机代码的跳转指令。如果我有虚拟机命令,例如 push constant 0,我想了解如何找到跳转指令。
请给我详细的解释,以便我学习!
示例:虚拟机命令为“ push constant 0
”。
如何从 THAT COMMAND 到以下书面 JUMP INSTRUCTIONS:
@SP
A = M
M = 0
@SP
M=M+1
上面的跳转指令只是一个例子,不是答案。
我正在学习 Hack 汇编语言和跳转指令。谁能给我详细的解释,说明如何计算给定虚拟机代码的跳转指令。如果我有虚拟机命令,例如 push constant 0,我想了解如何找到跳转指令。
请给我详细的解释,以便我学习!
示例:虚拟机命令为“ push constant 0
”。
如何从 THAT COMMAND 到以下书面 JUMP INSTRUCTIONS:
@SP
A = M
M = 0
@SP
M=M+1
上面的跳转指令只是一个例子,不是答案。
跳转以 C 类型指令编码。
C 类型指令具有以下编码:
size (in bits): 1 2 7 3 3
+-----+----+------+------+------+
field | A/C | XX | comp | dest | jump |
+-----+----+------+------+------+
区分A型和C型,A/C
是0
针对A型和针对C型的A/C
。1
如果jump
C 类型指令的字段具有二进制值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 类型指令编码表。