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

2020-01-06 13:14:08丽君

因此如果我们在回到主函数,就可以像这样使用我们的 eval 函数工作:

 

 
  1. bool running = true;  int ip = 0; 
  2.   // instruction enum here 
  3.   // eval function here 
  4.   // fetch function here 
  5.   int main() { 
  6. while (running) {  eval(fetch()); 
  7. ip++; // increment the ip every iteration  } 

栈!

很好,那会很完美的完成这个工作。现在,在我们加入其他指令之前,我们需要一个栈。幸运的是,栈是很容易实现的,我们仅仅需要使用一个数组而已。数组会被设置为合适的大小,这样它就能包含256个值了。我们也需要一个栈指针(常被缩写为sp)。这个指针会指向栈数组。

为了让我们对它有一个更加形象化的印象,让我们来看看这个用数组实现的栈吧:

 

 
  1. [] // empty   
  2. PSH 5 // put 5 on **top** of the stack  [5] 
  3.   PSH 6 
  4. [5, 6]   
  5. POP  [5] 
  6.   POP 
  7. [] // empty   
  8. PSH 6  [6] 
  9.   PSH 5 
  10. [6, 5]