我正在学习Hack汇编语言和跳转指令。谁能给我详细的解释,你如何计算一个给定的虚拟机代码的跳转指令。如果我有虚拟机命令,例如,push constant 0,我想知道如何找到跳转指令。
请给我详细的解释,这样我才能学习!
示例:虚拟机命令为'push constant 0‘。
如何从该命令转到以下编写的跳转指令:
@SP
A = M
M = 0
@SP
M=M+1上面的跳转指令只是一个例子,而不是答案。
发布于 2020-09-17 00:54:29
跳转是用C型指令编码的。
C类型指令具有以下编码:
size (in bits): 1 2 7 3 3
+-----+----+------+------+------+
field | A/C | XX | comp | dest | jump |
+-----+----+------+------+------+为了区分A型和C型,对于A型,A/C是0,对于C型,A/C是1。
如果C型指令的jump字段具有二进制值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型指令编码表。
https://stackoverflow.com/questions/63920539
复制相似问题