#include<stdio.h> intRegDst,ALUSrc,MemtoReg,RegWrite,MemRead,MemWrite,Branch,ALU
ID: 3617247 • Letter: #
Question
#include<stdio.h>
intRegDst,ALUSrc,MemtoReg,RegWrite,MemRead,MemWrite,Branch,ALUOp1,ALUOp0;
int sub,c1,c0;
int inst[32];
main (){
int i;
printf("hmwrk5: ");
scanf("%d %d %d %d%d %d",
&inst[31],&inst[30],&inst[29],&inst[28],&inst[27],&inst[26]);
for(i=31;i>=26;i--)
printf("%d",inst[i]);
printf("function field: ");
scanf("%d %d %d %d%d %d",
&inst[5],&inst[4],&inst[3],&inst[2],&inst[1],&inst[0]);
return0;
}
/* The main controlunit for the MIPS single-cycle. */
voidcontrol()
{
RegDst =
(!inst[31] && !inst[30] && !inst[29] &&!inst[28] && !inst[27] && !inst[26]);
ALUSrc =
(inst[31] && !inst[30] && !inst[28]&& inst[27] && inst[26]);
MemtoReg=
(inst[31] && !inst[30] && !inst[29] &&!inst[28] && inst[27] && inst[26]);
RegWrite =(!inst[30] && !inst[29] && !inst[28]);
MemRead=
(inst[31] && !inst[30] && !inst[29] &&!inst[28] && inst[27] && inst[26]);
MemWrite=
(inst[31] && !inst[30] && inst[29] &&!inst[28] && inst[27] && inst[26]);
Branch =
(!inst[31] && !inst[30] && !inst[29] &&inst[28] && !inst[27] && !inst[26]);
ALUOp1 =
(!inst[31] && !inst[30] && !inst[29] &&!inst[28] && !inst[27] && !inst[26]);
ALUOp0 =
(!inst[31] && !inst[30] && !inst[29]&& inst[28] && !inst[27] &&!inst[26]);
}
/* ALU control as definedon page 302 of Hennesy and Patterson. */
intalu_control()
{
sub = ALUOp0 ||(ALUOp1 && !inst[3] && !inst[2] && inst[1]&& !inst[0])
||(ALUOp1 && inst[3] && !inst[2] && inst[1]&& !inst[0]);
c1 = !((ALUOp1&& !inst[3] && inst[2] && !inst[1]&& !inst[0])
|| (ALUOp1&& !inst[3] && inst[2] && !inst[1]&& inst[0]));
c0 = (ALUOp1&& !inst[3] && inst[2] && !inst[1]&& inst[0])
||(ALUOp1 && inst[3] && !inst[2] && inst[1]&& !inst[0]);
return0;
}
Explanation / Answer
please rate - thanks I'm really not enjoying this and I don't have to do it, I onlystarted it since you asked, but it should give you an idea. to get the controls and ALU you have to pack, the way Iunpacked good luck #include intRegDst,ALUSrc,MemtoReg,RegWrite,MemRead,MemWrite,Branch,ALUOp1,ALUOp0; int sub,c1,c0; inst[32]={0}; unsigned int of,ff,cont,alu; void control(); void alu_control(); void unpackop(); void unpackff(); main (){ int i; printf("hmwrk5: "); printf("op field: "); scanf ("%x",&of); unpackop(); printf("function field: "); scanf("%x",&ff); unpackff(); control(); printf("control signals: %9x ",cont); printf("alu control: %3x ",alu); getch(); return 0; } void unpackop() {unsigned int mask=0x100000; int i; for(i=31;i>=26;i--) {if((of&mask)==mask) inst[i]=1; mask=mask>>4; } for(i=31;i>=26;i--) printf("%d ",inst[i]); printf(" "); } void unpackff() {unsigned int mask=1; int i; for(i=0;iRelated Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.