Hello , I have to finish a MIPS project, but I don\'t know how to do it , some o
ID: 3700543 • Letter: H
Question
Hello , I have to finish a MIPS project, but I don't know how to do it , some one who can help me transfer from the C language to MIPS. Thank you so much
#include<stdio.h>
char op[5]={'#', '+', '-', '*', '/',};
float cal(float x, float y, int op)
{
switch(op)
{
case 1: return x+y;
case 2: return x-y;
case 3: return x*y;
case 4: return x/y;
default: return 0.0;
}
}
float calculate_model1(float i, float j, float k, float t, int op1, int op2, int op3)
{
float r1, r2, r3;
r1 = cal(i, j, op1);
r2 = cal(r1, k, op2);
r3 = cal(r2, t, op3);
return r3;
}
float calculate_model2(float i, float j, float k, float t, int op1, int op2, int op3)
{
float r1, r2, r3;
r1 = cal(j, k, op2);
r2 = cal(i, r1, op1);
r3 = cal(r2, t, op3);
return r3;
}
float calculate_model3(float i, float j, float k, float t, int op1, int op2, int op3)
{
float r1, r2, r3 ;
r1 = cal(k, t, op3);
r2 = cal(j, r1, op2);
r3 = cal(i, r2, op1);
return r3;
}
float calculate_model4(float i, float j, float k, float t, int op1, int op2, int op3)
{
float r1, r2, r3;
r1 = cal(j, k, op2);
r2 = cal(r1, t, op3);
r3 = cal(i, r2, op1);
return r3;
}
float calculate_model5(float i,float j,float k,float t,int op1,int op2,int op3)
{
float r1, r2, r3 ;
r1 = cal(i, j, op1);
r2 = cal(k, t, op3);
r3 = cal(r1, r2, op2);
return r3;
}
int get24(int i, int j, int k, int t)
{
int op1, op2, op3;
int flag=0;
for(op1=1; op1<=4; op1++)
for(op2=1; op2<=4; op2++)
for(op3=1; op3<=4; op3++)
{
if(calculate_model1(i, j, k, t, op1, op2, op3)==24)
{
printf("((%d%c%d)%c%d)%c%d=24 ", i, op[op1], j, op[op2], k, op[op3], t);
flag = 1;
}
if(calculate_model2(i, j, k, t, op1, op2, op3)==24)
{
printf("(%d%c(%d%c%d))%c%d=24 ", i, op[op1], j, op[op2], k, op[op3], t);
flag = 1;
}
if(calculate_model3(i, j, k, t, op1, op2, op3)==24)
{
printf("%d%c(%d%c(%d%c%d))=24 ", i, op[op1], j, op[op2], k, op[op3], t);
flag = 1;
}
if(calculate_model4(i, j, k, t, op1, op2, op3)==24)
{
printf("%d%c((%d%c%d)%c%d)=24 ", i, op[op1], j, op[op2], k, op[op3], t);
flag = 1;
}
if(calculate_model5(i, j, k, t, op1, op2, op3)==24)
{
printf("(%d%c%d)%c(%d%c%d)=24 ", i, op[op1], j, op[op2], k, op[op3], t);
flag = 1;
}
}
return flag;
}
int main()
{
int i, j, k, t;
printf("Please input four integer (1~10) ");
loop: scanf("%d %d %d %d", &i, &j, &k, &t);
if(i<1||i>10 || j<1||j>10 || k<1||k>10 || t<1||t>10)
{
printf("Input illege, Please input again ");
goto loop;
}
if( get24(i, j, k, t) );
else
printf("Sorry, the four integer cannot be calculated to get 24 ");
return 0;
}
Explanation / Answer
ANSWER :
op:
.byte 35
.byte 43
.byte 45
.byte 42
.byte 47
cal(float, float, int):
addiu $sp,$sp,-8
sw $fp,4($sp)
move $fp,$sp
swc1 $f12,8($fp)
swc1 $f14,12($fp)
sw $6,16($fp)
lw $2,16($fp)
li $3,2 # 0x2
beq $2,$3,$L3
nop
slt $3,$2,3
beq $3,$0,$L4
nop
li $3,1 # 0x1
beq $2,$3,$L5
nop
b $L2
nop
$L4:
li $3,3 # 0x3
beq $2,$3,$L6
nop
li $3,4 # 0x4
beq $2,$3,$L7
nop
b $L2
nop
$L5:
lwc1 $f2,8($fp)
lwc1 $f0,12($fp)
nop
add.s $f0,$f2,$f0
b $L8
nop
$L3:
lwc1 $f2,8($fp)
lwc1 $f0,12($fp)
nop
sub.s $f0,$f2,$f0
b $L8
nop
$L6:
lwc1 $f2,8($fp)
lwc1 $f0,12($fp)
nop
mul.s $f0,$f2,$f0
b $L8
nop
$L7:
lwc1 $f2,8($fp)
lwc1 $f0,12($fp)
nop
div.s $f0,$f2,$f0
b $L8
nop
$L2:
mtc1 $0,$f0
$L8:
move $sp,$fp
lw $fp,4($sp)
addiu $sp,$sp,8
j $31
nop
calculate_model1(float, float, float, float, int, int, int):
addiu $sp,$sp,-48
sw $31,44($sp)
sw $fp,40($sp)
move $fp,$sp
swc1 $f12,48($fp)
swc1 $f14,52($fp)
sw $6,56($fp)
sw $7,60($fp)
lw $6,64($fp)
lwc1 $f14,52($fp)
lwc1 $f12,48($fp)
jal cal(float, float, int)
nop
swc1 $f0,24($fp)
lw $6,68($fp)
lwc1 $f14,56($fp)
lwc1 $f12,24($fp)
jal cal(float, float, int)
nop
swc1 $f0,28($fp)
lw $6,72($fp)
lwc1 $f14,60($fp)
lwc1 $f12,28($fp)
jal cal(float, float, int)
nop
swc1 $f0,32($fp)
lwc1 $f0,32($fp)
move $sp,$fp
lw $31,44($sp)
lw $fp,40($sp)
addiu $sp,$sp,48
j $31
nop
calculate_model2(float, float, float, float, int, int, int):
addiu $sp,$sp,-48
sw $31,44($sp)
sw $fp,40($sp)
move $fp,$sp
swc1 $f12,48($fp)
swc1 $f14,52($fp)
sw $6,56($fp)
sw $7,60($fp)
lw $6,68($fp)
lwc1 $f14,56($fp)
lwc1 $f12,52($fp)
jal cal(float, float, int)
nop
swc1 $f0,24($fp)
lw $6,64($fp)
lwc1 $f14,24($fp)
lwc1 $f12,48($fp)
jal cal(float, float, int)
nop
swc1 $f0,28($fp)
lw $6,72($fp)
lwc1 $f14,60($fp)
lwc1 $f12,28($fp)
jal cal(float, float, int)
nop
swc1 $f0,32($fp)
lwc1 $f0,32($fp)
move $sp,$fp
lw $31,44($sp)
lw $fp,40($sp)
addiu $sp,$sp,48
j $31
nop
calculate_model3(float, float, float, float, int, int, int):
addiu $sp,$sp,-48
sw $31,44($sp)
sw $fp,40($sp)
move $fp,$sp
swc1 $f12,48($fp)
swc1 $f14,52($fp)
sw $6,56($fp)
sw $7,60($fp)
lw $6,72($fp)
lwc1 $f14,60($fp)
lwc1 $f12,56($fp)
jal cal(float, float, int)
nop
swc1 $f0,24($fp)
lw $6,68($fp)
lwc1 $f14,24($fp)
lwc1 $f12,52($fp)
jal cal(float, float, int)
nop
swc1 $f0,28($fp)
lw $6,64($fp)
lwc1 $f14,28($fp)
lwc1 $f12,48($fp)
jal cal(float, float, int)
nop
swc1 $f0,32($fp)
lwc1 $f0,32($fp)
move $sp,$fp
lw $31,44($sp)
lw $fp,40($sp)
addiu $sp,$sp,48
j $31
nop
calculate_model4(float, float, float, float, int, int, int):
addiu $sp,$sp,-48
sw $31,44($sp)
sw $fp,40($sp)
move $fp,$sp
swc1 $f12,48($fp)
swc1 $f14,52($fp)
sw $6,56($fp)
sw $7,60($fp)
lw $6,68($fp)
lwc1 $f14,56($fp)
lwc1 $f12,52($fp)
jal cal(float, float, int)
nop
swc1 $f0,24($fp)
lw $6,72($fp)
lwc1 $f14,60($fp)
lwc1 $f12,24($fp)
jal cal(float, float, int)
nop
swc1 $f0,28($fp)
lw $6,64($fp)
lwc1 $f14,28($fp)
lwc1 $f12,48($fp)
jal cal(float, float, int)
nop
swc1 $f0,32($fp)
lwc1 $f0,32($fp)
move $sp,$fp
lw $31,44($sp)
lw $fp,40($sp)
addiu $sp,$sp,48
j $31
nop
calculate_model5(float, float, float, float, int, int, int):
addiu $sp,$sp,-48
sw $31,44($sp)
sw $fp,40($sp)
move $fp,$sp
swc1 $f12,48($fp)
swc1 $f14,52($fp)
sw $6,56($fp)
sw $7,60($fp)
lw $6,64($fp)
lwc1 $f14,52($fp)
lwc1 $f12,48($fp)
jal cal(float, float, int)
nop
swc1 $f0,24($fp)
lw $6,72($fp)
lwc1 $f14,60($fp)
lwc1 $f12,56($fp)
jal cal(float, float, int)
nop
swc1 $f0,28($fp)
lw $6,68($fp)
lwc1 $f14,28($fp)
lwc1 $f12,24($fp)
jal cal(float, float, int)
nop
swc1 $f0,32($fp)
lwc1 $f0,32($fp)
move $sp,$fp
lw $31,44($sp)
lw $fp,40($sp)
addiu $sp,$sp,48
j $31
nop
$LC1:
.ascii "((%d%c%d)%c%d)%c%d=24 "
$LC2:
.ascii "(%d%c(%d%c%d))%c%d=24 "
$LC3:
.ascii "%d%c(%d%c(%d%c%d))=24 "
$LC4:
.ascii "%d%c((%d%c%d)%c%d)=24 "
$LC5:
.ascii "(%d%c%d)%c(%d%c%d)=24 "
get24(int, int, int, int):
addiu $sp,$sp,-64
sw $31,60($sp)
sw $fp,56($sp)
move $fp,$sp
sw $4,64($fp)
sw $5,68($fp)
sw $6,72($fp)
sw $7,76($fp)
sw $0,52($fp)
li $2,1 # 0x1
sw $2,40($fp)
$L35:
lw $2,40($fp)
nop
slt $2,$2,5
beq $2,$0,$L20
nop
li $2,1 # 0x1
sw $2,44($fp)
$L34:
lw $2,44($fp)
nop
slt $2,$2,5
beq $2,$0,$L21
nop
li $2,1 # 0x1
sw $2,48($fp)
$L33:
lw $2,48($fp)
nop
slt $2,$2,5
beq $2,$0,$L22
nop
lw $2,64($fp)
nop
mtc1 $2,$f0
nop
cvt.s.w $f0,$f0
lw $2,68($fp)
nop
mtc1 $2,$f2
nop
cvt.s.w $f2,$f2
lw $2,72($fp)
nop
mtc1 $2,$f4
nop
cvt.s.w $f4,$f4
lw $2,76($fp)
nop
mtc1 $2,$f6
nop
cvt.s.w $f6,$f6
lw $2,48($fp)
nop
sw $2,24($sp)
lw $2,44($fp)
nop
sw $2,20($sp)
lw $2,40($fp)
nop
sw $2,16($sp)
mfc1 $7,$f6
mfc1 $6,$f4
mov.s $f14,$f2
mov.s $f12,$f0
jal calculate_model1(float, float, float, float, int, int, int)
nop
mov.s $f2,$f0
li $3,1 # 0x1
lui $2,%hi($LC0)
lwc1 $f0,%lo($LC0)($2)
nop
c.eq.s $f2,$f0
nop
bc1t $L23
nop
move $3,$0
$L23:
andi $2,$3,0x00ff
beq $2,$0,$L24
nop
lui $2,%hi(op)
addiu $3,$2,%lo(op)
lw $2,40($fp)
nop
addu $2,$3,$2
lb $2,0($2)
nop
move $5,$2
lui $2,%hi(op)
addiu $3,$2,%lo(op)
lw $2,44($fp)
nop
addu $2,$3,$2
lb $2,0($2)
nop
move $4,$2
lui $2,%hi(op)
addiu $3,$2,%lo(op)
lw $2,48($fp)
nop
addu $2,$3,$2
lb $2,0($2)
nop
move $3,$2
lw $2,76($fp)
nop
sw $2,28($sp)
sw $3,24($sp)
lw $2,72($fp)
nop
sw $2,20($sp)
sw $4,16($sp)
lw $7,68($fp)
move $6,$5
lw $5,64($fp)
lui $2,%hi($LC1)
addiu $4,$2,%lo($LC1)
jal printf
nop
li $2,1 # 0x1
sw $2,52($fp)
$L24:
lw $2,64($fp)
nop
mtc1 $2,$f0
nop
cvt.s.w $f0,$f0
lw $2,68($fp)
nop
mtc1 $2,$f2
nop
cvt.s.w $f2,$f2
lw $2,72($fp)
nop
mtc1 $2,$f4
nop
cvt.s.w $f4,$f4
lw $2,76($fp)
nop
mtc1 $2,$f6
nop
cvt.s.w $f6,$f6
lw $2,48($fp)
nop
sw $2,24($sp)
lw $2,44($fp)
nop
sw $2,20($sp)
lw $2,40($fp)
nop
sw $2,16($sp)
mfc1 $7,$f6
mfc1 $6,$f4
mov.s $f14,$f2
mov.s $f12,$f0
jal calculate_model2(float, float, float, float, int, int, int)
nop
mov.s $f2,$f0
li $3,1 # 0x1
lui $2,%hi($LC0)
lwc1 $f0,%lo($LC0)($2)
nop
c.eq.s $f2,$f0
nop
bc1t $L25
nop
move $3,$0
$L25:
andi $2,$3,0x00ff
beq $2,$0,$L26
nop
lui $2,%hi(op)
addiu $3,$2,%lo(op)
lw $2,40($fp)
nop
addu $2,$3,$2
lb $2,0($2)
nop
move $5,$2
lui $2,%hi(op)
addiu $3,$2,%lo(op)
lw $2,44($fp)
nop
addu $2,$3,$2
lb $2,0($2)
nop
move $4,$2
lui $2,%hi(op)
addiu $3,$2,%lo(op)
lw $2,48($fp)
nop
addu $2,$3,$2
lb $2,0($2)
nop
move $3,$2
lw $2,76($fp)
nop
sw $2,28($sp)
sw $3,24($sp)
lw $2,72($fp)
nop
sw $2,20($sp)
sw $4,16($sp)
lw $7,68($fp)
move $6,$5
lw $5,64($fp)
lui $2,%hi($LC2)
addiu $4,$2,%lo($LC2)
jal printf
nop
li $2,1 # 0x1
sw $2,52($fp)
$L26:
lw $2,64($fp)
nop
mtc1 $2,$f0
nop
cvt.s.w $f0,$f0
lw $2,68($fp)
nop
mtc1 $2,$f2
nop
cvt.s.w $f2,$f2
lw $2,72($fp)
nop
mtc1 $2,$f4
nop
cvt.s.w $f4,$f4
lw $2,76($fp)
nop
mtc1 $2,$f6
nop
cvt.s.w $f6,$f6
lw $2,48($fp)
nop
sw $2,24($sp)
lw $2,44($fp)
nop
sw $2,20($sp)
lw $2,40($fp)
nop
sw $2,16($sp)
mfc1 $7,$f6
mfc1 $6,$f4
mov.s $f14,$f2
mov.s $f12,$f0
jal calculate_model3(float, float, float, float, int, int, int)
nop
mov.s $f2,$f0
li $3,1 # 0x1
lui $2,%hi($LC0)
lwc1 $f0,%lo($LC0)($2)
nop
c.eq.s $f2,$f0
nop
bc1t $L27
nop
move $3,$0
$L27:
andi $2,$3,0x00ff
beq $2,$0,$L28
nop
lui $2,%hi(op)
addiu $3,$2,%lo(op)
lw $2,40($fp)
nop
addu $2,$3,$2
lb $2,0($2)
nop
move $5,$2
lui $2,%hi(op)
addiu $3,$2,%lo(op)
lw $2,44($fp)
nop
addu $2,$3,$2
lb $2,0($2)
nop
move $4,$2
lui $2,%hi(op)
addiu $3,$2,%lo(op)
lw $2,48($fp)
nop
addu $2,$3,$2
lb $2,0($2)
nop
move $3,$2
lw $2,76($fp)
nop
sw $2,28($sp)
sw $3,24($sp)
lw $2,72($fp)
nop
sw $2,20($sp)
sw $4,16($sp)
lw $7,68($fp)
move $6,$5
lw $5,64($fp)
lui $2,%hi($LC3)
addiu $4,$2,%lo($LC3)
jal printf
nop
li $2,1 # 0x1
sw $2,52($fp)
$L28:
lw $2,64($fp)
nop
mtc1 $2,$f0
nop
cvt.s.w $f0,$f0
lw $2,68($fp)
nop
mtc1 $2,$f2
nop
cvt.s.w $f2,$f2
lw $2,72($fp)
nop
mtc1 $2,$f4
nop
cvt.s.w $f4,$f4
lw $2,76($fp)
nop
mtc1 $2,$f6
nop
cvt.s.w $f6,$f6
lw $2,48($fp)
nop
sw $2,24($sp)
lw $2,44($fp)
nop
sw $2,20($sp)
lw $2,40($fp)
nop
sw $2,16($sp)
mfc1 $7,$f6
mfc1 $6,$f4
mov.s $f14,$f2
mov.s $f12,$f0
jal calculate_model4(float, float, float, float, int, int, int)
nop
mov.s $f2,$f0
li $3,1 # 0x1
lui $2,%hi($LC0)
lwc1 $f0,%lo($LC0)($2)
nop
c.eq.s $f2,$f0
nop
bc1t $L29
nop
move $3,$0
$L29:
andi $2,$3,0x00ff
beq $2,$0,$L30
nop
lui $2,%hi(op)
addiu $3,$2,%lo(op)
lw $2,40($fp)
nop
addu $2,$3,$2
lb $2,0($2)
nop
move $5,$2
lui $2,%hi(op)
addiu $3,$2,%lo(op)
lw $2,44($fp)
nop
addu $2,$3,$2
lb $2,0($2)
nop
move $4,$2
lui $2,%hi(op)
addiu $3,$2,%lo(op)
lw $2,48($fp)
nop
addu $2,$3,$2
lb $2,0($2)
nop
move $3,$2
lw $2,76($fp)
nop
sw $2,28($sp)
sw $3,24($sp)
lw $2,72($fp)
nop
sw $2,20($sp)
sw $4,16($sp)
lw $7,68($fp)
move $6,$5
lw $5,64($fp)
lui $2,%hi($LC4)
addiu $4,$2,%lo($LC4)
jal printf
nop
li $2,1 # 0x1
sw $2,52($fp)
$L30:
lw $2,64($fp)
nop
mtc1 $2,$f0
nop
cvt.s.w $f0,$f0
lw $2,68($fp)
nop
mtc1 $2,$f2
nop
cvt.s.w $f2,$f2
lw $2,72($fp)
nop
mtc1 $2,$f4
nop
cvt.s.w $f4,$f4
lw $2,76($fp)
nop
mtc1 $2,$f6
nop
cvt.s.w $f6,$f6
lw $2,48($fp)
nop
sw $2,24($sp)
lw $2,44($fp)
nop
sw $2,20($sp)
lw $2,40($fp)
nop
sw $2,16($sp)
mfc1 $7,$f6
mfc1 $6,$f4
mov.s $f14,$f2
mov.s $f12,$f0
jal calculate_model5(float, float, float, float, int, int, int)
nop
mov.s $f2,$f0
li $3,1 # 0x1
lui $2,%hi($LC0)
lwc1 $f0,%lo($LC0)($2)
nop
c.eq.s $f2,$f0
nop
bc1t $L31
nop
move $3,$0
$L31:
andi $2,$3,0x00ff
beq $2,$0,$L32
nop
lui $2,%hi(op)
addiu $3,$2,%lo(op)
lw $2,40($fp)
nop
addu $2,$3,$2
lb $2,0($2)
nop
move $5,$2
lui $2,%hi(op)
addiu $3,$2,%lo(op)
lw $2,44($fp)
nop
addu $2,$3,$2
lb $2,0($2)
nop
move $4,$2
lui $2,%hi(op)
addiu $3,$2,%lo(op)
lw $2,48($fp)
nop
addu $2,$3,$2
lb $2,0($2)
nop
move $3,$2
lw $2,76($fp)
nop
sw $2,28($sp)
sw $3,24($sp)
lw $2,72($fp)
nop
sw $2,20($sp)
sw $4,16($sp)
lw $7,68($fp)
move $6,$5
lw $5,64($fp)
lui $2,%hi($LC5)
addiu $4,$2,%lo($LC5)
jal printf
nop
li $2,1 # 0x1
sw $2,52($fp)
$L32:
lw $2,48($fp)
nop
addiu $2,$2,1
sw $2,48($fp)
b $L33
nop
$L22:
lw $2,44($fp)
nop
addiu $2,$2,1
sw $2,44($fp)
b $L34
nop
$L21:
lw $2,40($fp)
nop
addiu $2,$2,1
sw $2,40($fp)
b $L35
nop
$L20:
lw $2,52($fp)
move $sp,$fp
lw $31,60($sp)
lw $fp,56($sp)
addiu $sp,$sp,64
j $31
nop
$LC6:
.ascii "Please input four integer (1~10)"
$LC7:
.ascii "%d %d %d %d"
$LC8:
.ascii "Input illege, Please input again"
$LC9:
.ascii "Sorry, the four integer cannot be calculated to get 24"
main:
addiu $sp,$sp,-56
sw $31,52($sp)
sw $fp,48($sp)
move $fp,$sp
lui $2,%hi($LC6)
addiu $4,$2,%lo($LC6)
jal puts
nop
$L38:
addiu $4,$fp,40
addiu $3,$fp,36
addiu $2,$fp,44
sw $2,16($sp)
move $7,$4
move $6,$3
addiu $2,$fp,32
move $5,$2
lui $2,%hi($LC7)
addiu $4,$2,%lo($LC7)
jal scanf
nop
lw $2,32($fp)
nop
blez $2,$L39
nop
lw $2,32($fp)
nop
slt $2,$2,11
beq $2,$0,$L39
nop
lw $2,36($fp)
nop
blez $2,$L39
nop
lw $2,36($fp)
nop
slt $2,$2,11
beq $2,$0,$L39
nop
lw $2,40($fp)
nop
blez $2,$L39
nop
lw $2,40($fp)
nop
slt $2,$2,11
beq $2,$0,$L39
nop
lw $2,44($fp)
nop
blez $2,$L39
nop
lw $2,44($fp)
nop
slt $2,$2,11
bne $2,$0,$L40
nop
$L39:
lui $2,%hi($LC8)
addiu $4,$2,%lo($LC8)
jal puts
nop
b $L38
nop
$L40:
lw $2,32($fp)
lw $3,36($fp)
lw $4,40($fp)
lw $5,44($fp)
nop
move $7,$5
move $6,$4
move $5,$3
move $4,$2
jal get24(int, int, int, int)
nop
sltu $2,$0,$2
andi $2,$2,0x00ff
bne $2,$0,$L41
nop
lui $2,%hi($LC9)
addiu $4,$2,%lo($LC9)
jal puts
nop
$L41:
move $2,$0
move $sp,$fp
lw $31,52($sp)
lw $fp,48($sp)
addiu $sp,$sp,56
j $31
nop
$LC0:
.word 1103101952
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.