我正在编写一个解释性 68k 模拟器作为个人/教育项目。现在我正在尝试开发一种简单、通用的解码机制。
据我了解,每条指令的前两个字节足以唯一标识操作(有两个罕见的异常(exception))和剩余要读取的字数(如果有)。
这是我想在解码阶段完成的任务:
1. read two bytes
2. determine which instruction it is
3. extract the operands
4. pass the opcode and the operands on to the execute phase
我不能像使用 RISC 架构中的前几位那样将前两个字节传递到查找表中,因为操作数是“阻碍”的。我怎样才能完成部分
2
一般情况下?总的来说,我的问题是:如何从解码过程中消除操作数的可变性?
更多背景:
以下是程序员引用手册第 8.2 节的部分表格:
Table 8.2. Operation Code Map
Bits 15-12 Operation
0000 Bit Manipulation/MOVEP/Immediate
0001 Move Byte
...
1110 Shift/Rotate/Bit Field
1111 Coprocessor Interface...
这对我来说很有意义,但后来我查看了每条指令的位模式,并注意到没有一条指令的 15-12 位是 0001、0010 或 0011。必须有一些大图我失踪了。
此 Decoding Z80 Opcodes站点明确解释了解码,这是我在 68k 程序员引用手册或谷歌搜索中没有找到的内容。
最佳答案
我决定简单地创建一个查找表,其中包含每条指令的所有可能模式。这是我的第一个想法,但我因为“浪费、不雅”而将其丢弃。现在,我接受它“非常快”。
关于emulation - 解码 68k 条指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7328383/