HACK Machines 及其组装机

HACK Machines and its assembler

无法真正获得有关虚拟寄存器的太多信息。 我所知道的是地址 0 到 15 的 R0 到 R15 是预定义的。

虚拟寄存器=虚拟机? 那么在 Hack 机器及其汇编程序的上下文中,什么是虚拟寄存器?

之前没听说过HACK machine,所以在Google上找了一下,找到了官方页面,看了几个PDF,做了个简单的测试。所有这一切只是为了说明:我有 5 分钟的准备时间:)

虚拟寄存器只是符号,数字的名称。 R2 只是 2 的另一种写法。

手册说明

To simplify assembly programming, the symbols R0 to R15 are predefined to refer to RAM addresses 0 to 15, respectively.

我最初认为您可以像这样使用它们 R3=D-1 甚至 R3=R2+R3。在 HACK 机器中访问内存非常冗长,因为你只能通过使用 A 寄存器间接寻址它,所以我认为虚拟寄存器可以用来自动生成更复杂的代码,比如通过汇编 R3=R1+R2进入

@1 D=M @2 D=D+M @3 M=D

但事实并非如此,您只能将它们与 @ 指令一起使用,我看不出这将如何简化汇编。

如果您坚持仅通过使用标签将内存位置加载到 A 的约定,他们可以使它更 可读 ,这样如果您看到 @R10 你 known/expect A 加载了一个地址,当你看到一个(等效的)@10 你 know/expect A 包含一个值算术计算(比如将 10 添加到 D)。
然而,这只是纯粹的语义,这与您如何使用汇编程序有关,例如使用 str 前缀命名字符串变量,并且对汇编程序本身没有意义。