MCS-51 MACRO ASSEMBLER TERESA PAGE 1 ISIS-II MCS-51 MACRO ASSEMBLER V2.0 OBJECT MODULE PLACED IN :F0:TERESA.OBJ ASSEMBLER INVOKED BY: ASM51 TERESA.PDS DEBUG LOC OBJ LINE SOURCE 1 ; PDS DEMONSTRATION PROGRAM 2 ; 3 ;THIS PROGRAM ADDS TWO NUMBERS IN PACKED BCD FORMAT, AND CONVERTS THE 4 ;SUM TO AN ASCII STRING. THE TWO NUMBERS ARE STORED IN CONSECUTIVE 5 ;MEMORY BYTES AS: 6 ; 7 ;R0 -> FIRST BYTE = LEAST AND NEXT LEAST SIGNIFICANT DIGITS OF AUGEND 8 ; SECOND BYTE = NEXT TWO MOST SIGNIFICANT DIGITS OF AUGEND 9 ; THIRD BYTE = MOST AND NEXT MOST SIGNIFICANT DIGITS OF AUGEND 10 ; FOURTH BYTE = \ 11 ; FIFTH BYTE = > SAME FOR ADDEND 12 ; SIXTH BYTE = / 13 ; 14 ;THE RESULT IS RETURNED IN A STRING POINTER TO BY R1. 15 ; 16 ;************************************************************************* 0040 17 ORG 0040H 0000 18 ROX EQU 00H ;PSEUDONYM FOR R0 0040 7972 19 DEMO: MOV R1,#BUFFER ;GET POINTER TO RESULTS AREA 0042 7A03 20 MOV R2,#03 ;SET BCD DIGITS COUNTER 0044 C2D7 21 CLR CY ;GET READY FOR ADDITION ACCTION 0046 C000 22 PUSH ROX ;SAVE PARAMETER POINTER 0048 750032 23 MOV ROX,#50 ;SET DATA LOCATION 004B E6 24 LOOP: MOV A,@R0 ;GET TWO BCK DIGITS FROM AUGEND 004C 08 25 INC R0 ;POINT TO CORRESPONDING DIGITS IN ADDEND 004D 08 26 INC R0 ; ("INC" DOESN'T AFFECT CARRY FLAG) 004E 08 27 INC R0 004F 36 28 ADDC A,@R0 ;ADD THE TWO TOGETHER 0050 D4 29 DA A ;ADJUST FOR DECIMAL ARITHMETIC 0051 C0E0 30 PUSH ACC ;SAVE RESULT 0053 540F 31 ANL A,#0FH ;GET LOWER DIGIIT 0055 4430 32 ORL A,#30H ;CONVERT LOWER DIGIT TO ASCII 0057 F7 33 MOV @R1,A ;PUT INTO RESULT BUFFER 0058 09 34 INC R1 ;POINT TO NEXT RESULT BUFFER LOCATION 0059 D0E0 35 POP ACC ;GET BACK RESULT O ADDITION 005B C4 36 SWAP A ;GET UPPER DIGIT 005C 540F 37 ANL A,#0FH 005E 4430 38 ORL A,#30H ;CONVERT TO ASCII 0060 F7 39 MOV @R1,A ;PUT INTO RESULT BUFFER 0061 09 40 INC R1 ;POINT TO NEXT RESULT BUFFER LOCATION 0062 18 41 DEC R0 ;POINT TO NEXT TWO BCD DIGITS IN AUGEND 0063 18 42 DEC R0 ; ("DEC" DOESEN'T AFFECT CARRY FLAG) 0064 DAE5 43 DJNZ R2,LOOP ;LAST PAIR OF BCD DIGITS ADDED? 44 ; NO--ADD TWO MORE 45 ; YES--CHECK LAST DIGIT OF SUM 46 ;APPEND SECOND DEMO FILE HERE 0066 5004 47 JNC CLRMSD ;CARRY OUT OF 6 DIGIT ADDITION? 0068 7731 48 MOV @R1,#31H ; YES--PUT AN ASCII "1" IN RESULT BUFFER 006A 8002 49 SJMP DONE 006C 7730 50 CLRMSD: MOV @R1,#30H ; NO--PUT AN ASCII "0" IN RESULT BUFFER MCS-51 MACRO ASSEMBLER TERESA PAGE 2 LOC OBJ LINE SOURCE 006E D000 51 DONE: POP ROX ;RESTORE PARAMETER POINTER 0070 80FC 52 SJMP DONE 0072 53 BUFFER: DS 10H ;BUFFER TO HOLD ASCII RESULT STRING 54 END MCS-51 MACRO ASSEMBLER TERESA PAGE 3 SYMBOL TABLE LISTING ------ ----- ------- N A M E T Y P E V A L U E A T T R I B U T E S ACC. . . . D ADDR 00E0H A BUFFER . . C ADDR 0072H A CLRMSD . . C ADDR 006CH A CY . . . . B ADDR 00D0H.7 A DEMO . . . C ADDR 0040H A DONE . . . C ADDR 006EH A LOOP . . . C ADDR 004BH A ROX. . . . NUMB 0000H A REGISTER BANK(S) USED: 0, TARGET MACHINE(S): 8051 ASSEMBLY COMPLETE, NO ERRORS FOUND