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

how do you Translate the following C++ program into an Assembly Language program

ID: 3675131 • Letter: H

Question

how do you Translate the following C++ program into an Assembly Language program. Comment each line except STOP & .END. Add something to the output that makes this program uniquely yours. Cut & paste the Assembler Listing into your document and paste a screen shot of the Output area of the PEP/8.

#include <iostream>
using namespace std;
int num = 13;
int main( ) {

cout<<num<<endl;

num = num - 8;

cout<<num<<endl;

num = num - 3;

cout<<num<<endl;

num = num - 2;

cout<<num<<endl;

return 0;

}

Explanation / Answer

main:
        subq    $8, %rsp
        movl    num(%rip), %esi
        movl    std::cout, %edi
        call    std::basic_ostream<char, std::char_traits<char> >::operator<<(int)
        movq    %rax, %rdi
        call    std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)
        movl    num(%rip), %eax
        movl    std::cout, %edi
        leal    -8(%rax), %esi
        movl    %esi, num(%rip)
        call    std::basic_ostream<char, std::char_traits<char> >::operator<<(int)
        movq    %rax, %rdi
        call    std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)
        movl    num(%rip), %eax
        movl    std::cout, %edi
        leal    -3(%rax), %esi
        movl    %esi, num(%rip)
        call    std::basic_ostream<char, std::char_traits<char> >::operator<<(int)
        movq    %rax, %rdi
        call    std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)
        movl    num(%rip), %eax
        movl    std::cout, %edi
        leal    -2(%rax), %esi
        movl    %esi, num(%rip)
        call    std::basic_ostream<char, std::char_traits<char> >::operator<<(int)
        movq    %rax, %rdi
        call    std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)
        xorl    %eax, %eax
        addq    $8, %rsp
        ret
        subq    $8, %rsp
        movl    std::__ioinit, %edi
        call    std::ios_base::Init::Init()
        movl    $__dso_handle, %edx
        movl    std::__ioinit, %esi
        movl    std::ios_base::Init::~Init(), %edi
        addq    $8, %rsp
        jmp     __cxa_atexit
num:
        .long   13