question archive Convert the following C code into MIPS assembly language

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;

}

 

pur-new-sol

Purchase A New Answer

Custom new solution created by our subject matter experts

GET A QUOTE

Answer Preview

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