我开始使用this v1.7 spec编写DCPU-16仿真器。我开始放下架构,我不喜欢我使用很长的switch语句这一事实。这是我第一次编写模拟器,所以我不知道是否有更好的方法。虽然开关不是 大,但是由于DCPU的操作码数量很少(事实上我还没有实际执行过指令),我可以想象我是否正在编写模拟器一个更大的指令集,switch语句将巨大。
Anywhom,here's my code。
编辑:我忘记了我的问题:答案 0 :(得分:2)
这种方法对我来说似乎是合理的。我当然是这样做的(我已经编写了一些CPU模拟器和类似的代码类型)。
最近的替代方案是一组函数指针,但是你的一些情况可能相当简单(例如cpu_regs.flags &= ~CARRY
或if (cpu_regs.flags & CARRY) do_rel_jump(next_byte());
,所以使用函数指针会减慢你的速度。
你可以把所有“尚未指定的操作”捆绑到一个地方,这会使它的行数减少很多,但案例的数量当然仍然是相同的[除非你把它放在{{ 1}}]。