; ; SUM INTEGERS FROM MEMORY USING DO-WHILE LOOP ; ; REGISTER C IS THE SUM ; ORG 0x0000 ;PROGRAM START ADDRESS ; COUNT EQU 8 ; ; PROGRAM SEGMENT BEGINS ; LXI H,D_TBLB ;START OF DATA LIST->HL MVI B,COUNT ;COUNT OF ITEMS IN LIST>B MVI C,0 ;0->SUM ; AGAIN: MOV A,C ;SUM+DATA VALUE->SUM ADD M MOV E,A ;SUM->E (TEMPORARY STORAGE) MOV A,C ;IF ADDENDS HAVE DIFFERENT SIGNS THEN CONTINUE XRA M JM CONT0 MOV A,E ;IF ADDENDS HAVE SAME SIGN, DOES THE NEW SUM ;HAVE A DIFFERENT SIGN? XRA C JM ERROR ;IF SO, JUMP ERROR CONT0: MOV C,E ;SUM->C INX H ;NEXT DATA VALUE DCR B ;IF COUNT!=0 THEN JUMP AGAIN JNZ AGAIN ; DONE: MOV A,C ;RETRIEVE SUM OUT 0xFF ;DISPLAY IN DATA LEDS HLT ;HALT ; ERROR: SUB A ;0->A OUT 0xFF ;DISPLAY IN DATA LEDS HLT ;HALT ; ; PROGRAM SEGMENT ENDS ; ; DATA SEGMENT BEGINS ; D_TBLB: DB 3,12,32,14,13,38,0,-5 ; ; DATA SEGMENT ENDS ;