📄 huibian.h
字号:
#include<stdio.h>
#include<string.h>
#include<ctype.h>
FILE *fp1,*fp2;
char ch,opp[6],rss[2],rtt[2],rdd[2];
int i,dat[16],shm[5],ad[26];
int funcc,shmtt,dataa;
long int addrr;
void printdataa(int dataa,int len)
{
for(i=len;dataa>0;i--)
{
dat[i]=dataa%2;
dataa/=2;
}
while(i>=0)
dat[i--]=0;
for(i=0;i<len+1;i++)
fprintf(fp2,"%d",dat[i]);
}
void printaddrr(long int addrr)
{
for(i=25;addrr>0;i--)
{
ad[i]=addrr%2;
addrr/=2;
}
while(i>=0)
ad[i--]=0;
for(i=0;i<26;i++)
fprintf(fp2,"%d",ad[i]);
}
void regprint(char reg[])
{
if(reg[0]=='a')
switch(reg[1]){
case '0': fprintf(fp2,"00100");break;
case '1': fprintf(fp2,"00101");break;
case '2': fprintf(fp2,"00110");break;
case '3': fprintf(fp2,"00111");break;
case 't': fprintf(fp2,"00001");break;
}
if(reg[0]=='t')
switch(reg[1]){
case '0': fprintf(fp2,"01000");break;
case '1': fprintf(fp2,"01001");break;
case '2': fprintf(fp2,"01010");break;
case '3': fprintf(fp2,"01011");break;
case '4': fprintf(fp2,"01100");break;
case '5': fprintf(fp2,"01101");break;
case '6': fprintf(fp2,"01110");break;
case '7': fprintf(fp2,"01111");break;
case '8': fprintf(fp2,"11000");break;
case '9': fprintf(fp2,"11001");break;
}
if(reg[0]=='s')
switch(reg[1]){
case '0': fprintf(fp2,"10000");break;
case '1': fprintf(fp2,"10001");break;
case '2': fprintf(fp2,"10010");break;
case '3': fprintf(fp2,"10011");break;
case '4': fprintf(fp2,"10100");break;
case '5': fprintf(fp2,"10101");break;
case '6': fprintf(fp2,"10110");break;
case '7': fprintf(fp2,"10111");break;
case 'p': fprintf(fp2,"11101");break;
}
if(reg[0]=='k')
switch(reg[1]){
case '0': fprintf(fp2,"11010");break;
case '1': fprintf(fp2,"11011");break;
}
if(reg[0]=='v')
switch(reg[1]){
case '0': fprintf(fp2,"00010");break;
case '1': fprintf(fp2,"00011");break;
}
if(reg[0]=='g') fprintf(fp2,"11100");
if(reg[0]=='z') fprintf(fp2,"00000");
if(reg[0]=='f') fprintf(fp2,"11110");
if(reg[0]=='r') fprintf(fp2,"11111");
}
void readi()
{
while((ch=fgetc(fp1))!='$');
rtt[0]=fgetc(fp1);
rtt[1]=fgetc(fp1);
while((ch=fgetc(fp1))!='$');
rss[0]=fgetc(fp1);
rss[1]=fgetc(fp1);
fgetc(fp1);
fscanf(fp1,"%d",&dataa);
fgetc(fp1);
}
void printi()
{
regprint(rss);
regprint(rtt);
printdataa(dataa,15);
fprintf(fp2,"\n");
}
void readr()
{
while((ch=fgetc(fp1))!='$');
rdd[0]=fgetc(fp1);
rdd[1]=fgetc(fp1);
while((ch=fgetc(fp1))!='$');
rss[0]=fgetc(fp1);
rss[1]=fgetc(fp1);
while((ch=fgetc(fp1))!='$');
rtt[0]=fgetc(fp1);
rtt[1]=fgetc(fp1);
fgetc(fp1);
}
void printr()
{
fprintf(fp2,"000000");
regprint(rss);
regprint(rtt);
regprint(rdd);
fprintf(fp2,"00000");
}
void readii()
{
while((ch=fgetc(fp1))!='$');
rtt[0]=fgetc(fp1);
rtt[1]=fgetc(fp1);
fgetc(fp1);
fscanf(fp1,"%d",&dataa);
while((ch=fgetc(fp1))!='$');
rss[0]=fgetc(fp1);
rss[1]=fgetc(fp1);
while((ch=fgetc(fp1))!=')');
fgetc(fp1);
}
void printii()
{
regprint(rss);
regprint(rtt);
printdataa(dataa,15);
fprintf(fp2,"\n");
}
void printrr()
{
fprintf(fp2,"00000000000");
readi();
regprint(rss);
regprint(rtt);
printdataa(dataa,4);
}
void execc()
{
if(strcmp(opp,"lw")==0){fprintf(fp2,"100011");readii();printii();}
if(strcmp(opp,"sw")==0){fprintf(fp2,"101011");readii();printii();}
if(strcmp(opp,"sb")==0){fprintf(fp2,"101000");readii();printii();}
if(strcmp(opp,"sh")==0){fprintf(fp2,"101001");readii();printii();}
if(strcmp(opp,"lbu")==0){fprintf(fp2,"100100");readii();printii();}
if(strcmp(opp,"lhu")==0){fprintf(fp2,"100101");readii();printii();}
if(strcmp(opp,"addi")==0){fprintf(fp2,"001000");readi();printi();}
if(strcmp(opp,"addiu")==0){fprintf(fp2,"001001");readi();printi();}
if(strcmp(opp,"andi")==0){fprintf(fp2,"001100");readi();printi();}
if(strcmp(opp,"lui")==0){fprintf(fp2,"001111");readi();printi();}
if(strcmp(opp,"slti")==0){fprintf(fp2,"001010");readi();printi();}
if(strcmp(opp,"sltiu")==0){fprintf(fp2,"001011");readi();printi();}
if(strcmp(opp,"ori")==0){fprintf(fp2,"001101");readi();printi();}
if(strcmp(opp,"beq")==0){fprintf(fp2,"000100");readi();dataa/=4;printi();}
if(strcmp(opp,"bne")==0){fprintf(fp2,"000101");readi();dataa/=4;printi();}
if(strcmp(opp,"add")==0){readr();printr();fprintf(fp2,"100000");fprintf(fp2,"\n");}
if(strcmp(opp,"addu")==0){readr();printr();fprintf(fp2,"100001");fprintf(fp2,"\n");}
if(strcmp(opp,"sub")==0){readr();printr();fprintf(fp2,"100010");fprintf(fp2,"\n");}
if(strcmp(opp,"subu")==0){readr();printr();fprintf(fp2,"100011");fprintf(fp2,"\n");}
if(strcmp(opp,"and")==0){readr();printr();fprintf(fp2,"100100");fprintf(fp2,"\n");}
if(strcmp(opp,"or")==0){readr();printr();fprintf(fp2,"100101");fprintf(fp2,"\n");}
if(strcmp(opp,"nor")==0){readr();printr();fprintf(fp2,"100111");fprintf(fp2,"\n");}
if(strcmp(opp,"slt")==0){readr();printr();fprintf(fp2,"101010");fprintf(fp2,"\n");}
if(strcmp(opp,"sltu")==0){readr();printr();fprintf(fp2,"101011");fprintf(fp2,"\n");}
if(strcmp(opp,"j")==0){fprintf(fp2,"000010");fscanf(fp1,"%d",&addrr);printaddrr(addrr/4);fprintf(fp2,"\n");}
if(strcmp(opp,"jal")==0){fprintf(fp2,"000011");fscanf(fp1,"%d",&addrr);printaddrr(addrr/4);fprintf(fp2,"\n");}
if(strcmp(opp,"jr")==0)
{
fprintf(fp2,"000000");
while((ch=fgetc(fp1))!='$');
rss[0]=fgetc(fp1);
rss[1]=fgetc(fp1);
fgetc(fp1);
regprint(rss);
fprintf(fp2,"000000000000000001000\n");
}
if(strcmp(opp,"sll")==0){printrr();fprintf(fp2,"000000\n");}
if(strcmp(opp,"srl")==0){printrr();fprintf(fp2,"000010\n");}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -