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

Write in assembly language (in a separatefile named Lab.asm ) the function Avera

ID: 3593825 • Letter: W

Question

Write in assembly language (in a separatefile named Lab.asm ) the function Average.The first parameter is the number of elements in an array, the second is the address of the array. The function will determine the average of the values in the array and return the average rounded to the nearest whole number (if the fractional part of the result is equal to or greater than .5, the result is rounded to the next higher number.

#include <iostream>

using namespace std;

extern "C" long Average(long, long[]);

void main()

{

long Array1[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

long Array2[11] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };

long Array3[12] = { 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24 };

cout << "Average of Array1 is " << Average(10, Array1) << endl;

cout << "Average of Array2 is " << Average(11, Array2) << endl;

cout << "Average of Array3 is " << Average(12, Array3) << endl;

}

Explanation / Answer

The following answer is the assembly code of function average:

.LC0:

.string "Average of Array1 is "

.LC1:

.string "Average of Array2 is "

.LC2:

.string "Average of Array3 is "

main:

push rbp

mov rbp, rsp

push rbx

sub rsp, 280

mov QWORD PTR [rbp-96], 1

mov QWORD PTR [rbp-88], 2

mov QWORD PTR [rbp-80], 3

mov QWORD PTR [rbp-72], 4

mov QWORD PTR [rbp-64], 5

mov QWORD PTR [rbp-56], 6

mov QWORD PTR [rbp-48], 7

mov QWORD PTR [rbp-40], 8

mov QWORD PTR [rbp-32], 9

mov QWORD PTR [rbp-24], 10

mov QWORD PTR [rbp-192], 1

mov QWORD PTR [rbp-184], 2

mov QWORD PTR [rbp-176], 3

mov QWORD PTR [rbp-168], 4

mov QWORD PTR [rbp-160], 5

mov QWORD PTR [rbp-152], 6

mov QWORD PTR [rbp-144], 7

mov QWORD PTR [rbp-136], 8

mov QWORD PTR [rbp-128], 9

mov QWORD PTR [rbp-120], 10

mov QWORD PTR [rbp-112], 11

mov QWORD PTR [rbp-288], 2

mov QWORD PTR [rbp-280], 4

mov QWORD PTR [rbp-272], 6

mov QWORD PTR [rbp-264], 8

mov QWORD PTR [rbp-256], 10

mov QWORD PTR [rbp-248], 12

mov QWORD PTR [rbp-240], 14

mov QWORD PTR [rbp-232], 16

mov QWORD PTR [rbp-224], 18

mov QWORD PTR [rbp-216], 20

mov QWORD PTR [rbp-208], 22

mov QWORD PTR [rbp-200], 24

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

mov rbx, rax

lea rax, [rbp-96]

mov rsi, rax

mov edi, 10

call Average

mov rsi, rax

mov rdi, rbx

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

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 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 rbx, rax

lea rax, [rbp-192]

mov rsi, rax

mov edi, 11

call Average

mov rsi, rax

mov rdi, rbx

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

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

mov rbx, rax

lea rax, [rbp-288]

mov rsi, rax

mov edi, 12

call Average

mov rsi, rax

mov rdi, rbx

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

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, 280

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

cmp DWORD PTR [rbp-8], 65535

jne .L5

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

.L5:

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

Hope this helps .Thank you

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