In: Computer Science
Write an MSP430 assembly language program that implements the following algorithm: a macro called "vdot" that calculates the "dot product" of two vectors "a" and "b", implemented as “arrays” (following the “C” language convention), of 3 elements. the macro should receive 2 pointers to the first element of each vector and return the result in R13.
I have another file where I save my vectors called, "vars.c" here I save:
int a[] = { 14, 65, 9}
int b[] = {72,51, 22}
Hi
PROGRAM
__gthread_key_delete(int):
PUSHM.W #1, R4
MOV.W R1, R4
SUB.W #2, R1
MOV.W R12, -2(R4)
MOV.B #0, R12
ADD.W #2, R1
POPM.W #1, r4
RET
.LC0:
.string "Vector A : "
.LC1:
.string " "
.LC2:
.string "\nVector B : "
.LC3:
.string "\nDot Product : "
main:
PUSHM.W #1, R4
MOV.W R1, R4
SUB.W #16, R1
MOV.W #3, -10(R4)
MOV.W #-5, -8(R4)
MOV.W #4, -6(R4)
MOV.W #2, -16(R4)
MOV.W #6, -14(R4)
MOV.W #5, -12(R4)
MOV.W #0, -2(R4)
MOV.W #0, -4(R4)
.L5:
MOV.B #2, R12
CMP.W -4(R4), R12 { JL .L4
MOV.W -4(R4), R12
ADD.W R12, R12
ADD.W R4, R12
ADD.W #-10, R12
MOV.W @R12, R14
MOV.W -4(R4), R12
ADD.W R12, R12
ADD.W R4, R12
ADD.W #-16, R12
MOV.W @R12, R12
MOV.W R12, R13
MOV.W R14, R12
CALL #__mspabi_mpyi
ADD.W R12, -2(R4)
ADD.W #1, -4(R4)
BR #.L5
.L4:
MOV.W #.LC0, R13
MOV.W #_ZSt4cout, R12
CALL #_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc
MOV.W -10(R4), R13
CALL #_ZNSolsEi
MOV.W #.LC1, R13
CALL #_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc
MOV.W -8(R4), R13
CALL #_ZNSolsEi
MOV.W #.LC1, R13
CALL #_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc
MOV.W -6(R4), R13
CALL #_ZNSolsEi
MOV.W #.LC2, R13
MOV.W #_ZSt4cout, R12
CALL #_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc
MOV.W -16(R4), R13
CALL #_ZNSolsEi
MOV.W #.LC1, R13
CALL #_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc
MOV.W -14(R4), R13
CALL #_ZNSolsEi
MOV.W #.LC1, R13
CALL #_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc
MOV.W -12(R4), R13
CALL #_ZNSolsEi
MOV.W #.LC3, R13
MOV.W #_ZSt4cout, R12
CALL #_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc
MOV.W -2(R4), R13
CALL #_ZNSolsEi
MOV.W #_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_, R13
CALL #_ZNSolsEPFRSoS_E
MOV.B #0, R12
ADD.W #16, R1
POPM.W #1, r4
RET
__static_initialization_and_destruction_0(int, int):
PUSHM.W #1, R4
MOV.W R1, R4
SUB.W #4, R1
MOV.W R12, -2(R4)
MOV.W R13, -4(R4)
CMP.W #1, -2(R4) { JNE .L9
CMP.W #-1, -4(R4) { JNE .L9
MOV.W #_ZStL8__ioinit, R12
CALL #_ZNSt8ios_base4InitC1Ev
MOV.W #__dso_handle, R14
MOV.W #_ZStL8__ioinit, R13
MOV.W #_ZNSt8ios_base4InitD1Ev, R12
CALL #__cxa_atexit
.L9:
NOP
ADD.W #4, R1
POPM.W #1, r4
RET
_GLOBAL__sub_I_main:
PUSHM.W #1, R4
MOV.W R1, R4
MOV.W #-1, R13
MOV.B #1, R12
CALL #__static_initialization_and_destruction_0(int, int)
POPM.W #1, r4
RET
I hope this will solve your problem.
Please do upvote for my efforts.