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
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.