簡體   English   中英

如何表示c ++ struct中的每個mips指令行?

[英]How represent each mips instruction line in c++ struct?

我正在嘗試使用c ++模擬虛擬MIPS架構。 在這個過程中,我必須將mips體系結構的每一行存儲為struct並將其存儲到vector中,這樣我就可以模擬5個階段的管道。 我的問題是,我怎樣才能代表每一條指令,例如:

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

每一行看起來都不同,我試圖找到一種在struct中表示這種情況的通用方法。

您應該了解這些指令在硬件中的實現方式。 首先,MIPS是一種RISC架構,由於所有指令都具有相同的長度,因此這是您的幫助。

然后MIPS有三種指令類型,如下圖所示:

在此輸入圖像描述

從這開始,您可以通過使用位打包指令和工會輕松開發自己的結構:

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 = ..

請注意,如果將操作碼與union內部的3個結構分開(而不是復制它),則填充將對整個struct強制執行更大的尺寸,與實際硬件相比,但這不應該是您的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM