【发布时间】:2020-12-14 16:37:11
【问题描述】:
【问题讨论】:
标签: memory stack virtual-machine nand2tetris
【问题讨论】:
标签: memory stack virtual-machine nand2tetris
这里有两个主要部分需要考虑:
call foo 2 :这条指令告诉 vm 调用函数 foo ,它接受 2 个参数(应该在此调用之前将其压入堆栈顶部)。 function foo 4 :这不是函数foo 中的第一条指令,但它仍然对SP 有影响,因为这意味着函数foo 有4 个局部变量。这些变量必须位于某个地方。在哪里?在栈顶。这意味着在foo 的第一条“真实”指令执行之前,我们必须将 4 个值压入堆栈。什么价值观?好吧 - 根据 vm 规范,它应该是0,导致局部变量被初始化为 0。这也意味着我们为每个局部变量增加 SP(SP + 4)这导致SP在调用foo之后但在执行该函数的第一条指令之前将具有314的值。
【讨论】: