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

Write a program to find the sum of the elements of an array called list1. The si

ID: 3536831 • Letter: W

Question

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. A. Copy and paste the source code.

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.

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