【发布时间】:2015-01-06 21:47:34
【问题描述】:
在对指令集的赋值中,我们被告知为不同架构模型所需的算术运算编写指令序列:累加器、堆栈、加载/存储、内存/内存。
给定:
- 操作码 - 8 位
- 内存地址 - 16 位
- 所有寄存器都用 4 位编码
- 所有数据操作数 - 32 位
- 所有指令必须是偶数字节,即 8 x N 位,其中 N 是自然数。
并且! 寄存器地址可以打包在一起
问题 1: 我们什么时候将两个寄存器打包在一起?系统如何知道它不是一个编码为 4 位的寄存器?可以举个例子吗?
假设我们得到 A = B + C。加载/存储模型中此操作所需的指令:
1. load r2, B;
2. load r3, C;
3. add r1, r2, r3;
4. store r1, A.
第一条指令是 28 位长,所以我们需要额外的 4 位。
问题 2:将 4 位以 0000 的形式放在哪里有区别吗?整数字节的指令怎么做?
非常感谢您的帮助。
【问题讨论】:
-
这取决于你如何设计你的指令集。也许您需要一个
NOP运算符,它是一个无操作的 4 位指令,您可以在任何最终得到非 32 位大小的地方填充。 -
感谢您的回复。你能告诉我,我们什么时候想把两个寄存器合二为一? F.e.,我使用寄存器 r1 和 r2 并编码它们看起来像 0001 和 0010。我可以只用 4 位写它们吗?他们会是什么样子?像0110这样的东西?我完全糊涂了。
-
就像我说的,这取决于你。这是您的指令集,由您决定如何表示它。
标签: assembly arm intel computer-architecture cpu-architecture