SORCIM 680x Assembler ver 3.1 0?/3>/01 =::77 Page 1 MULT16 B:BOOTH68 .ASM * * THIS ROUTINE MULTIPLIES TWO 16 BIT 2'S * COMPLIMENT NUMBERS UNING BOOTH'S ALGORITHM * * THE MULTIPLIER = Y = Y(MSB),Y(LSB) = Y,Y+1 * THE MULTIPLICAND =XX=XX(MSB),XX(LSB) = XX,XX+1 * THE PRODUCT = U = U(MSB),U+1,U+2,U+3 * THE TEST BYTE FOR Y(LSB-1) = FF * THE MULTIPLIER AND THE MULTIPLICAND MUST BE * STORED IN THE Y AND XX RESPECTIVELY, THEN A JSR TO * MULT16 WILL GENERATE THE 2'S COMPLIMENT PRODUCT * OF Y AND XX IN U. * * THE MULTIPLICAND WILL BE UNCHANGED. THE * MULTIPLIER WILL BE DESTROYED. * 0000 = 0000 ORG $00 0000 CE0005 MULT16 LDX #5 ;CLEAR THE WORKING REGISTER 0003 4F CLR A 0004 A704 LP1 STA A U-1,X 0006 09 DEX 0007 26FB ^0004 BNE LP1 0009 CE0010 LDX #16 ;INIT'L SHIFT COUNTER TO 16 000C B60481 LP2 LDA A Y+1 ;GET Y(LSBIT) 000F 8401 AND A #1 0011 16 TAB ;SAVE Y(LSBIT) IN ACCB 0012 B80488 EOR A FF ;DOES Y(LSBIT) = Y(LSB-1)? 0015 2725 ^003C BEQ SHIFT ;YES: GOT TO THE SHIFT ROUTINE 0017 5D TST B ;NO: DOES Y(LSBIT) = 0? 0018 2712 ^002C BEQ ADD ;YES: GO TO THE ADD ROUTINE 001A B60485 LDA A U+1 ;NO: SUBTRAACT MULTIPLICAND 001D F60484 LDA B U ;PRODUCT WITH THE MSBYTES 0020 B00483 SUB A XX+1 ;LINED UP 0023 F20482 SBC B XX 0026 B70485 STA A U+1 0029 F70484 STA B U 002C 200E ^003C BRA SHIFT ;THEN GO TO THE SHIFT ROUTINE 002E B60485 ADD LDA A U+1 ;ADD THE MULTIPLICAND TO THE 0031 F60484 LDA B U ;PRODUCT WITH THE MSBYTES 0034 BB0483 ADD A XX+1 ;LINED UP 0037 F90482 ADC B XX 003A B70485 STA A U+1 003D F70484 STA B U 0040 7F0488 SHIFT CLR FF ;CLEAR THE TEST BYTE 0043 760480 ROR Y ;SHIFT THE MULTIPLIER RIGHT 0046 760481 ROR Y+1 ;ONE BIT WITH THE LSBIT 0049 790488 ROL FF ;INTO THE LSBIT OF FF 004C 770484 ASR U ;SHIFT THE PRODUCT RIGHT ONE 004F 760485 ROR U+1 ;BIT, THE MSB REMAINING THE 0052 760486 ROR U+2 ;SAME 0055 760487 ROR U+3 0058 09 DEX ;DECREMENT THE SHIFT COUNT 0059 26B1 ^000C BNE LP2 ;IF NOT 0 CNTINUE 005B 39 RTS SORCIM 680x Assembler ver 3.1 0?/3>/01 =::77 Page 2 MULT16 B:BOOTH68 .ASM * 005C = 0480 ORG $480 0480 = 0002 Y RMB 2 0482 = 0002 XX RMB 2 0484 = 0004 U RMB 4 0488 = 0001 FF RMB 1 * 0489 END no ERRORs, 9 Labels, 942Bh bytes not used. Program LWA = 0489h.  ADD 002E 1/31 1#39 FF 0488 1/28 1/45 1/48 2# 6 LP1 0004 1#21 1/23 LP2 000C 1#25 1/54 n MULT16 0000 1#19 SHIFT 0040 1/29 1/38 1#45 U 0484 1/21 1/32 1/33 1/36 1/37 1/39 1/40 1/43 1/44 1/49 1/50 1/51 1/52 2# 5 XX 0482 1/34 1/35 1/41 1/42 2# 4 Y 0480 1/25 1/46 1/47 2# 3 2# 5 XX 0482 1/34 1/35 1/41 1/42 2# 4 Y