650 likes | 788 Views
HCS12 Arithmetic. Lecture 3.3. 68HC12 Arithmetic. Addition and Subtraction Shift and Rotate Instructions Multiplication Division. Addition and Subtraction. HCS12 code for 1+, 2+. ; 1+ ( n -- n+1 ) ONEP LDD 0,X ADDD #1 STD 0,X RTS ; 2+ ( n -- n+2 ) TWOP LDD 0,X ADDD #2
E N D
HCS12 Arithmetic Lecture 3.3
68HC12 Arithmetic • Addition and Subtraction • Shift and Rotate Instructions • Multiplication • Division
HCS12 code for 1+, 2+ ; 1+ ( n -- n+1 ) ONEP LDD 0,X ADDD #1 STD 0,X RTS ; 2+ ( n -- n+2 ) TWOP LDD 0,X ADDD #2 STD 0,X RTS
HCS12 code for 1-, 2- ; 1- ( n -- n-1 ) ONEP LDD 0,X SUBD #1 STD 0,X RTS ; 2- ( n -- n-2 ) TWOP LDD 0,X SUBD #2 STD 0,X RTS
68HC12 Arithmetic • Addition and Subtraction • Shift and Rotate Instructions • Multiplication • Division
C Bit 7 6 5 4 3 2 1 0 1 1 0 1 0 0 1 0 1 Logic Shift LeftLSL, LSLA, LSLB 0 C Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 1 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 1 A B LSLD
Logic Shift RightLSR, LSRA, LSRB C Bit 7 6 5 4 3 2 1 0 0 1 0 1 0 0 1 0 1 1 C Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 0 1 0 1 0 0 1 0 1 1 0 1 0 0 1 0 1 1 A B LSRD
Arithmetic Shift RightASR, ASRA, ASRB C 1 0 1 0 0 1 0 1 1
Rotate LeftROL, ROLA, ROLB C Bit 7 6 5 4 3 2 1 0 1 1 0 1 0 0 1 0 1
Rotate RightROR, RORA, RORB C Bit 7 6 5 4 3 2 1 0 1 0 1 0 0 1 0 1 1
68HC12 Arithmetic • Addition and Subtraction • Shift and Rotate Instructions • Multiplication • Division
9 C = 156 Binary Multiplication 13 x 12 26 13 156 1101 1100 0000 0000 1101 1101 10011100
Hex Multiplication Dec Hex 3D x 5A 262 A x D = 82, A x 3 = 1E + 8 = 26 131 5 x D = 41, 5 x 3 = F + 4 = 13 157216 = 549010 61 x 90 5490
Hex Multiplication ; multiply 8 x 8 = 16 =00004000 ORG $4000 4000 86 3D LDAA #$3D 4002 C6 5A LDAB #$5A 4004 12 MUL product = $1572 is in D = A:B
16-Bit Hex Multiplication 31A4 x1B2C 253B0 4 x C = 30 A x C = 78 + 3 = 7B 1 x C = C + 7 = 13 3 x C = 24 + 1 = 25
16-Bit Hex Multiplication 31A4 x1B2C 253B0 6348 2 x 4 = 8 2 x A = 14 1 x 2 = 2 + 1 = 3 2 x 3 = 6
16-Bit Hex Multiplication 31A4 x1B2C 253B0 6348 2220C 4 x B = 2C A x B = 6E + 2 = 70 1 x B = B + 7 = 12 3 x B = 21 + 1 = 22
16-Bit Hex Multiplication 31A4 x1B2C 253B0 6348 2220C 31A4 0544D430 ORG $4000 4000 CC 31A4 LDD #$31A4 ;D = $31A4 4003 CD 1B2C LDY #$1B2C ;Y = $1B2C 4006 13 EMUL;Y:D = D x Y
Multiply Instructions Note that EMUL and MUL are unsigned multiplies EMULS is used to multiply signed numbers
Unsigned Multiplication Hex Dec FFF8 x 0008 7FFC0 65528 x 8 524224 52422410 = 7FFC016
FFF8 x 0008 7FFC0
Unsigned Multiplication Hex Dec FFF8 x 0008 7FFC0 65528 x 8 524224 52422410 = 7FFC016 But FFF8 = 1111111111111000 can be a signed number 2’s comp = 0000000000001000 = $0008 = 810 Therefore, FFF8 can represent -8
Signed Multiplication Dec 6410 = 0000004016 = 0000 0000 0000 0000 0000 0000 0100 0000 2’s comp = 1111 1111 1111 1111 1111 1111 0100 0000 = $FFFFFF40 -8 x 8 -64 Therefore, for signed multiplication $FFF8 x $0008 = $FFFFFF40 and not $7FFC0 The EMULS instruction performs SIGNED multiplication
Signed Multiplication ; EMULS signed 16 x 16 = 32 =00004000 ORG $4000 4000 CC FFF8 LDD #$FFF8 ;D = $FFF8 4003 CD 0008 LDY #$0008 ;Y = $0008 4006 1813 EMULS;Y:D = D x Y product = $FFFFFFC0 is in Y:D
Multiplication Note that EMUL is a 16 x 16 multiply that produces a 32-bit unsigned product. If the product fits into 16-bits, then it produces the correct SIGNED product.
-8 x 8 -64 = $FFC0 FFF8 x 0008 7FFC0 Correct 16-bit SIGNED result
Multiplication Even MUL can be used for an 8 x 8 = 8 SIGNED multiply
Note: A x B = A:B B contains the correct 8-bit SIGNED value
68HC12 Arithmetic • Addition and Subtraction • Shift and Rotate Instructions • Multiplication • Division
D C 9C Binary Division 1 1 0 1 1100 10011100 1100 1 0111 1100 0 0011 0000 0110 0 1100 0000
Hex Division A C EE BC2F B28 9A F C x E = A8 C x E = A8 + A = B2
Hex Division A C EE BC2F B28 9A F 94C 63 Dividend = BC2F Divisor = EE Quotient = CA Remainder = 63 A x E = 8C A x E = 8C + 8 = 94
Hex Division A C EE BC2F B28 9A F 94C 63 =00004000 ORG $4000 4000 CD 0000 LDY #$0000 4003 CC BC2F LDD #$BC2F 4006 CE 00EE LDX #$00EE 4009 11 EDIV;BC2F/EE = CA rem 63
Y:D/X => Y Remainder in D
C o n d i t i o n c o d e r e g i s t e r S X H I N Z V C Divisor may be too small 11313 rem 85 EE FFBC2F Quotient does not fit in Y Overflow bit, V, will be set