4. (25 points) Write a subroutine Design and write an MSP430 assembly language subroutine 12a_s(char *a, int myl) that converts a 16-bit integer, myi, into a character array with eiements corresponding to the hexadecimal representation of the integer. For example, an integer my 13,486-0x34AE is converted into an array with 4 elements as follows: alol-E', a[1] 'A', a[2]'4', a[3]s3. The main program that calls the subroutine is shown below. Ascli('A')-0x41, ascll('O')-0x30. RESET: stopWDT: mov Initialize stack pointer Stop watchdog timer mov.w STACK END,SP DTPWWDTHOLD, &HDTCTL ; Main code here Sub. #4. SP mov.w SP, R14 mov.w myl, R4 push.w R14 call #12a s add .w #2, SP : allocate soace for ascii c ; R14 points to the allocated area ; integer is passed through R4 ; push the starting address on the stack : call subroutine ; free space on the stack lend: .word x34AE ; Stack Pointer definition .sect .stack Interrupt Vectors .sect".reset" .short RESET MSP430 RESET Vector 4. (25 points) Write a subroutine Design and write an MSP430 assembly language subroutine 12a_s(char *a, int myl) that converts a 16-bit integer, myi, into a character array with eiements corresponding to the hexadecimal representation of the integer. For example, an integer my 13,486-0x34AE is converted into an array with 4 elements as follows: alol-E', a[1] 'A', a[2]'4', a[3]s3. The main program that calls the subroutine is shown below. Ascli('A')-0x41, ascll('O')-0x30. RESET: stopWDT: mov Initialize stack pointer Stop watchdog timer mov.w STACK END,SP DTPWWDTHOLD, &HDTCTL ; Main code here Sub. #4. SP mov.w SP, R14 mov.w myl, R4 push.w R14 call #12a s add .w #2, SP : allocate soace for ascii c ; R14 points to the allocated area ; integer is passed through R4 ; push the starting address on the stack : call subroutine ; free space on the stack lend: .word x34AE ; Stack Pointer definition .sect .stack Interrupt Vectors .sect".reset" .short RESET MSP430 RESET Vector