用C语言来实现一个简单的虚拟机

2020-01-06 13:14:08丽君
  •   int main() { 
  • while (running) {  int x = fetch(); 
  • if (x == HLT) running = false;  ip++; 
  • }  } 

    这工作的很好,但是有点凌乱。我们正在循环每一条指令,检查是否 HLT,如果是就停止循环,否则“吃掉”指令接着循环。

    判断一条指令

    因此这就是我们虚拟机的主体,然而我们想要确实的评判每一条指令,并且使它更简洁一些。好的,这个简单的虚拟机,你可以写一个“巨大”的 switch 声明。让 switch 中的每一个 case 对应一条我们定义在枚举中的指令。这个 eval 函数将使用一个简单的指令的参数来判断。我们在函数中不会使用任何指令指针递增除非我们想操作数浪费操作数。

     

     
    1. void eval(int instr) {  switch (instr) { 
    2. case HLT:  running = false; 
    3. break;  }