Assembly Language x86 program implementation, a) 32-bit and b) 64-bit. Please do
ID: 3840964 • Letter: A
Question
Assembly Language x86 program implementation, a) 32-bit and b) 64-bit.
Please do not use global start function.
Create this Program:
App1: Geometric Shape Calculator Companion.
Support the interactive calculation of geometrical attributes, such as perimeter,
circumference, area, volume, tests and verifications of defining (idiosyncratic)
characteristic or signature, for various 2-dim and 3-dim shapes, such as:
Triangle: distinguish equilateral, right, isoceles triangles.
Quadrilateral: distinguish rectangle, square, parallelogram, rhombus
Circle
Ellipse
Sphere
Cylinder
Pyramid: distinguish with circular base, with rectangular base
Notes:
a. Only integer, Boolean and relational operations are available
a. Use an integer Symbolic value PI = 3, where needed.
b. Any answer requiring a square root should be expressed in terms of squares.
c. Any final result of a division should be expressed in terms of quotient and remainder.
1. Modular organization using procedures, subroutines and functions (PROC, ENDP,
CALL, RET).
2. Use of the system Stack to save and restore register values, pass arguments,
receive results (PUSH, POP).
3. Use of conditional control structures (Jcond, LoopCond, Boolean operations)
4. Use of Arithmetic operations.
Please put a lot of comments into the program
thank you.
Explanation / Answer
Answer:
MIPS Assembly Language Program :
.LC0:
.string " Enter the radius "
.LC2:
.string " Area of Circle : "
.LC3:
.string " square units"
.LC4:
.string " Enter the side length "
.LC5:
.string " Area of Square : "
.LC6:
.string " Enter the breadth "
.LC7:
.string " Enter the height "
.LC8:
.string " Area of Rectangle : "
calculateArea(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >):
push rbp
mov rbp, rsp
sub rsp, 32
mov QWORD PTR [rbp-24], rdi
mov rax, QWORD PTR [rbp-24]
mov esi, 0
mov rdi, rax
call std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::operator[](unsigned long)
movzx eax, BYTE PTR [rax]
movsx eax, al
cmp eax, 114
je .L3
cmp eax, 115
je .L4
cmp eax, 99
je .L5
jmp .L7
.L5:
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-4]
mov rsi, rax
mov edi, OFFSET FLAT:std::cin
call std::basic_istream<char, std::char_traits<char> >::operator>>(float&)
movss xmm1, DWORD PTR [rbp-4]
movss xmm0, DWORD PTR .LC1[rip]
mulss xmm0, xmm1
movss xmm1, DWORD PTR [rbp-4]
mulss xmm0, xmm1
movss DWORD PTR [rbp-28], xmm0
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*)
movss xmm0, DWORD PTR [rbp-28]
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >::operator<<(float)
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*)
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> >&))
jmp .L2
.L4:
mov esi, OFFSET FLAT:.LC4
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-8]
mov rsi, rax
mov edi, OFFSET FLAT:std::cin
call std::basic_istream<char, std::char_traits<char> >::operator>>(float&)
movss xmm1, DWORD PTR [rbp-8]
movss xmm0, DWORD PTR [rbp-8]
mulss xmm1, xmm0
movss DWORD PTR [rbp-28], xmm1
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*)
movss xmm0, DWORD PTR [rbp-28]
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >::operator<<(float)
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*)
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> >&))
jmp .L2
.L3:
mov esi, OFFSET FLAT:.LC6
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-12]
mov rsi, rax
mov edi, OFFSET FLAT:std::cin
call std::basic_istream<char, std::char_traits<char> >::operator>>(float&)
mov esi, OFFSET FLAT:.LC7
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-16]
mov rsi, rax
mov edi, OFFSET FLAT:std::cin
call std::basic_istream<char, std::char_traits<char> >::operator>>(float&)
movss xmm1, DWORD PTR [rbp-12]
movss xmm0, DWORD PTR [rbp-16]
mulss xmm1, xmm0
movss DWORD PTR [rbp-28], xmm1
mov esi, OFFSET FLAT:.LC8
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*)
movss xmm0, DWORD PTR [rbp-28]
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >::operator<<(float)
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*)
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> >&))
nop
.L2:
.L7:
nop
leave
ret
.LC9:
.string "Enter the shape : "
main:
push rbp
mov rbp, rsp
push rbx
sub rsp, 72
lea rax, [rbp-80]
mov rdi, rax
call std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string()
mov esi, OFFSET FLAT:.LC9
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-80]
mov rsi, rax
mov edi, OFFSET FLAT:std::cin
call std::basic_istream<char, std::char_traits<char> >& std::getline<char, std::char_traits<char>, std::allocator<char> >(std::basic_istream<char, std::char_traits<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&)
lea rdx, [rbp-80]
lea rax, [rbp-48]
mov rsi, rdx
mov rdi, rax
call std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
lea rax, [rbp-48]
mov rdi, rax
call calculateArea(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)
lea rax, [rbp-48]
mov rdi, rax
call std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()
lea rax, [rbp-80]
mov rdi, rax
call std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()
mov eax, 0
jmp .L14
mov rbx, rax
lea rax, [rbp-48]
mov rdi, rax
call std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()
jmp .L11
mov rbx, rax
.L11:
lea rax, [rbp-80]
mov rdi, rax
call std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()
mov rax, rbx
mov rdi, rax
call _Unwind_Resume
.L14:
add rsp, 72
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 .L17
cmp DWORD PTR [rbp-8], 65535
jne .L17
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
.L17:
nop
leave
ret
_GLOBAL__sub_I__Z13calculateAreaNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE:
push rbp
mov rbp, rsp
mov esi, 65535
mov edi, 1
call __static_initialization_and_destruction_0(int, int)
pop rbp
ret
.LC1:
.long 1078523331
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.