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

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

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