Problem Statement Write a MIPS assembly program that prompts

Problem Statement:

Write a MIPS assembly program that prompts the user for 2 positive integers (>0). Then it uses the Recursive (the Greatest Common Divisor). Please see next page for the Recursive

in C++. Sample Execution 1:

Euclidean Algorithm to calculate GCD

Euclidean Algorithm

** Recursive Euclidean Algorithm to calculate GCD **

Type a positive integer for A: 35

Type a positive integer for B: 63

The GCD is 7

Sample Execution 2:

** Recursive Euclidean Algorithm to calculate GCD **

Type a positive integer for A: -2

Sorry, you must enter a positive integer (>0). Please try again.

Note:

- If your program produces a correct answer without using function calls, the best grade you will receive is a “C”.
- If your program produces a correct answer and uses function calls (but not recursive function calls), the best grade

you will receive is a “B”.
- In order to receive an “A”, your program must produces a correct answer, uses RECURSIVE function calls, and is

well commented.

//

// #include \"stdafx.h\"

#include <iostream>

using namespace std;

}

int main() {

int A, B;

if (B == 0)

else

return A;

return GCD(B, A%B);

cout << \"The Euclidean Algorithm to calculate GCD.\ \";

cout << \"Enter a positive integer A: \";

cin >> A;

cout << \"Enter a positive integer B: \";

cin >> B;

if (A < 1 || B < 1)

cout << \"\ Error, please enter a positive (>0) integer.\" << endl;

else

{

if (A < B)

{

int temp = A;

A = B;

B = temp;

}

cout << \"The GCD is \" << GCD(A, B) << endl;

}

return 0; }

Solution

Answer:

MIPS Assembly Language Code For G C D Using Recursion:

.zero 1
L0:
push rbp
mov rbp, rsp
sub rsp, 16
mov DWORD PTR [rbp-4], edi
mov DWORD PTR [rbp-8], esi
cmp DWORD PTR [rbp-8], 0
je .L2
mov eax, DWORD PTR [rbp-4]
cdq
idiv DWORD PTR [rbp-8]
mov eax, DWORD PTR [rbp-8]
mov esi, edx
mov edi, eax
call L0
jmp .L4
.L2:
mov eax, DWORD PTR [rbp-4]
.L4:
leave
ret
.LC0:
.string \"Enter two numbers to find GCD using Euclidean algorithm: \"
.LC1:
.string \"\ The GCD of \"
.LC2:
.string \" and \"
.LC3:
.string \" is: \"
main:
push rbp
mov rbp, rsp
push r12
push rbx
sub rsp, 16
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-24]
mov rsi, rax
mov edi, OFFSET FLAT:std::cin
call std::basic_istream<char, std::char_traits<char> >::operator>>(int&)
mov rdx, rax
lea rax, [rbp-28]
mov rsi, rax
mov rdi, rdx
call std::basic_istream<char, std::char_traits<char> >::operator>>(int&)
mov edx, DWORD PTR [rbp-28]
mov eax, DWORD PTR [rbp-24]
mov esi, edx
mov edi, eax
call L0
mov DWORD PTR [rbp-20], eax
mov ebx, DWORD PTR [rbp-28]
mov r12d, DWORD PTR [rbp-24]
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*)
mov esi, r12d
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >::operator<<(int)
mov esi, OFFSET FLAT:.LC2
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 esi, ebx
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >::operator<<(int)
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 eax, DWORD PTR [rbp-20]
mov esi, eax
mov rdi, rdx
call std::basic_ostream<char, std::char_traits<char> >::operator<<(int)
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> >&))
mov eax, 0
add rsp, 16
pop rbx
pop r12
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 .L9
cmp DWORD PTR [rbp-8], 65535
jne .L9
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
.L9:
nop
leave
ret
push rbp
mov rbp, rsp
mov esi, 65535
mov edi, 1
call __static_initialization_and_destruction_0(int, int)
pop rbp
ret

Problem Statement: Write a MIPS assembly program that prompts the user for 2 positive integers (>0). Then it uses the Recursive (the Greatest Common Divisor)
Problem Statement: Write a MIPS assembly program that prompts the user for 2 positive integers (>0). Then it uses the Recursive (the Greatest Common Divisor)
Problem Statement: Write a MIPS assembly program that prompts the user for 2 positive integers (>0). Then it uses the Recursive (the Greatest Common Divisor)
Problem Statement: Write a MIPS assembly program that prompts the user for 2 positive integers (>0). Then it uses the Recursive (the Greatest Common Divisor)

Get Help Now

Submit a Take Down Notice

Tutor
Tutor: Dr Jack
Most rated tutor on our site