Write a program in assembly language that loads register R2 with the word in mem
ID: 3576425 • Letter: W
Question
Write a program in assembly language that loads register R2 with the word in memory location which is 10 bytes above the address in R0; and loads register R3 with the word in memory location which is 10 bytes below the address in R1. Your program must compare the two numbers in R2 and R3. If number in R2 is less than or equal to the number in R3 it must add the two numbers and save the result in the memory location pointed to by R4. Otherwise, your program must subtract the number in R3 from R2 and save the result in the memory location pointed to by R5.
Explanation / Answer
Answer:
Assembly Language Code :
.LC0:
.string "Enter three numbers: "
.LC1:
.string "Largest number: "
main:
push rbp
mov rbp, rsp
push rbx
sub rsp, 40
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-20]
mov rsi, rax
mov edi, OFFSET FLAT:std::cin
call std::basic_istream<char, std::char_traits<char> >::operator>>(float&)
mov rdx, rax
lea rax, [rbp-24]
mov rsi, rax
mov rdi, rdx
call std::basic_istream<char, std::char_traits<char> >::operator>>(float&)
mov rdx, rax
lea rax, [rbp-28]
mov rsi, rax
mov rdi, rdx
call std::basic_istream<char, std::char_traits<char> >::operator>>(float&)
movss xmm0, DWORD PTR [rbp-20]
movss xmm1, DWORD PTR [rbp-24]
ucomiss xmm0, xmm1
jb .L14
movss xmm0, DWORD PTR [rbp-20]
movss xmm1, DWORD PTR [rbp-28]
ucomiss xmm0, xmm1
jb .L15
mov ebx, DWORD PTR [rbp-20]
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 DWORD PTR [rbp-36], ebx
movss xmm0, DWORD PTR [rbp-36]
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >::operator<<(float)
jmp .L7
.L15:
mov ebx, DWORD PTR [rbp-28]
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 DWORD PTR [rbp-36], ebx
movss xmm0, DWORD PTR [rbp-36]
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >::operator<<(float)
jmp .L7
.L14:
movss xmm0, DWORD PTR [rbp-24]
movss xmm1, DWORD PTR [rbp-28]
ucomiss xmm0, xmm1
jb .L16
mov ebx, DWORD PTR [rbp-24]
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 DWORD PTR [rbp-36], ebx
movss xmm0, DWORD PTR [rbp-36]
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >::operator<<(float)
jmp .L7
.L16:
mov ebx, DWORD PTR [rbp-28]
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 DWORD PTR [rbp-36], ebx
movss xmm0, DWORD PTR [rbp-36]
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >::operator<<(float)
.L7:
mov eax, 0
add rsp, 40
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 .L19
cmp DWORD PTR [rbp-8], 65535
jne .L19
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
.L19:
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
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.