In Assembly language for MSP430:
Create a subrutine called ‘numadd’ that add every numeric character present in a phrase (“string” that follows the convention of the C language). For Example, If the phrase says: “Today is the day 15 of quarantine of the month 8”, the subroutine needs to do the following sum: 1+5+8 = 14. The subroutine needs to receive the direction of the first character of the phrase corresponding in the “stack” and return the result in the register R4.
Please give positive ratings for my effort. Thanks.
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 "today is the day 15 of quarantine of the month 8"
.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
IMAGE OF PROGRAM
IMAGE OF OUTPUT
Get Answers For Free
Most questions answered within 1 hours.