You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Hack VM中sub指令运算逻辑疑问(Nand2Tetris课程)

Nand2Tetris中VM sub操作码的运算逻辑解析

你遇到的问题核心是对VM语言中二元运算的操作数顺序理解有误:

  • Nand2Tetris的VM语言里,所有二元运算符(包括sub)的运算规则都是:先弹出栈顶元素作为右操作数,再弹出栈顶第二个元素作为左操作数,执行左操作数 运算符 右操作数,最后将结果压回栈。

对应你的代码执行流程:

  1. push constant 5 → 栈内容:[5]
  2. push constant 7 → 栈内容:[5, 7](7处于栈顶)
  3. sub → 先弹出7(右操作数),再弹出5(左操作数),计算5 - 7 = -2,将-2压回栈。

这就是为什么你得到的结果是-2而非预期的2——你搞反了操作数的顺序,误以为后压入的栈顶元素是左操作数,但实际上它是被减的右操作数。

内容的提问来源于stack exchange,提问作者Enrico Tuvera Jr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 23:00:40