假设CPU的解码指令

Decoding instruction of hypothetical CPU

本文关键字:指令 解码 CPU 假设      更新时间:2023-10-16

在我创建以下问题之前,我已经阅读了一些关于SO的类似问题,但我没有找到问题的答案。

假设我有以下位流 010001 01000 1010100 01100

010001-> 表示指令添加 arg1、arg2、arg3

arg1:01000-> 以 0 开头,因此,arg1 将表示寄存器编号 1000 是小端序,因此寄存器编号索引为 1

arg2:1010100->所以它将是一个内存参数 1-01-0100 01 是一个双字节访问,

arg3: 01100 -> 第三个参数再次以 0 开头,所以它是一个寄存器参数:0-1100 这编码注册3.

如您所见,指令操作码或参数未与字节边界对齐。

例如,正如你在上面看到的 - 操作码需要 6 位,其余 2 位来自字节是第一个参数的一部分。

但是另一个操作码可以从字节中获取 3 或 5 位等位,因此操作码长度不是固定的。

是否存在相同的情况,例如在x86上?

我可以通过使用掩码或位移位来处理它,但我想知道是否有任何有用的模式可以帮助更好地做到这一点?

不,这不太像 x86 指令编码。 x86 使用相当复杂的编码方案,解码起来非常痛苦,特别是如果你想快速完成。

例如,这看起来更接近一些8位摩托罗拉处理器(6800,6809,6811等(。有一个固定的操作码字段,每个操作数确实使生活变得非常简单。你几乎只是生成位掩码来"剥离"指令的每个部分,将它们提供给处理指令该部分的逻辑,然后就可以了。