[英]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.