指令解码器如何工作?

时间:2014-11-10 14:47:25

标签: assembly arm intel computer-architecture cpu-architecture

在指令集的赋值中,我们被告知要编写一系列指令,用于不同架构模型中所需的算术运算:累加器,堆栈,加载/存储,存储器/存储器。

假设:

  • 操作码 - 8位
  • 内存地址--16位
  • 所有寄存器均以4位
  • 编码
  • 所有数据操作数 - 32位
  • 所有指令必须是偶数个字节,即8×N位,其中N是自然数。

和! 寄存器地址可以打包在一起

问题1:我们何时将两个寄存器组合在一起?系统如何知道它不是一个编码为4位的寄存器?你能举个例子吗?

说,我们得到A = B + C.此操作的加载/存储模型中需要说明:

1. load r2, B;
2. load r3, C;
3. add r1, r2, r3;
4. store r1, A.

第1条指令长28位,因此需要额外的4位。

问题2 :将00位形式的4位放在哪里会有所不同?你将如何进行整数个字节的指令?

我非常感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

虽然这个问题看起来有点模糊,但我会冒回答的风险并且可能会产生有用的讨论。

  

问题1 :我们何时将两个寄存器组合在一起?系统如何知道它不是一个编码为4位的寄存器?能否请您   举个例子?

CPU中的 ID (指令解码器)将首先读取操作码。这意味着一旦它知道它必须解码的指令,就知道如何解释以下的位。您可以将寄存器编码为4位,这意味着您有16个寄存器。但想象一下,您的指令仅限于4个寄存器的子集中的2个寄存器。在这种情况下,您只能使用4位来识别2个寄存器。通过这种方式,您可以将4个位的"标识符" 打包为2个寄存器。

  

问题2 :将00位形式的4位放在哪里会有所不同?你会如何指导一大堆的   字节?

计算4位的位置。根据每个操作码,指令解码器知道从哪里获取它使用的寄存器的地址。例如,对于 load 指令,如果您将指令设计为在操作码之后有4位,则当解码器识别 load 时,如果将接下来的4位解释为注册标识符。

我不相信你会被限制使用整数个字节,因为指令中的每一位都有含义。只需包含一些未使用的位(通常在末尾),该指令可以是整数个字节。