In MIPS Assembly Language display the first n numbers of the
In MIPS Assembly Language, display the first n numbers of the Fibonacci series. For example, if you input n=5, it displays the first 5 numbers of the series -> 1,1,2,3,5. N=1 and n=2 cases should also be handled. Construct an interface so that you can specify the number to be displayed. The user should also be prompted if they want to continue or no, 0 for exit and 1 for continue.
Solution
Answer:
MIPS Assembly Language Code :
.zero 1
 .LC0:
 .string \"Enter n value of numbers of the series: \"
 .LC1:
 .string \"Fibonacci numbers of the series is: \"
 .LC2:
 .string \" , \"
 main:
 push rbp
 mov rbp, rsp
 sub rsp, 32
 mov DWORD PTR [rbp-4], 1
 mov DWORD PTR [rbp-8], 1
 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-20]
 mov rsi, rax
 mov edi, OFFSET FLAT:std::cin
 call std::basic_istream<char, std::char_traits<char> >::operator>>(int&)
 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 rdx, rax
 mov eax, DWORD PTR [rbp-4]
 mov esi, eax
 mov rdi, rdx
 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 rdx, rax
 mov eax, DWORD PTR [rbp-8]
 mov esi, eax
 mov rdi, rdx
 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 DWORD PTR [rbp-12], 1
 .L3:
 mov eax, DWORD PTR [rbp-20]
 sub eax, 2
 cmp eax, DWORD PTR [rbp-12]
 jl .L2
 mov edx, DWORD PTR [rbp-4]
 mov eax, DWORD PTR [rbp-8]
 add eax, edx
 mov DWORD PTR [rbp-16], eax
 mov eax, DWORD PTR [rbp-16]
 mov esi, eax
 mov edi, OFFSET FLAT:std::cout
 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 eax, DWORD PTR [rbp-8]
 mov DWORD PTR [rbp-4], eax
 mov eax, DWORD PTR [rbp-16]
 mov DWORD PTR [rbp-8], eax
 add DWORD PTR [rbp-12], 1
 jmp .L3
 .L2:
 mov eax, 0
 leave
 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 .L7
 cmp DWORD PTR [rbp-8], 65535
 jne .L7
 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
 .L7:
 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


