3

c++ を使用して仮想 MIPS アーキテクチャをシミュレートしようとしています。このプロセスでは、パイプラインの 5 段階をシミュレートできるように、mips アーキテクチャの各行を構造体として格納し、それをベクトルに格納する必要があります。私の問題は、各命令行をどのように表現できるかです。たとえば、次のようになります。

Loop: ST R1 R2 //store to M[R2] the contents of R1
ADD R1 R2 R3  // R1 R2 and R3 are register
SUB R1 1
BRNZ  R1 Loop //if R1 is not 0 then loop

各行は異なって見えるので、これを構造体で表す一般的な方法を見つけようとしています。

4

1 に答える 1

6

これらの命令がハードウェアでどのように実装されているかを確認する必要があります。まず第一に、MIPS はRISCアーキテクチャであり、すべての命令の長さが同じであるため、これが役に立ちます。

次に、MIPS には次の図にまとめられている 3 つの命令タイプがあります。

ここに画像の説明を入力

これから始めて、ビットパック命令を共用体と一緒に使用することで、独自の構造を簡単に開発できます。

struct Instruction {
  u8 opcode : 6;
  union {
    struct {
      u8 rs : 5;
      u8 rt : 5;
      u16 imm;
    } i;
    struct {
      u8 rs : 5;
      u8 rt : 5;
      u8 rd : 5;
      u8 shift : 5;
      u8 funct : 6;
    } r;
    struct {
      u32 address : 24;
    } j;
  }
};

このようにして、特定の命令タイプに簡単にアクセスできます

命令命令;

i.i.rs = ..
i.i.rt = ..
i.i.imm = ..

オペコードを内部の3つの構造体から分離しておくとunion(複製するのではなく)、パディングstructにより、実際のハードウェアと比較して全体のサイズが大きくなりますが、これは問題にはなりません。

于 2013-05-27T18:32:19.313 に答える