8位指令集体系结构是否需要两字节指令?

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

我正在设计和实现简单的8位计算机。我打算使用8位数据总线,8位地址总线和8位指令。我打算拥有RISC风格的负载存储体系结构。我正在设计指令集,并试图确定是否可以只使用8位指令(这意味着没有多字节指令)。

如果一条指令是8位,那么其中一些位字段将被操作码占用,其余的位字段可能会被要处理的数据表示所占用。例如,考虑一条load immediate指令,该指令采用一个地址并将该地址处的存储器内容加载到CPU中的特定寄存器中。由于立即加载指令的操作码将占用几个位,因此指令中没有足够的空间容纳完整的8位地址。例如,如果此指令的操作码为二进制“ 11”,则仅6位用于加载地址。

在我看来,唯一的选择是将immediate类型的指令扩展到两个字节,其中第一个包含操作码,第二个包含立即数。还有另一种方法吗?也许还有其他技术?

optimization cpu-architecture instruction-set isa
1个回答
0
投票

8位指令集体系结构是否需要两字节指令?

不,不是必须要2字节的指令。但是,如果没有2字节指令,则需要更多指令来完成相同的工作。

例如,如果您无法执行“ mov r1,0x9F”(将8位值加载到r1中),因为这需要一个操作码加上一个8位立即数,那么您可以通过加入来解决它多个较小的立即值以及类似如下的序列:

mov r1,0x9     ;4-bit opcode, 4-bit immediate, r1 = 0x09
shl r1,4       ;4-bit opcode, 4-bit immediate, r1 = 0x90
or r1,0x0F     ;4-bit opcode, 4-bit immediate; r1 = 0x9F

当然,这太糟糕了(与2字节指令相比,指令数量增加了3倍,并且代码大小增加了50%)。

还有其他解决此问题的方法。

一种选择是将“立即加载并向左移4”到一条指令中,或者“立即加载高位”和“立即加载低位,所以上面的例子可能变成:” >

load_high_bits r1,0x9     ;4-bit opcode, 4-bit immediate, r1 = 0x09
load_low_bits r1,0x0F     ;4-bit opcode, 4-bit immediate; r1 = 0x9F

另一种选择是拥有一个常量池,可以使用较小的地址进行访问。例如,如果您有一个采用4位立即数的“加载常数”指令,则可以在内存中存储16个(8位)常数,并用load r1, [4_bit_offset]之类的东西加载它们。您还可以使用一个(隐含的?)基址寄存器来允许常量池位于任何地址(因此您可以从地址“ 8位基址寄存器+ 4位偏移量”中加载常量),例如“ load r1,[r2 + 4_bit_offset]” 。

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