hello, in my project In EE 390 , they asked me to write an assmbly languge progr
ID: 3583185 • Letter: H
Question
hello,
in my project In EE 390 , they asked me to write an assmbly languge program for the microcontroller 8051 :
I have three matrices A,B,C
"
ORG 400H
MATRIXA: DB 4, 6, 8, 1, 3, 6, 9, 3, 2
ORG 410H
MATRIX B: DB 2, 4, 7, 4, 5, 7, 3, 1, 1
ORG 420H
MATRIX B: DB 1, 3, 4, 8, 7, 5, 3, 8, 9
ORG 430H
RESULT: DB 0, 0, 0, 0, 0, 0, 0, 0, 0
ORG 440H
SIGR: DB 0, 0, 0, 0, 0, 0, 0, 0, 0
"
they want me to do the following :
If my Input is (DIP Switch) :
1
00000000
A + B + C
2
00000001
A + B – C
3
00000010
A - B + C
4
00000011
A - B – C
5
00000100
Square root of matrix A:
6
00000101
Cube root of matrix A:
7
00000110
Median of matrix A
8
00000111
Number/numbers with highest count in matrix A
they also asked me to Define two more variables, RESULT and SIGR, in external RAM to store the resultant matrix and the sign (0 for +, 1 for -) of the resultant matrix. Initialize the two matrices with all zeros.
ORG 430H
RESULT: DB 0, 0, 0, 0, 0, 0, 0, 0, 0
ORG 440H
SIGR: DB 0, 0, 0, 0, 0, 0, 0, 0, 0
I'm not so good on assmbly , so colud you help me out
1
00000000
A + B + C
2
00000001
A + B – C
3
00000010
A - B + C
4
00000011
A - B – C
5
00000100
Square root of matrix A:
6
00000101
Cube root of matrix A:
7
00000110
Median of matrix A
8
00000111
Number/numbers with highest count in matrix A
Explanation / Answer
Answer:
Assembly Language Code :
.LC0:
.string "Enter rows and columns for first matrix: "
.LC1:
.string "Enter rows and columns for second matrix: "
.LC2:
.string "Error! column of first matrix not equal to row of second."
.LC3:
.string "Enter elements of matrix 1:"
.LC4:
.string "Enter element a"
.LC5:
.string " : "
.LC6:
.string "Enter elements of matrix 2:"
.LC7:
.string "Enter element b"
.LC8:
.string "Output Matrix: "
.LC9:
.string " "
main:
push rbp
mov rbp, rsp
push r12
push rbx
sub rsp, 1232
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-1236]
mov rsi, rax
mov edi, OFFSET FLAT:std::cin
call std::basic_istream<char, std::char_traits<char> >::operator>>(int&)
mov rdx, rax
lea rax, [rbp-1240]
mov rsi, rax
mov rdi, rdx
call std::basic_istream<char, std::char_traits<char> >::operator>>(int&)
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*)
lea rax, [rbp-1244]
mov rsi, rax
mov edi, OFFSET FLAT:std::cin
call std::basic_istream<char, std::char_traits<char> >::operator>>(int&)
mov rdx, rax
lea rax, [rbp-1248]
mov rsi, rax
mov rdi, rdx
call std::basic_istream<char, std::char_traits<char> >::operator>>(int&)
.L3:
mov edx, DWORD PTR [rbp-1240]
mov eax, DWORD PTR [rbp-1244]
cmp edx, eax
je .L2
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*)
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-1236]
mov rsi, rax
mov edi, OFFSET FLAT:std::cin
call std::basic_istream<char, std::char_traits<char> >::operator>>(int&)
mov rdx, rax
lea rax, [rbp-1240]
mov rsi, rax
mov rdi, rdx
call std::basic_istream<char, std::char_traits<char> >::operator>>(int&)
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*)
lea rax, [rbp-1244]
mov rsi, rax
mov edi, OFFSET FLAT:std::cin
call std::basic_istream<char, std::char_traits<char> >::operator>>(int&)
mov rdx, rax
lea rax, [rbp-1248]
mov rsi, rax
mov rdi, rdx
call std::basic_istream<char, std::char_traits<char> >::operator>>(int&)
jmp .L3
.L2:
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 edi, OFFSET FLAT:std::cout
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> >&))
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> >&))
mov DWORD PTR [rbp-20], 0
.L7:
mov eax, DWORD PTR [rbp-1236]
cmp DWORD PTR [rbp-20], eax
jge .L4
mov DWORD PTR [rbp-24], 0
.L6:
mov eax, DWORD PTR [rbp-1240]
cmp DWORD PTR [rbp-24], eax
jge .L5
mov eax, DWORD PTR [rbp-24]
lea ebx, [rax+1]
mov eax, DWORD PTR [rbp-20]
lea r12d, [rax+1]
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*)
mov esi, r12d
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >::operator<<(int)
mov esi, ebx
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >::operator<<(int)
mov esi, OFFSET FLAT:.LC5
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*)
lea rcx, [rbp-432]
mov eax, DWORD PTR [rbp-24]
movsx rsi, eax
mov eax, DWORD PTR [rbp-20]
movsx rdx, eax
mov rax, rdx
sal rax, 2
add rax, rdx
add rax, rax
add rax, rsi
sal rax, 2
add rax, rcx
mov rsi, rax
mov edi, OFFSET FLAT:std::cin
call std::basic_istream<char, std::char_traits<char> >::operator>>(int&)
add DWORD PTR [rbp-24], 1
jmp .L6
.L5:
add DWORD PTR [rbp-20], 1
jmp .L7
.L4:
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 edi, OFFSET FLAT:std::cout
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> >&))
mov esi, OFFSET FLAT:.LC6
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> >&))
mov DWORD PTR [rbp-20], 0
.L11:
mov eax, DWORD PTR [rbp-1244]
cmp DWORD PTR [rbp-20], eax
jge .L8
mov DWORD PTR [rbp-24], 0
.L10:
mov eax, DWORD PTR [rbp-1248]
cmp DWORD PTR [rbp-24], eax
jge .L9
mov eax, DWORD PTR [rbp-24]
lea ebx, [rax+1]
mov eax, DWORD PTR [rbp-20]
lea r12d, [rax+1]
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*)
mov esi, r12d
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >::operator<<(int)
mov esi, ebx
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >::operator<<(int)
mov esi, OFFSET FLAT:.LC5
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*)
lea rcx, [rbp-832]
mov eax, DWORD PTR [rbp-24]
movsx rsi, eax
mov eax, DWORD PTR [rbp-20]
movsx rdx, eax
mov rax, rdx
sal rax, 2
add rax, rdx
add rax, rax
add rax, rsi
sal rax, 2
add rax, rcx
mov rsi, rax
mov edi, OFFSET FLAT:std::cin
call std::basic_istream<char, std::char_traits<char> >::operator>>(int&)
add DWORD PTR [rbp-24], 1
jmp .L10
.L9:
add DWORD PTR [rbp-20], 1
jmp .L11
.L8:
mov DWORD PTR [rbp-20], 0
.L15:
mov eax, DWORD PTR [rbp-1236]
cmp DWORD PTR [rbp-20], eax
jge .L12
mov DWORD PTR [rbp-24], 0
.L14:
mov eax, DWORD PTR [rbp-1248]
cmp DWORD PTR [rbp-24], eax
jge .L13
mov eax, DWORD PTR [rbp-24]
movsx rcx, eax
mov eax, DWORD PTR [rbp-20]
movsx rdx, eax
mov rax, rdx
sal rax, 2
add rax, rdx
add rax, rax
add rax, rcx
mov DWORD PTR [rbp-1232+rax*4], 0
add DWORD PTR [rbp-24], 1
jmp .L14
.L13:
add DWORD PTR [rbp-20], 1
jmp .L15
.L12:
mov DWORD PTR [rbp-20], 0
.L21:
mov eax, DWORD PTR [rbp-1236]
cmp DWORD PTR [rbp-20], eax
jge .L16
mov DWORD PTR [rbp-24], 0
.L20:
mov eax, DWORD PTR [rbp-1248]
cmp DWORD PTR [rbp-24], eax
jge .L17
mov DWORD PTR [rbp-28], 0
.L19:
mov eax, DWORD PTR [rbp-1240]
cmp DWORD PTR [rbp-28], eax
jge .L18
mov eax, DWORD PTR [rbp-24]
movsx rcx, eax
mov eax, DWORD PTR [rbp-20]
movsx rdx, eax
mov rax, rdx
sal rax, 2
add rax, rdx
add rax, rax
add rax, rcx
mov ecx, DWORD PTR [rbp-1232+rax*4]
mov eax, DWORD PTR [rbp-28]
movsx rsi, eax
mov eax, DWORD PTR [rbp-20]
movsx rdx, eax
mov rax, rdx
sal rax, 2
add rax, rdx
add rax, rax
add rax, rsi
mov esi, DWORD PTR [rbp-432+rax*4]
mov eax, DWORD PTR [rbp-24]
movsx rdi, eax
mov eax, DWORD PTR [rbp-28]
movsx rdx, eax
mov rax, rdx
sal rax, 2
add rax, rdx
add rax, rax
add rax, rdi
mov eax, DWORD PTR [rbp-832+rax*4]
imul eax, esi
add ecx, eax
mov eax, DWORD PTR [rbp-24]
movsx rsi, eax
mov eax, DWORD PTR [rbp-20]
movsx rdx, eax
mov rax, rdx
sal rax, 2
add rax, rdx
add rax, rax
add rax, rsi
mov DWORD PTR [rbp-1232+rax*4], ecx
add DWORD PTR [rbp-28], 1
jmp .L19
.L18:
add DWORD PTR [rbp-24], 1
jmp .L20
.L17:
add DWORD PTR [rbp-20], 1
jmp .L21
.L16:
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 edi, OFFSET FLAT:std::cout
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> >&))
mov esi, OFFSET FLAT:.LC8
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> >&))
mov DWORD PTR [rbp-20], 0
.L26:
mov eax, DWORD PTR [rbp-1236]
cmp DWORD PTR [rbp-20], eax
jge .L22
mov DWORD PTR [rbp-24], 0
.L25:
mov eax, DWORD PTR [rbp-1248]
cmp DWORD PTR [rbp-24], eax
jge .L23
mov eax, DWORD PTR [rbp-24]
movsx rcx, eax
mov eax, DWORD PTR [rbp-20]
movsx rdx, eax
mov rax, rdx
sal rax, 2
add rax, rdx
add rax, rax
add rax, rcx
mov ebx, DWORD PTR [rbp-1232+rax*4]
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*)
mov esi, ebx
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >::operator<<(int)
mov eax, DWORD PTR [rbp-1248]
sub eax, 1
cmp eax, DWORD PTR [rbp-24]
jne .L24
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 edi, OFFSET FLAT:std::cout
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> >&))
.L24:
add DWORD PTR [rbp-24], 1
jmp .L25
.L23:
add DWORD PTR [rbp-20], 1
jmp .L26
.L22:
mov eax, 0
add rsp, 1232
pop rbx
pop r12
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 .L30
cmp DWORD PTR [rbp-8], 65535
jne .L30
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
.L30:
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
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.