【发布时间】:2023-03-15 04:40:01
【问题描述】:
声明初始化数据的语法是什么,如:
- 在 hack 汇编语言中初始化一个全局数组?
例如。 int [] arr = {1, 2, 3, 4, 5}
- 初始化字符串文字?
“你好世界\n”
【问题讨论】:
-
好问题。我四处搜索,找不到任何示例代码,例如“hello world”,如果找到,它可能会告诉我们字符串(“hello world”)是如何在它们的汇编语言中存储和声明的。我见过的所有汇编语言示例都是机器代码,而不是初始化数据。当然,我们可以声明存储到数据内存中的代码,但这似乎是创建初始化字符串和数组的一种非常尴尬的方式。
-
据我所知,jack 编译器生成代码以动态构造字符串文字,分配堆空间,然后通过一次附加一个字符来构建它们。因此,单个字符值存储在单个机器代码指令中,并使用
string.new和string.append等函数调用在堆中重新组装成字符串。这表明可能无法将 RAM 的初始状态与程序一起加载(在 ROM 中)。 -
你可以用同样的方式构建一个初始值的整数数组,通过使用编码在代码序列中的常量写入每个单独的数组元素的初始值,然后是适当的存储指令,也许可以通过硬编码地址来简化RAM 中的数组,而不是使用堆分配。
-
最后,您可以使用脚本将值预加载到 RAM 中,但这不是汇编语言的一部分,而是测试系统的一部分,允许不同的脚本建立初始条件并检查最终条件.
标签: assembly nand2tetris