question archive Convert the following C code into MIPS assembly language
Subject:Computer SciencePrice:4.86 Bought8
Convert the following C code into MIPS assembly language.
#include <stdio.h>
int number= 0;
int exponent= 0;
int result= 0;
static int power(int base, int expon);
static int sopd(int num, int n);
int power(int base, int expon) {
int i, ans;
ans= 1;
for (i= 1; i <= expon; i++)
ans *= base;
return ans;
}
int sopd(int num, int n) {
int i, ans;
ans= -1;
if (num >= 1 && n >= 0) {
ans= 0;
for (i= 1; i <= num; i++)
if (num % i == 0) /* i is a divisor */
ans += power(i, n);
}
return ans;
}
int main(void) {
scanf("%d %d", &number, &exponent);
result= sopd(number, exponent);
printf("%dn", result);
return 0;
}
number: exponent: result: power: addiu $sp,$sp,-24 sw $fp,20($sp) move $fp,$sp sw $4,24($fp) sw $5,28($fp) li $2,1 # 0x1 sw $2,12($fp) li $2,1 # 0x1 sw $2,8($fp) b $L2 nop $L3: lw $3,12($fp) lw $2,24($fp) nop mult $3,$2 mflo $2 sw $2,12($fp) lw $2,8($fp) nop addiu $2,$2,1 sw $2,8($fp) $L2: lw $3,8($fp) lw $2,28($fp) nop slt $2,$2,$3 beq $2,$0,$L3 nop lw $2,12($fp) move $sp,$fp lw $fp,20($sp) addiu $sp,$sp,24 j $31 nop sopd: addiu $sp,$sp,-40 sw $31,36($sp) sw $fp,32($sp) move $fp,$sp sw $4,40($fp) sw $5,44($fp) li $2,-1 # 0xffffffffffffffff sw $2,28($fp) lw $2,40($fp) nop blez $2,$L6 nop lw $2,44($fp) nop bltz $2,$L6 nop sw $0,28($fp) li $2,1 # 0x1 sw $2,24($fp) b $L7 nop $L9: lw $3,40($fp) lw $2,24($fp) nop bne $2,$0,1f div $0,$3,$2 break 7 mfhi $2 bne $2,$0,$L8 nop lw $5,44($fp) lw $4,24($fp) jal power nop move $3,$2 lw $2,28($fp) nop addu $2,$2,$3 sw $2,28($fp) $L8: lw $2,24($fp) nop addiu $2,$2,1 sw $2,24($fp) $L7: lw $3,24($fp) lw $2,40($fp) nop slt $2,$2,$3 beq $2,$0,$L9 nop $L6: lw $2,28($fp) move $sp,$fp lw $31,36($sp) lw $fp,32($sp) addiu $sp,$sp,40 j $31 nop $LC0: .ascii "%d %d\000" $LC1: .ascii "%d\012\000" main: addiu $sp,$sp,-32 sw $31,28($sp) sw $fp,24($sp) move $fp,$sp lui $2,%hi(exponent) addiu $6,$2,%lo(exponent) lui $2,%hi(number) addiu $5,$2,%lo(number) lui $2,%hi($LC0) addiu $4,$2,%lo($LC0) jal __isoc99_scanf nop lui $2,%hi(number) lw $3,%lo(number)($2) lui $2,%hi(exponent) lw $2,%lo(exponent)($2) nop move $5,$2 move $4,$3 jal sopd nop move $3,$2 lui $2,%hi(result) sw $3,%lo(result)($2) lui $2,%hi(result) lw $2,%lo(result)($2) nop move $5,$2 lui $2,%hi($LC1) addiu $4,$2,%lo($LC1) jal printf nop move $2,$0 move $sp,$fp lw $31,28($sp) lw $fp,24($sp) addiu $sp,$sp,32 j $31 nop