In: Computer Science
Write an MSP430 assembly language program that implements the following algorithm: a subroutine, called 'numadd' that sums up all the numeric characters present in a phrase ("string" that follows the "C" language convention). By For example, if the phrase is "Today is the 28th of month 9", the subroutine must perform the following sum: 2 + 8 + 9 = 19. The subroutine must receive the address of the first character of the corresponding phrase in the "stack", and return the result of the sum in register R12.
I have another file with named vars.c with the variable:
char frase[] = "Today is the 28th of month 9";
please please thumbs up!!!
hope it will help uh out!!
Code::
(MS40 ASSEMBLY LANGUAGE PROGRAM)
--------------------------------------------------------------
NOTE :: HERE BELOW IS THE PROGRAM AS YOU WANT FOR THE ABOVE QUESTION AND THE PROGRAM RETURN RESULT OF THE SUM IN REGISTER R12::-
__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 "Today is the 28th of month 9"
.LC1:
.string "Result : "
main:
PUSHM.W #1, R10
PUSHM.W #1, R4
MOV.W R1, R4
SUB.W #26, R1
MOV.W R4, R12
ADD.W #-5, R12
CALL #_ZNSaIcEC1Ev
MOV.W R4, R13
ADD.W #-5, R13
MOV.W R4, R12
ADD.W #-26, R12
MOV.W R13, R14
MOV.W #.LC0, R13
CALL
#_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1EPKcRKS3_
MOV.W R4, R12
ADD.W #-5, R12
CALL #_ZNSaIcED1Ev
MOV.W #0, -2(R4)
MOV.W #0, -4(R4)
.L9:
MOV.W R4, R12
ADD.W #-26, R12
CALL
#_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6lengthEv
MOV.W R12, R13
MOV.W -4(R4), R14
MOV.B #1, R12
CMP.W R13, R14 { JLO .L4
MOV.B #0, R12
.L4:
AND #0xff, R12
CMP.W #0, R12 { JEQ .L5
MOV.W -4(R4), R13
MOV.W R4, R12
ADD.W #-26, R12
CALL
#_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEixEj
MOV.B @R12, R12
MOV.B #47, R13
CMP.B R12, R13 { JHS .L6
MOV.W -4(R4), R13
MOV.W R4, R12
ADD.W #-26, R12
CALL
#_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEixEj
MOV.B @R12, R12
MOV.B #57, R13
CMP.B R12, R13 { JLO .L6
MOV.B #1, R12
BR #.L7
.L6:
MOV.B #0, R12
.L7:
CMP.W #0, R12 { JEQ .L8
MOV.W -4(R4), R13
MOV.W R4, R12
ADD.W #-26, R12
CALL
#_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEixEj
MOV.B @R12, R12
ADD.W #-48, R12
ADD.W R12, -2(R4)
.L8:
ADD.W #1, -4(R4)
BR #.L9
.L5:
MOV.W #.LC1, R13
MOV.W #_ZSt4cout, R12
CALL #_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc
MOV.W -2(R4), R13
CALL #_ZNSolsEi
MOV.B #0, R10
MOV.W R4, R12
ADD.W #-26, R12
CALL
#_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED1Ev
MOV.W R10, R12
BR #.L15
MOV.W R12, R10
MOV.W R4, R12
ADD.W #-5, R12
CALL #_ZNSaIcED1Ev
MOV.W R10, R12
CALL #_Unwind_Resume
MOV.W R12, R10
MOV.W R4, R12
ADD.W #-26, R12
CALL
#_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED1Ev
MOV.W R10, R12
CALL #_Unwind_Resume
.L15:
ADD.W #26, R1
POPM.W #1, r4
POPM.W #1, r10
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 .L18
CMP.W #-1, -4(R4) { JNE .L18
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
.L18:
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