将“让静态 2 = 参数 1”翻译为 VM 代码

Posted

技术标签:

【中文标题】将“让静态 2 = 参数 1”翻译为 VM 代码【英文标题】:Translate "let static 2 = argument 1" to VM code 【发布时间】:2019-07-29 20:18:58 【问题描述】:

将“let static 2 = argument 1”翻译成 VM 代码。

VM 代码(答案):

推送参数 1

弹奏静态2

我的问题

我们不是忘了let。我们不应该将另一个参数 1 推入堆栈,然后也将其弹出到本地 2 吗?为了保留“本地类型”。

https://www.coursera.org/learn/nand2tetris2/lecture/z1wbL/unit-1-3-vm-abstraction-memory-segments

【问题讨论】:

【参考方案1】:

不知道为什么要弹出太局部 2. 在 jack 中,let 语句也可以用于字段变量,而不必一定用于局部变量。

推送参数 1 会将索引 1 中的值放入堆栈顶部的参数段中,即 12。

然后您将堆栈中的顶部值弹出到静态 2 中,该值在您的图片中突出显示

【讨论】:

以上是关于将“让静态 2 = 参数 1”翻译为 VM 代码的主要内容,如果未能解决你的问题,请参考以下文章

防止组织模式将评论翻译为逐项环境

为啥 C# 编译器将这个 != 比较翻译为 > 比较?

如何将 curl -T 命令翻译为邮递员?

将中文文章翻译为英文时,如果文章中有分号,那翻译为英文时用句号还是分号还是逗号???

将 JSON 对象转换/翻译为打字稿类型/接口的工具?

将 C++ 从 Oreilly 书籍翻译为 Objective-C 的问题(iOS 的 3D 编程)