Please follow the rubric at the bottom of the page BMI Calculator - The purpose
ID: 3821540 • Letter: P
Question
Please follow the rubric at the bottom of the page
BMI Calculator - The purpose of this assignment is to practice MIPS programming with arithmetic operations. Refer to PPT 8a for examples of FP math. Write a MIPS program that calculates bmi. Use the following C++ code as pseudocode. The variable bmi can be single or double precision. #include #include using namespace std; int main() {int height = 0, weight = 0; double bmi; string name;//Prompt user for their data cout name; cout height; cout weight;//Calculate the bmi weight * = 703; height * = height; bmi = static_cast(weight)/height;//Output the results coutExplanation / Answer
.LC0:
.string "What is your name? "
.LC1:
.string "Please enter your height in inches: "
.LC2:
.string "Now enter your weight in pounds (round to a whole number): "
.LC3:
.string ", your bmi is: "
.LC5:
.string "This is considered underweight. "
.LC7:
.string "This is a normal weight. "
.LC9:
.string "This is considered overweight. "
.LC10:
.string "This is considered obese. "
main:
push rbp
mov rbp, rsp
push rbx
sub rsp, 72
mov DWORD PTR [rbp-28], 0
mov DWORD PTR [rbp-32], 0
lea rax, [rbp-64]
mov rdi, rax
call std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string()
mov esi, OFFSET FLAT:.LC0
mov edi, OFFSET FLAT:std::cout
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
lea rax, [rbp-64]
mov rsi, rax
mov edi, OFFSET FLAT:std::cin
call 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> >&)
mov esi, OFFSET FLAT:.LC1
mov edi, OFFSET FLAT:std::cout
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
lea rax, [rbp-28]
mov rsi, rax
mov edi, OFFSET FLAT:std::cin
call std::basic_istream<char, std::char_traits<char> >::operator>>(int&)
mov esi, OFFSET FLAT:.LC2
mov edi, OFFSET FLAT:std::cout
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
lea rax, [rbp-32]
mov rsi, rax
mov edi, OFFSET FLAT:std::cin
call std::basic_istream<char, std::char_traits<char> >::operator>>(int&)
mov eax, DWORD PTR [rbp-32]
imul eax, eax, 703
mov DWORD PTR [rbp-32], eax
mov edx, DWORD PTR [rbp-28]
mov eax, DWORD PTR [rbp-28]
imul eax, edx
mov DWORD PTR [rbp-28], eax
mov eax, DWORD PTR [rbp-32]
pxor xmm0, xmm0
cvtsi2sd xmm0, eax
mov eax, DWORD PTR [rbp-28]
pxor xmm1, xmm1
cvtsi2sd xmm1, eax
divsd xmm0, xmm1
movsd QWORD PTR [rbp-24], xmm0
lea rax, [rbp-64]
mov rsi, rax
mov edi, OFFSET FLAT:std::cout
call 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&)
mov esi, OFFSET FLAT:.LC3
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
mov rdx, rax
mov rax, QWORD PTR [rbp-24]
mov QWORD PTR [rbp-72], rax
movsd xmm0, QWORD PTR [rbp-72]
mov rdi, rdx
call std::basic_ostream<char, std::char_traits<char> >::operator<<(double)
mov esi, OFFSET FLAT:std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)
mov rdi, rax
call 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> >&))
movsd xmm0, QWORD PTR .LC4[rip]
ucomisd xmm0, QWORD PTR [rbp-24]
jbe .L15
mov esi, OFFSET FLAT:.LC5
mov edi, OFFSET FLAT:std::cout
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
jmp .L4
.L15:
movsd xmm0, QWORD PTR .LC6[rip]
ucomisd xmm0, QWORD PTR [rbp-24]
jbe .L16
mov esi, OFFSET FLAT:.LC7
mov edi, OFFSET FLAT:std::cout
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
jmp .L4
.L16:
movsd xmm0, QWORD PTR .LC8[rip]
ucomisd xmm0, QWORD PTR [rbp-24]
jbe .L17
mov esi, OFFSET FLAT:.LC9
mov edi, OFFSET FLAT:std::cout
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
jmp .L4
.L17:
mov esi, OFFSET FLAT:.LC10
mov edi, OFFSET FLAT:std::cout
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
.L4:
mov ebx, 0
lea rax, [rbp-64]
mov rdi, rax
call std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()
mov eax, ebx
jmp .L18
mov rbx, rax
lea rax, [rbp-64]
mov rdi, rax
call std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()
mov rax, rbx
mov rdi, rax
call _Unwind_Resume
.L18:
add rsp, 72
pop rbx
pop rbp
ret
__static_initialization_and_destruction_0(int, int):
push rbp
mov rbp, rsp
sub rsp, 16
mov DWORD PTR [rbp-4], edi
mov DWORD PTR [rbp-8], esi
cmp DWORD PTR [rbp-4], 1
jne .L21
cmp DWORD PTR [rbp-8], 65535
jne .L21
mov edi, OFFSET FLAT:std::__ioinit
call std::ios_base::Init::Init()
mov edx, OFFSET FLAT:__dso_handle
mov esi, OFFSET FLAT:std::__ioinit
mov edi, OFFSET FLAT:std::ios_base::Init::~Init()
call __cxa_atexit
.L21:
nop
leave
ret
_GLOBAL__sub_I_main:
push rbp
mov rbp, rsp
mov esi, 65535
mov edi, 1
call __static_initialization_and_destruction_0(int, int)
pop rbp
ret
.LC4:
.long 0
.long 1077051392
.LC6:
.long 0
.long 1077477376
.LC8:
.long 0
.long 1077805056