我想知道如何计算计算机系统中给定虚拟机命令的跳转指令
Posted
技术标签:
【中文标题】我想知道如何计算计算机系统中给定虚拟机命令的跳转指令【英文标题】:I want to know how to calculate the jump instructions of a given virtual machine command in computer systems 【发布时间】:2020-09-16 12:55:45 【问题描述】:我正在学习 Hack 汇编语言和跳转指令。谁能给我详细的解释,说明如何计算给定虚拟机代码的跳转指令。如果我有虚拟机命令,例如 push constant 0,我想了解如何找到跳转指令。
请给我详细的解释,以便我学习!
示例:虚拟机命令为“push constant 0
”。
如何从 THAT COMMAND 获得以下书面 JUMP INSTRUCTIONS:
@SP
A = M
M = 0
@SP
M=M+1
上面的跳转指令只是一个例子,不是答案。
【问题讨论】:
什么指令集?那些应该是说明吗? 【参考方案1】:跳转是用 C 类指令编码的。
C 类指令的编码如下:
size (in bits): 1 2 7 3 3
+-----+----+------+------+------+
field | A/C | XX | comp | dest | jump |
+-----+----+------+------+------+
为了区分 A 型和 C 型,A/C
对于 A 型是 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 类型指令编码表。
【讨论】:
以上是关于我想知道如何计算计算机系统中给定虚拟机命令的跳转指令的主要内容,如果未能解决你的问题,请参考以下文章