我想知道如何计算计算机系统中给定虚拟机命令的跳转指令

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/C1

如果 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 类型指令编码表。

【讨论】:

以上是关于我想知道如何计算计算机系统中给定虚拟机命令的跳转指令的主要内容,如果未能解决你的问题,请参考以下文章

虚拟机装系统----计算机经验

如何将linux虚拟机和主机之间连接 详细_0_3

大侠们,我想请教一下linux跳转到应用层的main函数是在哪了进行的跳转?

如何将一台物理机转换成虚拟机

如何解决虚拟机不能启动的问题

请问高手们,虚拟机是啥意思,怎么使用?