A51 MACRO ASSEMBLER FASTBCD 15/12/97 10:07:51 PAGE 1 DOS MACRO ASSEMBLER A51 V4.79 OBJECT MODULE PLACED IN FASTBCD.OBJ ASSEMBLER INVOKED BY: C:\C51.340\BIN\A51.EXE FASTBCD.ASM LOC OBJ LINE SOURCE ---- 1 dseg at 20h 0020 2 hibyte: ds 1 0021 3 lobyte: ds 1 4 ---- 5 cseg 6 ;fast 16 bit binary to 24 bit packed bcd conversion 7 ;call with 16 bit binary value in hibyte, lobyte 8 ;(these must be in bit addressable internal memory) 9 ;return with bcd result in r1,r2,r3 (high, mid, low) 10 ;execution time=92 instruction cycles 11 ;code size=91 instructions, 126 bytes 0000 12 fastbcd: 0000 E4 13 clr a 0001 FA 14 mov r2,a 0002 FB 15 mov r3,a 0003 E520 16 mov a,hibyte ;binary shift bits 15,14,13 0005 23 17 rl a 0006 23 18 rl a 0007 23 19 rl a 0008 5407 20 anl a,#7 ;bits 15,14,13 are done 000A A204 21 mov c,hibyte.4 ;bits 12,11,10 use 1 byte bcd shift 000C 35E0 22 addc a,acc 000E D4 23 da a 000F A203 24 mov c,hibyte.3 0011 35E0 25 addc a,acc 0013 D4 26 da a 0014 A202 27 mov c,hibyte.2 0016 35E0 28 addc a,acc 0018 D4 29 da a ;bits 12,11,10 are done 0019 A201 30 mov c,hibyte.1 ;bits 9,8,7 use bcd shift of low byte 001B 35E0 31 addc a,acc ;but binary shift of mid byte 001D D4 32 da a 001E CB 33 xch a,r3 ;a=mid, r3=low 001F 33 34 rlc a 0020 CB 35 xch a,r3 ;a=low, r3=mid 0021 A200 36 mov c,hibyte.0 0023 35E0 37 addc a,acc 0025 D4 38 da a 0026 CB 39 xch a,r3 ;a=mid, r3=low 0027 33 40 rlc a 0028 CB 41 xch a,r3 ;a=low, r3=mid 0029 A20F 42 mov c,lobyte.7 002B 35E0 43 addc a,acc 002D D4 44 da a 002E CB 45 xch a,r3 ;a=mid, r3=low 002F 33 46 rlc a 0030 CB 47 xch a,r3 ;a=low, r3=mid, bits 9,8,7 are done 0031 A20E 48 mov c,lobyte.6 ;bits 6,5,4,3 use 2 byte bcd shift 0033 35E0 49 addc a,acc 0035 D4 50 da a 0036 CB 51 xch a,r3 ;a=mid, r3=low 0037 35E0 52 addc a,acc 0039 D4 53 da a 003A CB 54 xch a,r3 ;a=low, r3=mid 003B A20D 55 mov c,lobyte.5 003D 35E0 56 addc a,acc 003F D4 57 da a 0040 CB 58 xch a,r3 ;a=mid, r3=low A51 MACRO ASSEMBLER FASTBCD 15/12/97 10:07:51 PAGE 2 0041 35E0 59 addc a,acc 0043 D4 60 da a 0044 CB 61 xch a,r3 ;a=low, r3=mid 0045 A20C 62 mov c,lobyte.4 0047 35E0 63 addc a,acc 0049 D4 64 da a 004A CB 65 xch a,r3 ;a=mid, r3=low 004B 35E0 66 addc a,acc 004D D4 67 da a 004E CB 68 xch a,r3 ;a=low, r3=mid 004F A20B 69 mov c,lobyte.3 0051 35E0 70 addc a,acc 0053 D4 71 da a 0054 CB 72 xch a,r3 ;a=mid, r3=low 0055 35E0 73 addc a,acc 0057 D4 74 da a 0058 CB 75 xch a,r3 ;a=low, r3=mid, bits 6,5,4,3 done 0059 A20A 76 mov c,lobyte.2 ;bits 2,1,0 use bcd shift of low,mid bytes 005B 35E0 77 addc a,acc ;but binary shift of high byte 005D D4 78 da a 005E CB 79 xch a,r3 ;a=mid, r3=low 005F 35E0 80 addc a,acc 0061 D4 81 da a 0062 CA 82 xch a,r2 ;a=high, r2=mid, r3=low 0063 33 83 rlc a 0064 CB 84 xch a,r3 ;a=low, r2=mid, r3=high 0065 A209 85 mov c,lobyte.1 0067 35E0 86 addc a,acc 0069 D4 87 da a 006A CA 88 xch a,r2 ;a=mid, r2=low, r3=high 006B 35E0 89 addc a,acc 006D D4 90 da a 006E CB 91 xch a,r3 ;a=high, r2=low, r3=mid 006F 33 92 rlc a 0070 CA 93 xch a,r2 ;a=low, r2=high, r3=mid 0071 A208 94 mov c,lobyte.0 0073 35E0 95 addc a,acc 0075 D4 96 da a 0076 CB 97 xch a,r3 ;a=mid, r2=high, r3=low 0077 35E0 98 addc a,acc 0079 D4 99 da a 007A CA 100 xch a,r2 ;a=high, r2=mid, r3=low 007B 33 101 rlc a 007C F9 102 mov r1,a ;r1=high, r2=mid, r3=low 007D 22 103 ret 104 end A51 MACRO ASSEMBLER FASTBCD 15/12/97 10:07:51 PAGE 3 SYMBOL TABLE LISTING ------ ----- ------- N A M E T Y P E V A L U E ATTRIBUTES ACC. . . . . . . . D ADDR 00E0H A FASTBCD. . . . . . C ADDR 0000H A HIBYTE . . . . . . D ADDR 0020H A LOBYTE . . . . . . D ADDR 0021H A REGISTER BANK(S) USED: 0 ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)