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

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

小技巧:枚举的最后放置了一个数 NUM_OF_REGISTERS。通过这个数可以获取寄存器的个数,即便你又添加了其它的寄存器。现在我们需要一个数组为寄存器存放数值:

 

 
  1. int registers[NUM_OF_REGISTERS]; 

接下来你可以读取寄存器内的值:

 

 
  1. printf("%dn", registers[A]); // 打印寄存器A的值 

修订

我没有在寄存器花太多心思,但你应该能够写出一些操作寄存器的指令。比如,如果你想实现任何分支跳转,可以通过把指令指针(译者注:或叫程序计数器)和/或栈顶指针存到寄存器里,或者通过实现分支指令。

前者实现起来相对快捷、简单。我们可以这样做,增加代表IP和SP的寄存器:

 

 
  1. typedef enum {  A, B, C, D, E, F, PC, SP, 
  2. NUM_OF_REGISTERS  } Registers;