pok*_*che 3 c c++ mips computer-architecture
我正在尝试使用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
Run Code Online (Sandbox Code Playgroud)
每一行看起来都不同,我试图找到一种在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;
}
};
Run Code Online (Sandbox Code Playgroud)
通过这种方式,您可以轻松访问任何特定的指令类型
指令指令;
i.i.rs = ..
i.i.rt = ..
i.i.imm = ..
Run Code Online (Sandbox Code Playgroud)
请注意,如果你将操作码与3个结构分开union(而不是复制它)struct,那么与真实硬件相比,填充将强制整体更大,但这不应该是你的问题.
| 归档时间: |
|
| 查看次数: |
926 次 |
| 最近记录: |