我正在编写一个解释型 68k 模拟器作为个人/教育项目。现在我正在尝试开发一种简单、通用的解码机制。
据我了解,每条指令的前两个字节足以唯一标识操作(有两个罕见的例外)和剩余要读取的字数(如果有)。
这是我想在解码阶段完成的任务:
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。一定有很大一部分图片我失踪了。
这个解码 Z80 Opcodes网站明确解释了解码,这是我在 68k 程序员参考手册或谷歌搜索中找不到的内容。