Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

how to do you convert this c++ cod to mips assembly to run on qtspim? #include <

ID: 3820224 • Letter: H

Question

how to do you convert this c++ cod to mips assembly to run on qtspim?

#include <iostream>
using namespace std;

int maxIs (int *x, int n);
int minIs (int *x, int n);
void avgIs (int *x, int n, int *theAvg, int *theRem);

int main(void) {
int n = 8;
int x[] = {1,2,3,4,5,6,7,8};
int theMax, theMin, theAvg, theRem;
  
theMax = maxIs(x,n);
theMin = minIs(x,n);
avgIs(x,n,&theAvg,&theRem);
  
cout << "max = " << theMax << " ";
cout << "min = " << theMin << " ";
cout << "avg = " << theAvg << " " << theRem << "/" << n << " ";
cout << "Bye! ";
}

int maxIs (int *x, int n) {
int i;
int theMax = 0;
for (i=0; i<n; i++) {
if (x[i]>theMax) theMax = x[i];
}
return (theMax);
}

int minIs (int *x, int n) {
int i;
int theMin = 0x7FFF;
for (i=0; i<n; i++) {
if (x[i]<theMin) theMin = x[i];
}
return (theMin);
}

void avgIs (int *x, int n, int *theAvg, int *theRem) {
int i;
int theSum = 0;
for (i=0; i<n; i++) {
theSum += x[i];
}
*theAvg = theSum / n;
*theRem = theSum % n;
}

Explanation / Answer

mips assembly program for given c++ code to run on qtspim------->

$LFB1024 = .
main:
        addiu   $sp,$sp,-88
        sw      $31,84($sp)
        sw      $fp,80($sp)
        move    $fp,$sp
        li      $2,8                        # 0x8
        sw      $2,24($fp)
        li      $2,1                        # 0x1
        sw      $2,36($fp)
        li      $2,2                        # 0x2
        sw      $2,40($fp)
        li      $2,3                        # 0x3
        sw      $2,44($fp)
        li      $2,4                        # 0x4
        sw      $2,48($fp)
        li      $2,5                        # 0x5
        sw      $2,52($fp)
        li      $2,6                        # 0x6
        sw      $2,56($fp)
        li      $2,7                        # 0x7
        sw      $2,60($fp)
        li      $2,8                        # 0x8
        sw      $2,64($fp)
        addiu   $2,$fp,36
        lw      $5,24($fp)
        move    $4,$2
        jal     maxIs(int*, int)
        nop

        sw      $2,28($fp)
        addiu   $2,$fp,36
        lw      $5,24($fp)
        move    $4,$2
        jal     minIs(int*, int)
        nop

        sw      $2,32($fp)
        addiu   $4,$fp,72
        addiu   $3,$fp,68
        addiu   $2,$fp,36
        move    $7,$4
        move    $6,$3
        lw      $5,24($fp)
        move    $4,$2
        jal     avgIs(int*, int, int*, int*)
        nop

        lui     $2,%hi($LC0)
        addiu   $5,$2,%lo($LC0)
        lui     $2,%hi(std::cout)
        addiu   $4,$2,%lo(std::cout)
        jal     std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
        nop

        lw      $5,28($fp)
        move    $4,$2
        jal     std::basic_ostream<char, std::char_traits<char> >::operator<<(int)
        nop

        move    $3,$2
        lui     $2,%hi($LC1)
        addiu   $5,$2,%lo($LC1)
        move    $4,$3
        jal     std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
        nop

        lui     $2,%hi($LC2)
        addiu   $5,$2,%lo($LC2)
        lui     $2,%hi(std::cout)
        addiu   $4,$2,%lo(std::cout)
        jal     std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
        nop

        lw      $5,32($fp)
        move    $4,$2
        jal     std::basic_ostream<char, std::char_traits<char> >::operator<<(int)
        nop

        move    $3,$2
        lui     $2,%hi($LC1)
        addiu   $5,$2,%lo($LC1)
        move    $4,$3
        jal     std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
        nop

        lui     $2,%hi($LC3)
        addiu   $5,$2,%lo($LC3)
        lui     $2,%hi(std::cout)
        addiu   $4,$2,%lo(std::cout)
        jal     std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
        nop

        move    $3,$2
        lw      $2,68($fp)
        nop
        move    $5,$2
        move    $4,$3
        jal     std::basic_ostream<char, std::char_traits<char> >::operator<<(int)
        nop

        move    $3,$2
        lui     $2,%hi($LC4)
        addiu   $5,$2,%lo($LC4)
        move    $4,$3
        jal     std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
        nop

        move    $3,$2
        lw      $2,72($fp)
        nop
        move    $5,$2
        move    $4,$3
        jal     std::basic_ostream<char, std::char_traits<char> >::operator<<(int)
        nop

        move    $3,$2
        lui     $2,%hi($LC5)
        addiu   $5,$2,%lo($LC5)
        move    $4,$3
        jal     std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
        nop

        lw      $5,24($fp)
        move    $4,$2
        jal     std::basic_ostream<char, std::char_traits<char> >::operator<<(int)
        nop

        move    $3,$2
        lui     $2,%hi($LC1)
        addiu   $5,$2,%lo($LC1)
        move    $4,$3
        jal     std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
        nop

        lui     $2,%hi($LC6)
        addiu   $5,$2,%lo($LC6)
        lui     $2,%hi(std::cout)
        addiu   $4,$2,%lo(std::cout)
        jal     std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
        nop

        move    $2,$0
        move    $sp,$fp
        lw      $31,84($sp)
        lw      $fp,80($sp)
        addiu   $sp,$sp,88
        j       $31
        nop

$LFB1025 = .
maxIs(int*, int):
        addiu   $sp,$sp,-24
        sw      $fp,20($sp)
        move    $fp,$sp
        sw      $4,24($fp)
        sw      $5,28($fp)
        sw      $0,12($fp)
        sw      $0,8($fp)
        lw      $3,8($fp)
        lw      $2,28($fp)
        nop
        slt     $2,$3,$2
        beq     $2,$0,$L4
        nop

        lw      $2,8($fp)
        nop
        sll     $2,$2,2
        lw      $3,24($fp)
        nop
        addu    $2,$3,$2
        lw      $3,0($2)
        lw      $2,12($fp)
        nop
        slt     $2,$2,$3
        beq     $2,$0,$L5
        nop

        lw      $2,8($fp)
        nop
        sll     $2,$2,2
        lw      $3,24($fp)
        nop
        addu    $2,$3,$2
        lw      $2,0($2)
        nop
        sw      $2,12($fp)
        lw      $2,8($fp)
        nop
        addiu   $2,$2,1
        sw      $2,8($fp)
        b       $L6
        nop

        lw      $2,12($fp)
        move    $sp,$fp
        lw      $fp,20($sp)
        addiu   $sp,$sp,24
        j       $31
        nop

$LFB1026 = .
minIs(int*, int):
        addiu   $sp,$sp,-24
        sw      $fp,20($sp)
        move    $fp,$sp
        sw      $4,24($fp)
        sw      $5,28($fp)
        li      $2,32767                    # 0x7fff
        sw      $2,12($fp)
        sw      $0,8($fp)
        lw      $3,8($fp)
        lw      $2,28($fp)
        nop
        slt     $2,$3,$2
        beq     $2,$0,$L9
        nop

        lw      $2,8($fp)
        nop
        sll     $2,$2,2
        lw      $3,24($fp)
        nop
        addu    $2,$3,$2
        lw      $3,0($2)
        lw      $2,12($fp)
        nop
        slt     $2,$3,$2
        beq     $2,$0,$L10
        nop

        lw      $2,8($fp)
        nop
        sll     $2,$2,2
        lw      $3,24($fp)
        nop
        addu    $2,$3,$2
        lw      $2,0($2)
        nop
        sw      $2,12($fp)
        lw      $2,8($fp)
        nop
        addiu   $2,$2,1
        sw      $2,8($fp)
        b       $L11
        nop

        lw      $2,12($fp)
        move    $sp,$fp
        lw      $fp,20($sp)
        addiu   $sp,$sp,24
        j       $31
        nop

$LFB1027 = .
avgIs(int*, int, int*, int*):
        addiu   $sp,$sp,-24
        sw      $fp,20($sp)
        move    $fp,$sp
        sw      $4,24($fp)
        sw      $5,28($fp)
        sw      $6,32($fp)
        sw      $7,36($fp)
        sw      $0,12($fp)
        sw      $0,8($fp)
        lw      $3,8($fp)
        lw      $2,28($fp)
        nop
        slt     $2,$3,$2
        beq     $2,$0,$L14
        nop

        lw      $2,8($fp)
        nop
        sll     $2,$2,2
        lw      $3,24($fp)
        nop
        addu    $2,$3,$2
        lw      $2,0($2)
        lw      $3,12($fp)
        nop
        addu    $2,$3,$2
        sw      $2,12($fp)
        lw      $2,8($fp)
        nop
        addiu   $2,$2,1
        sw      $2,8($fp)
        b       $L15
        nop

        lw      $3,12($fp)
        lw      $2,28($fp)
        nop
        bne     $2,$0,1f
        div     $0,$3,$2
        break   7
1:
        mfhi    $2
        mflo    $3
        lw      $2,32($fp)
        nop
        sw      $3,0($2)
        lw      $3,12($fp)
        lw      $2,28($fp)
        nop
        bne     $2,$0,1f
        div     $0,$3,$2
        break   7
1:
        mfhi    $2
        move    $3,$2
        lw      $2,36($fp)
        nop
        sw      $3,0($2)
        nop
        move    $sp,$fp
        lw      $fp,20($sp)
        addiu   $sp,$sp,24
        j       $31
        nop

$LFB1031 = .
__static_initialization_and_destruction_0(int, int):
        addiu   $sp,$sp,-32
        sw      $31,28($sp)
        sw      $fp,24($sp)
        move    $fp,$sp
        sw      $4,32($fp)
        sw      $5,36($fp)
        lw      $3,32($fp)
        li      $2,1                        # 0x1
        bne     $3,$2,$L18
        nop

        lw      $3,36($fp)
        li      $2,65535                    # 0xffff
        bne     $3,$2,$L18
        nop

        lui     $2,%hi(std::__ioinit)
        addiu   $4,$2,%lo(std::__ioinit)
        jal     std::ios_base::Init::Init()
        nop

        lui     $2,%hi(__dso_handle)
        addiu   $6,$2,%lo(__dso_handle)
        lui     $2,%hi(std::__ioinit)
        addiu   $5,$2,%lo(std::__ioinit)
        lui     $2,%hi(std::ios_base::Init::~Init())
        addiu   $4,$2,%lo(std::ios_base::Init::~Init())
        jal     __cxa_atexit
        nop

        nop
        move    $sp,$fp
        lw      $31,28($sp)
        lw      $fp,24($sp)
        addiu   $sp,$sp,32
        j       $31
        nop

$LFB1032 = .
_GLOBAL__sub_I_main:
        addiu   $sp,$sp,-32
        sw      $31,28($sp)
        sw      $fp,24($sp)
        move    $fp,$sp
        li      $5,65535                    # 0xffff
        li      $4,1                        # 0x1
        jal     __static_initialization_and_destruction_0(int, int)
        nop

        move    $sp,$fp
        lw      $31,28($sp)
        lw      $fp,24($sp)
        addiu   $sp,$sp,32
        j       $31
        nop