Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

This is to program a HCS12 microcontroller and a MC9S12DG128 chip using codewarr

ID: 639250 • Letter: T

Question

This is to program a HCS12 microcontroller and a MC9S12DG128 chip using codewarrior

Write a program to find the sum of the elements of an array called list1. The size of list1 is four bytes. The values of list1 are $FF, $1, $FE, and $02. To check your work, the sum should become $0200.

The requirements for writing this program are as follows.

-You must use a loop and count variable (i.e. count must be defined in the data section) as a loop counter.

- Clear both Registers A and B using CLRA and CLRB instructions.

-Use indexed addressing mode to access the elements of the array using Register X as the index register. The instruction LDX #list1 places the array list1 address into Register X.

-Add each element to Register B.

-Use the branch instruction BCC to check if there is a carry after the addition of each element. BCC means the Branch if Carry flag is clear.

-If there is a carry, add 1 to Register A.

-The final result should be in Register A and B.

Copy and paste the register window at the second iteration where the carry becomes set. Highlight the carry flag to show that it is set.

Copy and paste the register window to show the final result.

Explanation / Answer

.MODEL SMALL .STACK 100H .DATA PROMPT DB 'The Array elements are : $' RESULT DB 0DH,0AH,'The Sum of the Array is = $' ARRAY DB 10,20,30,40,50,60,70,80,90,100 .CODE MAIN PROC MOV AX, @DATA ; initialize DS MOV DS, AX MOV BX, 10 ; set BX=10 LEA DX, PROMPT ; load and display the string PROMPT MOV AH, 9 INT 21H MOV CX, BX ; set CX=BX LEA SI, ARRAY ; set SI=offset address of ARRAY @LOOP: ; loop label XOR AH, AH ; clear AH MOV AL, [SI] ; set AX=[SI] CALL OUTDEC ; call the procedure OUTDEC INC SI ; set SI=SI+1 MOV AH, 2 ; set output function MOV DL, 20H ; set DL=20H INT 21H ; print a character LOOP @LOOP ; jump to label @LOOP while CX!=0 LEA DX, RESULT ; load and display the string RESULT MOV AH, 9 INT 21H LEA SI, ARRAY ; set SI=offset address of ARRAY CALL SUM ; call the procedure SUM CALL OUTDEC ; call the procedure OUTDEC MOV AH, 4CH ; return control to DOS INT 21H MAIN ENDP ;**************************************************************************; ;**************************************************************************; ;------------------------- Procedure Definitions ------------------------; ;**************************************************************************; ;**************************************************************************; ;**************************************************************************; ;--------------------------------- SUM ----------------------------------; ;**************************************************************************; SUM PROC ; this procedure will calculate the sum of an array ; input : SI=offset address of the array ; : BX=size of the array ; output : AX=sum of the array PUSH CX ; push CX onto the STACK PUSH DX ; push DX onto the STACK XOR AX, AX ; clear AX XOR DX, DX ; clear DX MOV CX, BX ; set CX=BX @SUM: ; loop label MOV DL, [SI] ; set DL=[SI] ADD AX, DX ; set AX=AX+DX INC SI ; set SI=SI+1 LOOP @SUM ; jump to label @SUM while CX!=0 POP DX ; pop a value from STACK into DX POP CX ; pop a value from STACK into CX RET ; return control to the calling procedure SUM ENDP ;**************************************************************************; ;-------------------------------- OUTDEC --------------------------------; ;**************************************************************************; OUTDEC PROC ; this procedure will display a decimal number ; input : AX ; output : none PUSH BX ; push BX onto the STACK PUSH CX ; push CX onto the STACK PUSH DX ; push DX onto the STACK CMP AX, 0 ; compare AX with 0 JGE @START ; jump to label @START if AX>=0 PUSH AX ; push AX onto the STACK MOV AH, 2 ; set output function MOV DL, "-" ; set DL='-' INT 21H ; print the character POP AX ; pop a value from STACK into AX NEG AX ; take 2's complement of AX @START: ; jump label XOR CX, CX ; clear CX MOV BX, 10 ; set BX=10 @OUTPUT: ; loop label XOR DX, DX ; clear DX DIV BX ; divide AX by BX PUSH DX ; push DX onto the STACK INC CX ; increment CX OR AX, AX ; take OR of Ax with AX JNE @OUTPUT ; jump to label @OUTPUT if ZF=0 MOV AH, 2 ; set output function @DISPLAY: ; loop label POP DX ; pop a value from STACK to DX OR DL, 30H ; convert decimal to ascii code INT 21H ; print a character LOOP @DISPLAY ; jump to label @DISPLAY if CX!=0 POP DX ; pop a value from STACK into DX POP CX ; pop a value from STACK into CX POP BX ; pop a value from STACK into BX RET ; return control to the calling procedure OUTDEC ENDP ;**************************************************************************; ;--------------------------------------------------------------------------; ;**************************************************************************; END MAIN ;**************************************************************************; ;**************************************************************************; ;------------------------------ THE END ---------------------------------; ;**************************************************************************; ;**************************************************************************;

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote