在指令集的赋值中,我们被告知要编写一系列指令,用于不同架构模型中所需的算术运算:累加器,堆栈,加载/存储,存储器/存储器。
假设:
和! 寄存器地址可以打包在一起
问题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位放在哪里会有所不同?你将如何进行整数个字节的指令?
我非常感谢你的帮助。
答案 0 :(得分:1)
虽然这个问题看起来有点模糊,但我会冒回答的风险并且可能会产生有用的讨论。
问题1 :我们何时将两个寄存器组合在一起?系统如何知道它不是一个编码为4位的寄存器?能否请您 举个例子?
CPU中的 ID (指令解码器)将首先读取操作码。这意味着一旦它知道它必须解码的指令,就知道如何解释以下的位。您可以将寄存器编码为4位,这意味着您有16个寄存器。但想象一下,您的指令仅限于4个寄存器的子集中的2个寄存器。在这种情况下,您只能使用4位来识别2个寄存器。通过这种方式,您可以将4个位的"标识符" 打包为2个寄存器。
问题2 :将00位形式的4位放在哪里会有所不同?你会如何指导一大堆的 字节?
计算4位的位置。根据每个操作码,指令解码器知道从哪里获取它使用的寄存器的地址。例如,对于 load 指令,如果您将指令设计为在操作码之后有4位,则当解码器识别 load 时,如果将接下来的4位解释为注册标识符。
我不相信你会被限制使用整数个字节,因为指令中的每一位都有含义。只需包含一些未使用的位(通常在末尾),该指令可以是整数个字节。