Hack VM中sub指令运算逻辑疑问(Nand2Tetris课程)
Nand2Tetris中VM sub操作码的运算逻辑解析
你遇到的问题核心是对VM语言中二元运算的操作数顺序理解有误:
- Nand2Tetris的VM语言里,所有二元运算符(包括
sub)的运算规则都是:先弹出栈顶元素作为右操作数,再弹出栈顶第二个元素作为左操作数,执行左操作数 运算符 右操作数,最后将结果压回栈。
对应你的代码执行流程:
push constant 5→ 栈内容:[5]push constant 7→ 栈内容:[5, 7](7处于栈顶)sub→ 先弹出7(右操作数),再弹出5(左操作数),计算5 - 7 = -2,将-2压回栈。
这就是为什么你得到的结果是-2而非预期的2——你搞反了操作数的顺序,误以为后压入的栈顶元素是左操作数,但实际上它是被减的右操作数。
内容的提问来源于stack exchange,提问作者Enrico Tuvera Jr
相关产品推荐
相关产品推荐

