• 大小: 13KB
    文件类型: .zip
    金币: 2
    下载: 1 次
    发布日期: 2021-10-18
  • 语言: 其他
  • 标签:

资源简介

一个简单的MIPS模拟器实例 是入门模拟器开发的很好实例相信对大家有帮助

资源截图

代码片段和文件信息

#include
#include“huibian.h“
#include
#include

#define MAXMUM 100
#define ISNUM 20
int instruction[ISNUM][32]inst[32]Memory[MAXMUM];
int pcoprsrtrdshmtfuncdataflag=0PCmax;
long int addr;
long reg[32];
FILE *fp3;

int btot(int h int t)
{
int ij;
long int sum=0;
j=t-h;
for(i=h;i<=t;i++)
sum+=inst[i]*(int)pow(2j--);
return sum;
}

void decode()
{
op=btot(05);
rs=btot(610);
rt=btot(1115);
rd=btot(1620);
shmt=btot(2125);
func=btot(2631);
data=btot(1631);
addr=btot(631);
}

void add()
{
reg[rd]=reg[rs]+reg[rt];
}
void sub()
{
reg[rd]=reg[rs]-reg[rt];
}
void and()
{
reg[rd]=reg[rs]®[rt];
}
void or()
{
reg[rd]=reg[rs]|reg[rt];
}
void nor()
{
reg[rd]=reg[rs]^reg[rt];
}
void slt()
{
if(reg[rs] reg[rd]=1;
else reg[rd]=0;
}
void jr()
{
pc=reg[rs];
}
void sll()
{
reg[rd]=reg[rt]<}
void srl()
{
reg[rd]=reg[rt]>>shmt;
}
void beq()
{
if(reg[rs]==reg[rt])
{
pc=pc+data;
flag=1;
}
}
void bne()
{
if(reg[rs]!=reg[rt])
{
pc=pc+data;
flag=1;
}
}
void lw()
{
int p;
p=reg[rs]+data;
reg[rt]=Memory[p];
}
void sw()
{
int p;
p=reg[rs]+data;
Memory[p]=reg[rt];
}
void addi()
{
reg[rd]=reg[rs]+data;
}
void andi()
{
reg[rd]=reg[rs]&data;
}
void ori()
{
reg[rd]=reg[rs]|data;
}
void lui()
{
reg[rd]=reg[rs]&data;
}
void slti()
{
reg[rd]=reg[rs]&data;
}
void j()
{
pc=addr;
flag=1;
}
void jal()
{
pc=addr;
flag=1;
}

void exec()
{
switch(op){
case 0:         //R-format
switch(func){
case 32: add(); break;
// case 33: addu(); break;
case 34: sub(); break;
// case 35: subu(); break;
case 36: and(); break;
case 37: or(); break;
case 39: nor(); break;
case 42: slt(); break;
// case 43: sltu(); break;
case  8: jr(); break;
case  0: sll(); break;
case  2: srl(); break;
} break;
case 4: beq(); break;
case 5: bne(); break;
case 35: lw(); break;
case 43: sw(); break;
// case 40: sb(); break;
// case 41: sh(); break;
// case 36: lbu(); break;
// case 37: lhu(); break;
case 8: addi(); break; 
// case 9: addiu();break;
case 12: andi(); break;
case 15: lui(); break;
case 10: slti(); break; 
// case 11: sltiu();break;
case 13: ori(); break;  
case 2: j(); break;
case 3: jal(); break;
}
}

void read()
{
int i=0j=0;
while(!feof(fp2))
{
for(j=0;j<32;j++)
{
if((ch=fgetc(fp2))==‘1‘) instruction[i][j]=1;
else instruction[i][j]=0;
}
i++;
fgetc(fp2);
}
PCmax=i-1;
for(i=0;i Memory[i]=i;
}

void moni()
{
for(i=0;i<32;i++)
inst[i]=instruction[pc][i];
decode();
exec();
if(flag==0) pc++;
flag=0;
}

void display()
{
fprintf(fp3“pc=%d\t\n“pc*4);
for(i=0;i<32;i++)
{
fprintf(fp3“Reg[%d]=%ld\t“ireg[i]);
if((i+1)%4==0)fprintf(fp3“\n“);
}
for(i=0;i fprintf

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2007-05-22 17:16  MIPS\
     文件        5744  2007-05-07 16:44  MIPS\asm.h
     文件          99  2007-05-13 15:54  MIPS\MathineCode.txt
     文件        4876  2007-05-13 19:33  MIPS\MIPS.txt
     文件         159  2007-05-13 17:59  MIPS\ReadMe.txt
     文件          49  2007-05-07 17:54  MIPS\sourse.txt
     文件        5135  2007-05-13 15:54  MIPS\statu.txt
     文件       31232  2007-05-13 18:08  MIPS\新建 Microsoft Word 文档.doc
     目录           0  2007-05-22 17:16  MIPS\模拟机\
     文件        5744  2007-05-07 16:44  MIPS\模拟机\huibian.h
     文件          49  2007-05-07 17:54  MIPS\模拟机\huibianma.txt
     文件         102  2007-05-07 18:13  MIPS\模拟机\jiqima.txt
     文件        5473  2007-05-07 18:13  MIPS\模拟机\state.txt
     文件        3725  2007-05-07 18:12  MIPS\模拟机\模拟机.cpp

评论

共有 条评论

相关资源