(IN ASSEMBLY LANGUAGE) For this program you will find the largest element in an
ID: 3776512 • Letter: #
Question
(IN ASSEMBLY LANGUAGE)
For this program you will find the largest element in an array of DWORDs.
The output of your program will be:
The Largest Integer In the Array is: +6
where, for the example I used, the largest element in the array is 6. You will make up your own array of integers with at least 6 integers, and including some duplicate values.
You will do all of your work using registers, i.e. NO variables appear in your code except to initialize registers once.
You code must include:
meaningful simultaneous use of EAX, EBX, ECX, EDX
at least three jump instructions
at least two compare instructions
at least one meaningful use of LENGTHOF
at least one meaningful use of TYPE
at least one meaningful use of OFFSET
at least one meaningful use of indirect addressing
use of WriteString and WriteInt from the Irvine library
Explanation / Answer
Answer:
Assembly Language Code :
.zero 1
.LC0:
.string "Enter total number of elements: "
.LC1:
.string "Enter Number "
.LC2:
.string " : "
.LC3:
.string "Largest element = "
main:
push rbp
mov rbp, rsp
push rbx
sub rsp, 424
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 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 edi, OFFSET FLAT:std::cout
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-20], 0
.L3:
mov eax, DWORD PTR [rbp-24]
cmp DWORD PTR [rbp-20], eax
jge .L2
mov eax, DWORD PTR [rbp-20]
lea ebx, [rax+1]
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, ebx
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*)
lea rax, [rbp-432]
mov edx, DWORD PTR [rbp-20]
movsx rdx, edx
sal rdx, 2
add rax, rdx
mov rsi, rax
mov edi, OFFSET FLAT:std::cin
call std::basic_istream<char, std::char_traits<char> >::operator>>(int&)
add DWORD PTR [rbp-20], 1
jmp .L3
.L2:
mov DWORD PTR [rbp-20], 1
.L6:
mov eax, DWORD PTR [rbp-24]
cmp DWORD PTR [rbp-20], eax
jge .L4
mov edx, DWORD PTR [rbp-432]
mov eax, DWORD PTR [rbp-20]
cdqe
mov eax, DWORD PTR [rbp-432+rax*4]
cmp edx, eax
jge .L5
mov eax, DWORD PTR [rbp-20]
cdqe
mov eax, DWORD PTR [rbp-432+rax*4]
mov DWORD PTR [rbp-432], eax
.L5:
add DWORD PTR [rbp-20], 1
jmp .L6
.L4:
mov ebx, DWORD PTR [rbp-432]
mov esi, OFFSET FLAT:.LC3
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, ebx
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >::operator<<(int)
mov eax, 0
add rsp, 424
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 .L10
cmp DWORD PTR [rbp-8], 65535
jne .L10
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
.L10:
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
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.