Translate the program below into PEP/8 assembly language Ø Start with Assembly c
ID: 3933699 • Letter: T
Question
Translate the program below into PEP/8 assembly language
Ø Start with Assembly code for Fig 6.36 (Use Pep8 help)
Ø Change to output array in same order as input
Ø Add function twoVect
Ø Pass array as parameter as shown in Fig 6.38
Ø Use trace tags on all variables.
a) Comment lines of the source code to trace the C++ code.
b) Run for a set of 4 inputs and paste a screen shot of the Output area of PEP/8.
c) Step thru & Cut and paste the memory trace when in the twoVect function.
#include <iostream>
using namespace std;
void twoVect(int v[], int n){
int k;
for(k = 0; k < n; k++){
v[k] = v[k] * 2;
}
}
int main () {
int vector[4];
int j;
for (j=0; j<4; j++){
cin >> vector[j];
}
twoVect(vector, 4);
for (j=0; j<4; j++){
cout << j << ' ' << vector[j] << endl;
}
return 0;
}
Explanation / Answer
twoVect(int*, int):
push {r7}
sub sp, sp, #20
add r7, sp, #0
str r0, [r7, #4]
str r1, [r7, #0]
mov r3, #0
str r3, [r7, #12]
b .L2
.L3:
ldr r3, [r7, #12]
lsl r3, r3, #2
ldr r2, [r7, #4]
adds r3, r2, r3
ldr r2, [r7, #12]
lsl r2, r2, #2
ldr r1, [r7, #4]
adds r2, r1, r2
ldr r2, [r2, #0]
lsl r2, r2, #1
str r2, [r3, #0]
ldr r3, [r7, #12]
add r3, r3, #1
str r3, [r7, #12]
.L2:
ldr r2, [r7, #12]
ldr r3, [r7, #0]
cmp r2, r3
ite ge
movge r3, #0
movlt r3, #1
uxtb r3, r3
cmp r3, #0
bne .L3
add r7, r7, #20
mov sp, r7
pop {r7}
bx lr
main:
push {r7, lr}
sub sp, sp, #24
add r7, sp, #0
mov r3, #0
str r3, [r7, #20]
b .L5
.L6:
add r2, r7, #4
ldr r3, [r7, #20]
lsl r3, r3, #2
adds r3, r2, r3
movw r0, #:lower16:std::cin
movt r0, #:upper16:std::cin
mov r1, r3
bl std::basic_istream<char, std::char_traits<char> >::operator>>(int&)
ldr r3, [r7, #20]
add r3, r3, #1
str r3, [r7, #20]
.L5:
ldr r3, [r7, #20]
cmp r3, #3
ite gt
movgt r3, #0
movle r3, #1
uxtb r3, r3
cmp r3, #0
bne .L6
add r3, r7, #4
mov r0, r3
mov r1, #4
bl twoVect(int*, int)
mov r3, #0
str r3, [r7, #20]
b .L7
.L8:
movw r0, #:lower16:std::cout
movt r0, #:upper16:std::cout
ldr r1, [r7, #20]
bl std::basic_ostream<char, std::char_traits<char> >::operator<<(int)
mov r3, r0
mov r0, r3
mov r1, #32
bl std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char)
mov r3, r0
mov r2, r3
ldr r3, [r7, #20]
lsl r3, r3, #2
add r1, r7, #24
adds r3, r1, r3
ldr r3, [r3, #-20]
mov r0, r2
mov r1, r3
bl std::basic_ostream<char, std::char_traits<char> >::operator<<(int)
mov r3, r0
mov r0, r3
movw r1, #:lower16:std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)
movt r1, #:upper16:std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)
bl 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> >&))
ldr r3, [r7, #20]
add r3, r3, #1
str r3, [r7, #20]
.L7:
ldr r3, [r7, #20]
cmp r3, #3
ite gt
movgt r3, #0
movle r3, #1
uxtb r3, r3
cmp r3, #0
bne .L8
mov r3, #0
mov r0, r3
add r7, r7, #24
mov sp, r7
pop {r7, pc}
__static_initialization_and_destruction_0(int, int):
push {r7, lr}
sub sp, sp, #8
add r7, sp, #0
str r0, [r7, #4]
str r1, [r7, #0]
ldr r3, [r7, #4]
cmp r3, #1
bne .L9
ldr r2, [r7, #0]
movw r3, #65535
cmp r2, r3
bne .L9
movw r0, #:lower16:std::__ioinit
movt r0, #:upper16:std::__ioinit
bl std::ios_base::Init::Init()
movw r3, #:lower16:std::ios_base::Init::~Init()
movt r3, #:upper16:std::ios_base::Init::~Init()
movw r0, #:lower16:std::__ioinit
movt r0, #:upper16:std::__ioinit
mov r1, r3
movw r2, #:lower16:__dso_handle
movt r2, #:upper16:__dso_handle
bl __aeabi_atexit
.L9:
add r7, r7, #8
mov sp, r7
pop {r7, pc}
global constructors keyed to twoVect(int*, int):
push {r7, lr}
add r7, sp, #0
mov r0, #1
movw r1, #65535
bl __static_initialization_and_destruction_0(int, int)
pop {r7, pc}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.