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

Write a MIPS program that takes up to 20 integers as input from the user using t

ID: 3911783 • Letter: W

Question

Write a MIPS program that takes up to 20 integers as input from the user using the array frontend and outputs the integers in descending order of value separated by spaces. The code that does not work with the array frontend will not receive any marks. (Hint: Look at the Selection Sort example given below) For example, if the user enters integers 7, 29, 34, 1, 3 one by one using the array front end, the program outputs: 34 2973 1 Make sure you think about corner cases when writing your code. Note only use following instructions .word/add/sub/mult/multu/div/divu/mfhi/mflo/lis/lw/sw/slt/sltu/ beq/bne/ir/jalr

Explanation / Answer

.LC0:

.string "value of array"

.LC1:

.string " "

.LC2:

.string "Sorted (Descending Order) Array elements:"

.LC3:

.string " "

main:

push rbp

mov rbp, rsp

sub rsp, 96

mov esi, OFFSET FLAT:.LC0

mov edi, OFFSET FLAT:_ZSt4cout

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-4], 0

.L3:

cmp DWORD PTR [rbp-4], 19

jg .L2

lea rax, [rbp-96]

mov edx, DWORD PTR [rbp-4]

movsx rdx, edx

sal rdx, 2

add rax, rdx

mov rsi, rax

mov edi, OFFSET FLAT:_ZSt3cin

call std::basic_istream<char, std::char_traits<char> >::operator>>(int&)

add DWORD PTR [rbp-4], 1

jmp .L3

.L2:

mov DWORD PTR [rbp-4], 0

.L5:

cmp DWORD PTR [rbp-4], 19

jg .L4

mov eax, DWORD PTR [rbp-4]

cdqe

mov eax, DWORD PTR [rbp-96+rax*4]

mov esi, eax

mov edi, OFFSET FLAT:_ZSt4cout

call std::basic_ostream<char, std::char_traits<char> >::operator<<(int)

mov esi, OFFSET FLAT:.LC1

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*)

add DWORD PTR [rbp-4], 1

jmp .L5

.L4:

mov DWORD PTR [rbp-4], 0

.L10:

cmp DWORD PTR [rbp-4], 19

jg .L6

mov eax, DWORD PTR [rbp-4]

add eax, 1

mov DWORD PTR [rbp-8], eax

.L9:

cmp DWORD PTR [rbp-8], 19

jg .L7

mov eax, DWORD PTR [rbp-4]

cdqe

mov edx, DWORD PTR [rbp-96+rax*4]

mov eax, DWORD PTR [rbp-8]

cdqe

mov eax, DWORD PTR [rbp-96+rax*4]

cmp edx, eax

jge .L8

mov eax, DWORD PTR [rbp-4]

cdqe

mov eax, DWORD PTR [rbp-96+rax*4]

mov DWORD PTR [rbp-12], eax

mov eax, DWORD PTR [rbp-8]

cdqe

mov edx, DWORD PTR [rbp-96+rax*4]

mov eax, DWORD PTR [rbp-4]

cdqe

mov DWORD PTR [rbp-96+rax*4], edx

mov eax, DWORD PTR [rbp-8]

cdqe

mov edx, DWORD PTR [rbp-12]

mov DWORD PTR [rbp-96+rax*4], edx

.L8:

add DWORD PTR [rbp-8], 1

jmp .L9

.L7:

add DWORD PTR [rbp-4], 1

jmp .L10

.L6:

mov esi, OFFSET FLAT:.LC2

mov edi, OFFSET FLAT:_ZSt4cout

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, OFFSET FLAT:_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_

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 DWORD PTR [rbp-4], 0

.L12:

cmp DWORD PTR [rbp-4], 19

jg .L11

mov eax, DWORD PTR [rbp-4]

cdqe

mov eax, DWORD PTR [rbp-96+rax*4]

mov esi, eax

mov edi, OFFSET FLAT:_ZSt4cout

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*)

add DWORD PTR [rbp-4], 1

jmp .L12

.L11:

mov esi, OFFSET FLAT:_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_

mov edi, OFFSET FLAT:_ZSt4cout

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

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 .L16

cmp DWORD PTR [rbp-8], 65535

jne .L16

mov edi, OFFSET FLAT:_ZStL8__ioinit

call std::ios_base::Init::Init() [complete object constructor]

mov edx, OFFSET FLAT:__dso_handle

mov esi, OFFSET FLAT:_ZStL8__ioinit

mov edi, OFFSET FLAT:_ZNSt8ios_base4InitD1Ev

call __cxa_atexit

.L16:

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

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote