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

#include <iostream> #include <string> using namespace std; int main() { int heig

ID: 3805819 • Letter: #

Question

#include <iostream>
#include <string>
using namespace std;

int main()
{
int height = 0, weght = 0;
double bmi;
string name;
  
// prompt user for their data
cout << "What is your name? ";
cin >> name;
  
cout << "Please enter your height in inches: ";
cin >> height;
cout << "New enter your weight in pounds (round to a whole number): ";
cin >> weight;
  
// calculate the bmi
weight *= 703;
height *= height;
bmi = static_cast<double>(weight) / height;
  
// Output the results
cout << name << ", your bmi is: " << bmi << endl;
  
if (bmi < 18.5)
cout << "This is considered underweight. ";
else if (bmi < 25)
cout << "This is a normal weight. ";
else if (bmi < 30)
cout << "This is considered overweight . ";
else
cout << "This is considered obese. ";
  
return 0;
}

Write a MIPS program that calculates bmi. Use the following C++ code as pseudocode. The variable bmi can be single or double precision.

Explanation / Answer

$LFB1021 = .
main:
addiu $sp,$sp,-88
sw $31,84($sp)
sw $fp,80($sp)
sw $16,76($sp)
move $fp,$sp
lui $28,%hi(__gnu_local_gp)
addiu $28,$28,%lo(__gnu_local_gp)
lw $2,%got(__stack_chk_guard)($28)
lw $2,0($2)
sw $2,68($fp)
sw $0,24($fp)
sw $0,28($fp)
addiu $2,$fp,44
move $4,$2
lw $2,%call16(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string())($28)
move $25,$2
$LEHB0 = .
1: jalr $25
nop

$LEHE0 = .
lw $28,16($fp)
lui $2,%hi($LC0)
addiu $5,$2,%lo($LC0)
lw $4,%got(std::cout)($28)
lw $2,%call16(std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*))($28)
move $25,$2
$LEHB1 = .
1: jalr $25
nop

lw $28,16($fp)
addiu $2,$fp,44
move $5,$2
lw $4,%got(std::cin)($28)
lw $2,%call16(std::basic_istream<char, std::char_traits<char> >& std::operator>><char, std::char_traits<char>, std::allocator<char> >(std::basic_istream<char, std::char_traits<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&))($28)
move $25,$2
1: jalr $25
nop

lw $28,16($fp)
lui $2,%hi($LC1)
addiu $5,$2,%lo($LC1)
lw $4,%got(std::cout)($28)
lw $2,%call16(std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*))($28)
move $25,$2
1: jalr $25
nop

lw $28,16($fp)
addiu $2,$fp,24
move $5,$2
lw $4,%got(std::cin)($28)
lw $2,%call16(std::basic_istream<char, std::char_traits<char> >::operator>>(int&))($28)
move $25,$2
1: jalr $25
nop

lw $28,16($fp)
lui $2,%hi($LC2)
addiu $5,$2,%lo($LC2)
lw $4,%got(std::cout)($28)
lw $2,%call16(std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*))($28)
move $25,$2
1: jalr $25
nop

lw $28,16($fp)
addiu $2,$fp,28
move $5,$2
lw $4,%got(std::cin)($28)
lw $2,%call16(std::basic_istream<char, std::char_traits<char> >::operator>>(int&))($28)
move $25,$2
1: jalr $25
nop

lw $28,16($fp)
lw $3,28($fp)
li $2,703 # 0x2bf
mul $2,$3,$2
sw $2,28($fp)
lw $3,24($fp)
lw $2,24($fp)
mul $2,$3,$2
sw $2,24($fp)
lw $2,28($fp)
mtc1 $2,$f0
cvt.d.w $f2,$f0
lw $2,24($fp)
mtc1 $2,$f0
cvt.d.w $f0,$f0
div.d $f0,$f2,$f0
sdc1 $f0,32($fp)
addiu $2,$fp,44
move $5,$2
lw $4,%got(std::cout)($28)
lw $2,%call16(std::basic_ostream<char, std::char_traits<char> >& std::operator<< <char, std::char_traits<char>, std::allocator<char> >(std::basic_ostream<char, std::char_traits<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&))($28)
move $25,$2
1: jalr $25
nop

lw $28,16($fp)
move $3,$2
lui $2,%hi($LC3)
addiu $5,$2,%lo($LC3)
move $4,$3
lw $2,%call16(std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*))($28)
move $25,$2
1: jalr $25
nop

lw $28,16($fp)
lw $7,36($fp)
lw $6,32($fp)
move $4,$2
lw $2,%call16(std::basic_ostream<char, std::char_traits<char> >::operator<<(double))($28)
move $25,$2
1: jalr $25
nop

lw $28,16($fp)
lw $5,%got(std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&))($28)
move $4,$2
lw $2,%call16(std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&)))($28)
move $25,$2
1: jalr $25
nop

lw $28,16($fp)
ldc1 $f2,32($fp)
lui $2,%hi($LC4)
ldc1 $f0,%lo($LC4)($2)
c.lt.d $fcc0,$f2,$f0
bc1f $fcc0,$L16
nop

lui $2,%hi($LC5)
addiu $5,$2,%lo($LC5)
lw $4,%got(std::cout)($28)
lw $2,%call16(std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*))($28)
move $25,$2
1: jalr $25
nop

lw $28,16($fp)
b $L4
nop

ldc1 $f2,32($fp)
lui $2,%hi($LC6)
ldc1 $f0,%lo($LC6)($2)
c.lt.d $fcc1,$f2,$f0
bc1f $fcc1,$L17
nop

lui $2,%hi($LC7)
addiu $5,$2,%lo($LC7)
lw $4,%got(std::cout)($28)
lw $2,%call16(std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*))($28)
move $25,$2
1: jalr $25
nop

lw $28,16($fp)
b $L4
nop

ldc1 $f2,32($fp)
lui $2,%hi($LC8)
ldc1 $f0,%lo($LC8)($2)
c.lt.d $fcc2,$f2,$f0
bc1f $fcc2,$L18
nop

lui $2,%hi($LC9)
addiu $5,$2,%lo($LC9)
lw $4,%got(std::cout)($28)
lw $2,%call16(std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*))($28)
move $25,$2
1: jalr $25
nop

lw $28,16($fp)
b $L4
nop

lui $2,%hi($LC10)
addiu $5,$2,%lo($LC10)
lw $4,%got(std::cout)($28)
lw $2,%call16(std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*))($28)
move $25,$2
1: jalr $25
nop

$LEHE1 = .
lw $28,16($fp)
move $16,$0
addiu $2,$fp,44
move $4,$2
lw $2,%call16(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string())($28)
move $25,$2
$LEHB2 = .
1: jalr $25
nop

$LEHE2 = .
lw $28,16($fp)
move $2,$16
lw $3,%got(__stack_chk_guard)($28)
lw $4,68($fp)
lw $3,0($3)
beq $4,$3,$L11
nop

b $L19
nop

lw $28,16($fp)
move $16,$4
addiu $2,$fp,44
move $4,$2
lw $2,%call16(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string())($28)
move $25,$2
1: jalr $25
nop

lw $28,16($fp)
move $2,$16
move $4,$2
lw $2,%call16(_Unwind_Resume)($28)
move $25,$2
$LEHB3 = .
1: jalr $25
nop

$LEHE3 = .
lw $2,%call16(__stack_chk_fail)($28)
move $25,$2
1: jalr $25
nop

move $sp,$fp
lw $31,84($sp)
lw $fp,80($sp)
lw $16,76($sp)
addiu $sp,$sp,88
j $31
nop

$LFB1075 = .
__static_initialization_and_destruction_0(int, int):
addiu $sp,$sp,-32
sw $31,28($sp)
sw $fp,24($sp)
move $fp,$sp
lui $28,%hi(__gnu_local_gp)
addiu $28,$28,%lo(__gnu_local_gp)
sw $4,32($fp)
sw $5,36($fp)
lw $3,32($fp)
li $2,1 # 0x1
bne $3,$2,$L22
nop

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

lui $2,%hi(std::__ioinit)
addiu $4,$2,%lo(std::__ioinit)
lw $2,%call16(std::ios_base::Init::Init())($28)
move $25,$2
1: jalr $25
nop

lw $28,16($fp)
lui $2,%hi(__dso_handle)
addiu $6,$2,%lo(__dso_handle)
lui $2,%hi(std::__ioinit)
addiu $5,$2,%lo(std::__ioinit)
lw $4,%got(std::ios_base::Init::~Init())($28)
lw $2,%call16(__cxa_atexit)($28)
move $25,$2
1: jalr $25
nop

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

$LFB1076 = .
_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

DW.ref.__gxx_personality_v0:
.word __gxx_personality_v0