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

PROGRAM 6: Surface Area Of A Sphere The surface area of a sphere is equal to: wh

ID: 3867453 • Letter: P

Question

PROGRAM 6: Surface Area Of A Sphere
The surface area of a sphere is equal to:

where r is the radius of the sphere.

Write an HLA Assembly language program that computes the surface area based on a radius. A sample program dialogue is shown below. However you decide to do it, your main program should include calling a procedure or function (atleast one...) to solve this problem.

Lemme calculate the surface area of a sphere!
Gimme r: 2.15
Surface Area = 58.0880


Lemme calculate the surface area of a sphere!
Gimme r: 3.9
Surface Area = 191.1345

Surface Area-42

Explanation / Answer

/* HLA Assembly language program that computes the surface area based on a radius.*/

s:

radius:

.zero 4

answer:

.zero 4

.LC0:

.string "Lemme calculate the surface area of a sphere!"

.LC1:

.string "Enter 's' to stop or anything else to calculate the surface area of a sphere!"

.LC2:

.string "PAUSE"

main:

push rbp

mov rbp, rsp

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

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: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 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:s

mov edi, OFFSET FLAT:std::cin

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

.L3:

movzx eax, BYTE PTR s[rip]

cmp al, 115

je .L2

mov edi, OFFSET FLAT:radius

call get_radius(float&)

mov eax, DWORD PTR radius[rip]

mov DWORD PTR [rbp-4], eax

movss xmm0, DWORD PTR [rbp-4]

call surface_area(float)

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, 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:s

mov edi, OFFSET FLAT:std::cin

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

jmp .L3

.L2:

mov edi, OFFSET FLAT:.LC2

call system

mov eax, 0

leave

ret

.LC3:

.string "Gimme r : "

get_radius(float&):

push rbp

mov rbp, rsp

sub rsp, 16

mov QWORD PTR [rbp-8], rdi

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, 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 rax, QWORD PTR [rbp-8]

mov rsi, rax

mov edi, OFFSET FLAT:std::cin

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

nop

leave

ret

__gnu_cxx::__promote_2<float, int, __gnu_cxx::__promote<float, std::__is_integer<float>::__value>::__type, __gnu_cxx::__promote<int, std::__is_integer<int>::__value>::__type>::__type std::pow<float, int>(float, int):

push rbp

mov rbp, rsp

sub rsp, 16

movss DWORD PTR [rbp-4], xmm0

mov DWORD PTR [rbp-8], edi

cvtsi2sd xmm1, DWORD PTR [rbp-8]

cvtss2sd xmm0, DWORD PTR [rbp-4]

call pow

movq rax, xmm0

mov QWORD PTR [rbp-16], rax

movsd xmm0, QWORD PTR [rbp-16]

leave

ret

.LC5:

.string "Surface area : "

surface_area(float):

push rbp

mov rbp, rsp

sub rsp, 32

movss DWORD PTR [rbp-20], xmm0

mov eax, DWORD PTR [rbp-20]

mov edi, 2

mov DWORD PTR [rbp-24], eax

movss xmm0, DWORD PTR [rbp-24]

call __gnu_cxx::__promote_2<float, int, __gnu_cxx::__promote<float, std::__is_integer<float>::__value>::__type, __gnu_cxx::__promote<int, std::__is_integer<int>::__value>::__type>::__type std::pow<float, int>(float, int)

movapd xmm1, xmm0

movsd xmm0, QWORD PTR .LC4[rip]

mulsd xmm0, xmm1

cvtsd2ss xmm2, xmm0

movss DWORD PTR [rbp-4], xmm2

mov esi, OFFSET FLAT:.LC5

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 DWORD PTR [rbp-24], eax

movss xmm0, DWORD PTR [rbp-24]

mov rdi, rdx

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

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

movss xmm0, DWORD PTR [rbp-4]

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

cmp DWORD PTR [rbp-8], 65535

jne .L12

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

.L12:

nop

leave

ret

_GLOBAL__sub_I_s:

push rbp

mov rbp, rsp

mov esi, 65535

mov edi, 1

call __static_initialization_and_destruction_0(int, int)

pop rbp

ret

.LC4:

.long 1610612736

.long 1076436664

Output :-

Lemme calculate the surface area of a sphere!

Enter 's' to stop or anything else to calculate the surface area of a sphere! a

Gimme r : 2.15

Surface area : 58.0586

Enter 's' to stop or anything else to calculate the surface area of a sphere! 6

Gimme r : 3.9

Surface area : 191.038

Enter 's' to stop or anything else to calculate the surface area of a sphere! s

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