现在,POP指令能够工作了!我们刚刚做的只是把栈顶放到变量val_popped里,接着栈顶指针减一。如果我们首先栈顶减一,那么将得到一些无效值,因为sp可能取值为0,那么我们可能把stack[-1]赋给val_popped,通常这不是一个好主意。
最后是ADD指令。这条指令可能要花费你一些脑细胞,同时这也是我们需要用大括号{}实现case语句内作用域的原因。
- case ADD: { // 首先我们出栈,把数值存入变量a
- int a = stack[sp--];
- // 接着我们出栈,把数值存入变量b
- // 接着两个变量相加,再把结果入栈 int result = a + b;
- sp++; // 栈顶加1 **放在赋值之前** stack[sp] = result; // 设置栈顶值
- // 完成!
- break; }
寄存器
寄存器是虚拟机中的选配件,很容易实现。之前提到过我们可能需要六个寄存器:A,B,C,D,E和F。和实现指令集一样,我们也用一个枚举来实现它们。
- typedef enum { A, B, C, D, E, F,
- NUM_OF_REGISTERS } Registers;










