5

我正在编写一个解释型 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 程序员参考手册或谷歌搜索中找不到的内容。

4

1 回答 1

2

我决定简单地为每条指令创建一个包含所有可能模式的查找表。这是我的第一个想法,但我以“浪费、不雅”为由放弃了它。现在,我接受它“非常快”。

于 2011-09-14T14:12:50.973 回答