为处理器中的IR分支分配十六进制数

时间:2012-02-08 17:13:35

标签: assembly x86 hex processor cpu-architecture

image

有人可以帮我理解如何将5个IR分支中的每一个分配到十六进制数字吗?

R[2] ← Mem2[R[1] + 0x5] << 0x02;

R[3] ← R[2]+ Mem2[0x0A] + 0x01; 

使用这两条指令,我们应该能够为名为IR&lt; ...&gt;的五个分支中的每一个分配十六进制数。我知道顶部的第一个分支是唯一一个与注册表直接相关的分支,而两个底部分支将具有常量值,因为它们与注册表无关。但是,你们可以帮助我或解释一下这种语法是如何工作的吗?

1 个答案:

答案 0 :(得分:0)

图片中名为“IR”的块注册为输入(端口D)宽度为32位。因此,它的输出(端口Q和~Q)也是32位。

符号IR<N1..N2>表示32位的一部分;例如IR<12..0>用于编号为0,1,2,3,4,5,6,7,8,9,10,11,12的位;而IR<23..21>表示“只取位21,22,23,24”。

因此,如果IR在某个时刻是二进制:00010010 00110100 01010110 01111000(位从头到头编号; 0x12345678用十六进制编号);它的部分是:

  • IR<31..24> 8位宽值0x12 = 00010010 - 它将进入控制电路。
  • IR<23..21> 3位宽值0x1 = 001 - 它将阻止“mux B”,端口0和寄存器文件的右边部分(这是dst =目的地寄存器号)
  • IR<20..18> 3位宽值0x5 = 101 - 它将阻止“mux B”,端口1(src1或src2)
  • IR<17..15> 3位宽值0x0 = 000 - 它将阻止“mux B”,端口2(src1或src2)
  • IR<14..13> 2位宽值0x2 = 10 - 阻止“C”
  • IR<12..0> 13位宽值0x1678 = 10110 01111000 - 阻止“D”(这是IMM =立即值)
  • IR<23..0>是低位24位= 0x345678的副本 - 用于阻止“mux A”(在JMP命令的情况下)

要解决您的任务,我们应该知道如何将命令编码到IR中以及该CPU的指令集是什么。这看起来非常简化MIPS或RISC,也可能是SPARC。