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 前缀命名字符串变量,并且对汇编程序本身没有意义。
无法真正获得有关虚拟寄存器的太多信息。 我所知道的是地址 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 前缀命名字符串变量,并且对汇编程序本身没有意义。