vm_setup函数过于简单,在这里就不说了,读者自己看源码,它就是将regs、imem、dmem清零。这里我重点讲一下vm_load函数的实现。vm_load就是把汇编文件中一行一行的"opcode r s t" 转换成instruc_t类型的变量,存在imem中。源码如下: (哎,其实vm_load我讲的更少)
我们应该先熟悉TM机器再来实现它,读者可以看看《编译原理与实践》,事实上我实现的TM比书上的还要简单,特别是如何加载汇编文件,书中相当于写了个词法分析器,而我仅仅是用了一些fscanf语句,这也导致了我的汇编文件格式有更高的要求,比如不能有注释、每行有且只有一条指令、指令格式一定为 opcpde r s t,即使是HALT指令也要写成 HALT x x x,虽然三个操作数都没有用。