【问题标题】:Confusion related to virtual machine in nand2tetris与 nand2tetris 中的虚拟机相关的困惑
【发布时间】:2020-12-14 16:37:11
【问题描述】:

所以在学习 nand2tetris 课程时,我陷入了这个问题。

基本上这个问题与构建虚拟机有关。虚拟机与JVM非常相似。

【问题讨论】:

    标签: memory stack virtual-machine nand2tetris


    【解决方案1】:

    这里有两个主要部分需要考虑:

    1. call foo 2 :这条指令告诉 vm 调用函数 foo ,它接受 2 个参数(应该在此调用之前将其压入堆栈顶部)。
      调用任何函数意味着您应该采取以下步骤:将返回地址压入栈顶(SP++),然后压入 LCL、ARG、THIS、THAT(SP+4)。此时 SP 应该等于 310。
    2. function foo 4 :这不是函数foo 中的第一条指令,但它仍然对SP 有影响,因为这意味着函数foo 有4 个局部变量。这些变量必须位于某个地方。在哪里?在栈顶。这意味着在foo 的第一条“真实”指令执行之前,我们必须将 4 个值压入堆栈。什么价值观?好吧 - 根据 vm 规范,它应该是0,导致局部变量被初始化为 0。这也意味着我们为每个局部变量增加 SP(SP + 4)

    这导致SP在调用foo之后但在执行该函数的第一条指令之前将具有314的值。

    【讨论】:

      猜你喜欢
      • 2011-01-05
      • 2012-11-26
      • 2012-12-13
      • 2015-05-14
      • 2013-04-05
      • 1970-01-01
      • 1970-01-01
      • 2013-03-29
      • 2012-11-19
      相关资源
      最近更新 更多