假设CPU的解码指令

问题描述 投票:0回答:1

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

假设我有以下位流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,它编码register3。

您可以看到指令操作码或参数未与字节边界对齐。

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

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

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

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

c++ virtual-machine cpu
1个回答
0
投票

不,这与x86指令编码不太相似。 x86使用了相当复杂的编码方案,这给解码带来了极大的痛苦,特别是如果您想快速地进行解码。

例如,这看起来与某些8位Motorola处理器(6800、6809、6811等)非常接近。操作码具有固定的字段,每个操作数的确使生活变得非常简单。您几乎只需生成位掩码即可“剥离”指令的每个部分,将它们提供给处理该指令那部分的逻辑,然后就可以使用了。

© www.soinside.com 2019 - 2024. All rights reserved.