3
实施通用机器模拟器
目的是编写一个完整的程序,用最短的代码模拟ICFP 2006中的Universal Machine。通用机具有一个非常简单的指令集,在此进行说明。仿真器必须从命令行参数读取文件名,然后以程序形式运行文件,因此您的语言必须以某种方式支持命令行参数和stdin / out。仿真器必须在合理的时间内(而不是数十年内)完成沙标。这是指令集的简短说明: 该机器有八个寄存器,每个寄存器保存一个32位无符号整数。 机器拥有一组索引的32位无符号整数单元格数组。 简而言之,分配指令返回一个不透明的32位uint,它是所创建数组的句柄,该数组具有静态大小,并保存32位uint元素。 第0个数组表示程序。它是在启动时从big-endian文件加载的。 还有一个指令指针指向0数组中的一个单元。 在每个步骤中,从指针所指向的单元中读取一条指令,并在完成任何操作之前先确定指针。 4个最高有效位代表操作码。 如果操作码为13,则接下来的3位代表寄存器,其余的25位代表写入所述寄存器的编号。 否则,9个最低有效位代表三个寄存器,即A,B和C,其中C由3个最低有效位代表。 然后根据操作码,将发生以下情况: 0. A = B,除非C == 0 1. A = B [C] 2. A [B] = C 3. A = B + C 4. A = B * C 5. A = B / C 6. …