4

我开始使用这个 v1.7 规范编写 DCPU-16 仿真器。我开始制定架构,我不喜欢我使用很长的 switch 语句这一事实。这是我第一次写模拟器,所以我不知道是否有更好的方法来做。虽然开关不是那么大,但由于 DCPU 的操作码数量很少(事实上我还没有真正实现指令),我可以想象如果我正在为更大的指令集编写一个模拟器,开关语句将是巨大的

不管是谁,这是我的代码

编辑:我忘了回答我的问题:

  • 有没有比使用大型交换机更好的方法来设计模拟器?
4

1 回答 1

2

这种方法在我看来是合理的。我肯定会这样做(我已经编写了一些 CPU 仿真器和类似类型的代码)。

最接近的替代方案是一组函数指针,但您的某些情况可能相当简单(例如cpu_regs.flags &= ~CARRYor if (cpu_regs.flags & CARRY) do_rel_jump(next_byte());,因此使用函数指针会减慢您的速度。

您可以将所有“尚未指定操作”集中到一个位置,这将大大缩短行数,但案例数当然仍然相同 [除非您将其放入default:]。

于 2013-06-19T09:36:56.937 回答