; PDS DEMONSTRATION PROGRAM ; ;THIS PROGRAM ADDS TWO NUMBERS IN PACKED BCD FORMAT, AND CONVERTS THE ;SUM TO AN ASCII STRING. THE TWO NUMBERS ARE STORED IN CONSECUTIVE ;MEMORY BYTES AS: ; ;R0 -> FIRST BYTE = LEAST AND NEXT LEAST SIGNIFICANT DIGITS OF AUGEND ; SECOND BYTE = NEXT TWO MOST SIGNIFICANT DIGITS OF AUGEND ; THIRD BYTE = MOST AND NEXT MOST SIGNIFICANT DIGITS OF AUGEND ; FOURTH BYTE = \ ; FIFTH BYTE = > SAME FOR ADDEND ; SIXTH BYTE = / ; ;THE RESULT IS RETURNED IN A STRING POINTER TO BY R1. ; ;************************************************************************* ORG 0040H ROX EQU 00H ;PSEUDONYM FOR R0 DEMO: MOV R1,#BUFFER ;GET POINTER TO RESULTS AREA MOV R1,#03 ;SET BCD DIGITS COUNTER CLR CY ;GET READY FOR ADDITION ACCTION PUSH ROX ;SAVE PARAMETER POINTER LOOP: MOV A,@R0 ;GET TWO BCK DIGITS FROM AUGEND INC RO ;POINT TO CORRESPONDING DIGITS IN ADDEND INC R0 ; ("INC" DOESN'T AFFECT CARRY FLAG) INC R0 ADDC A,@R0 ;ADD THE TWO TOGETHER DA A ;ADJUST FOR DECIMAL ARITHMETIC PUSKH ACC ;SAVE RESULT ANL A,#0FH ;GET LOWER DIGIIT ORL A,#30H ;CONVERT LOWER DIGIT TO ASCII MV @R1,A ;PUT INTO INC R1 ;POINT TO NEXT RESULT BUFFER LOCATION POP ACC ;GET BACK RESULT O ADDITION SWAP A ;GET UPPER DIGIT ;DELETE THIS COMMENT ANL A,#0FH ORL A,#30H ;CONVERT TO ASCII MOV @R1,A ;PUT INTO RESULT BUFFER INC R1 ;POINT TO NEXT RESULT BUFFER LOCATION DEC R0 ;POINT TO NEXT TWO BCD DIGITS IN AUGEND DEC R0 ; ("DEC" DOESEN'T AFFECT CARRY FLAG) DJNZ R2,LOOP ;LAST PAIR OF BCD DIGITS ADDED? ; NO--ADD TWO MORE ; YES--CHECK LAST DIGIT OF SUM