logical, shift, rotate & bcd

92
Logical, Shift, Rotate & BCD

Upload: dextra

Post on 14-Jan-2016

26 views

Category:

Documents


1 download

DESCRIPTION

Logical, Shift, Rotate & BCD. What we will learn in this session:. Logical instructions. Shift & Rotate instructions. BCD operations. Bit operations. Some Basics. Effective Address: . ARI(An) ARI+PI(An)+ ARI+PD-(An) ARI+DD(An) ARI+ID(An,Dn/An.s) PC+D D(PC) - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Logical, Shift, Rotate & BCD

Logical, Shift, Rotate & BCD

Page 2: Logical, Shift, Rotate & BCD

What we will learn in this session:

Logical instructions. Shift & Rotate instructions. BCD operations. Bit operations.

Page 3: Logical, Shift, Rotate & BCD

Some Basics

Page 4: Logical, Shift, Rotate & BCD

We have covered these addressing modes

DRD D0 D7ARD A0 A7

Dn and An ARI (An)ARI+PI (An)+ARI+PD -(An)ARI+D D(An)ARI+I D(An,Dn/An.s)PC+D D(PC)PC+I D(PC,Dn/An.s)ALA $001001ASA $FFAAIA CCR, SR, PC

Effective Address: <ea>

ID#($/%/@)

Immediate data: <id>

Page 5: Logical, Shift, Rotate & BCD

BCD Representation

One digit represented by 4-bits. Each digit represented by own binary

sequence. BCD operations supported by M68k.

Page 6: Logical, Shift, Rotate & BCD

BCD Representation

Digit BCD Representation

0 00001 00012 00103 00114 01005 01016 01107 01118 10009 1001

Page 7: Logical, Shift, Rotate & BCD

Example: BCD Representation

Represent 564 in BCD.

5 6 4

0101 0110 0100

564BCD = 010101100100

Page 8: Logical, Shift, Rotate & BCD

Logical Group

Page 9: Logical, Shift, Rotate & BCD

Introduction

Instructions that implement logic operations:ANDOREORNOT

Page 10: Logical, Shift, Rotate & BCD

AND (Logical AND)

Performs logical AND operation.

Dn An (An) (An)+ -(An) d(An) d(An,i) ASA ALA d(PC) d(PC,i) #n

s - s s s s s s s s s s

d - d d d d d d d - - -

N Z V CX

* * 0 0-BWL

Page 11: Logical, Shift, Rotate & BCD

AND ExampleD0 = $0000FFFFD1 = $000000AAAND.B D1,D0

1 1 1 1 1 1 1 1D0.B =

1 0 1 0 1 0 1 0D1.B =AND

1 0 1 0 1 0 1 0D0.B =

D0 = $0000FFAA

CCRX = unchanged.N = 1 (MSB = 1)Z = 0 (result non-zero)V = always cleared.C = always cleared.

Page 12: Logical, Shift, Rotate & BCD

ANDI (AND Immediate)

Performs logical AND operation, source is immediate data.

Dn An (An) (An)+ -(An) d(An) d(An,i) ASA ALA d(PC) d(PC,i) #n

- - - - - - - - - - - s

d - d d d d d d d - - -

N Z V CX

* * 0 0-BWL

Page 13: Logical, Shift, Rotate & BCD

ANDI ExampleD0 = $0000FFFFANDI.B #$77, D0

1 1 1 1 1 1 1 1D0.B =

0 1 1 1 0 1 1 1D1.B =AND

0 1 1 1 0 1 1 1D0.B =

D0 = $0000FF77

CCRX = unchanged.N = 0 (MSB = 0)Z = 0 (result non-zero)V = always cleared.C = always cleared.

Page 14: Logical, Shift, Rotate & BCD

OR (Logical OR)

Performs logical OR operation.

Dn An (An) (An)+ -(An) d(An) d(An,i) ASA ALA d(PC) d(PC,i) #n

s - s s s s s s s s s s

d - d d d d d d d - - -

N Z V CX

* * 0 0-BWL

Page 15: Logical, Shift, Rotate & BCD

OR ExampleD0 = $0000FFFFD1 = $000000AAOR.B D1,D0

1 1 1 1 1 1 1 1D0.B =

1 0 1 0 1 0 1 0D1.B =OR

1 1 1 1 1 1 1 1D0.B =

D0 = $0000FFFF

CCRX = unchanged.N = 1 (MSB = 1)Z = 0 (result non-zero)V = always cleared.C = always cleared.

Page 16: Logical, Shift, Rotate & BCD

ORI (OR Immediate)

Performs logical AND operation on immediate data.

Dn An (An) (An)+ -(An) d(An) d(An,i) ASA ALA d(PC) d(PC,i) #n

- - - - - - - - - - - s

d - d d d d d d d - - -

N Z V CX

* * 0 0-BWL

Page 17: Logical, Shift, Rotate & BCD

ORI ExampleD0 = $0000FFAAORI.B #$67,D0

1 0 1 0 1 0 1 0D0.B =

0 1 1 0 0 1 1 1D1.B =OR

1 1 1 0 1 1 1 1D0.B =

D0 = $0000FFEF

CCRX = unchanged.N = 1 (MSB = 1)Z = 0 (result non-zero)V = always cleared.C = always cleared.

Page 18: Logical, Shift, Rotate & BCD

EOR (XOR Logic)

Performs Exclusive Or operation.

Dn An (An) (An)+ -(An) d(An) d(An,i) ASA ALA d(PC) d(PC,i) #n

s - - - - - - - - - - s

d - d d d d d d d - - -

N Z V CX

* * 0 0-BWL

Page 19: Logical, Shift, Rotate & BCD

EOR ExampleD0 = $0000FFBBD1 = $000000AAEOR.B D1,D0

1 0 1 1 1 0 1 1D0.B =

1 0 1 0 1 0 1 0D1.B =XOR

0 0 0 1 0 0 0 1D0.B =

D0 = $0000FF11

CCRX = unchanged.N = 0 (MSB = 0)Z = 0 (result non-zero)V = always cleared.C = always cleared.

Page 20: Logical, Shift, Rotate & BCD

EORI (EOR Immediate)

Similar to EOR, but source is <id>.

Dn An (An) (An)+ -(An) d(An) d(An,i) ASA ALA d(PC) d(PC,i) #n

- - - - - - - - - - - s

d - d d d d d d d - - -

N Z V CX

* * 0 0-BWL

Page 21: Logical, Shift, Rotate & BCD

EORI ExampleD0 = $0000FFBBEORI.B #$67,D0

1 0 1 1 1 0 1 1D0.B =

0 1 1 0 0 1 1 1D1.B =XOR

1 1 0 1 1 1 0 0D0.B =

D0 = $0000FFDC

CCRX = unchanged.N = 1 (MSB = 1)Z = 0 (result non-zero)V = always cleared.C = always cleared.

Page 22: Logical, Shift, Rotate & BCD

NOT (Not Logic) Inverts bits:

If 1 0 If 0 1

Dn An (An) (An)+ -(An) d(An) d(An,i) ASA ALA d(PC) d(PC,i) #n

- - - - - - - - - - - -

d - d d d d d d d - - -

N Z V CX

* * 0 0-BWL

Page 23: Logical, Shift, Rotate & BCD

NOT ExampleD0 = $0000FFFFNOT.B D0

1 1 0 1 1 1 1 1D0.B =

0 0 0 0 0 0 0 0D0.B =

D0 = $0000FF00CCRX = unchanged.N = 0 (MSB = 0)Z = 1 (result is zero)V = always cleared.C = always cleared.

Page 24: Logical, Shift, Rotate & BCD

Modifying Special Registers with Logical Operators ANDI, ORI and EORI can be used to

modify special registers:CCR (B)SR (W)

Source must be immediate data. Needs SV privileges to do this.

Page 25: Logical, Shift, Rotate & BCD

The Status Register

T S I2 I1 I0 X N Z V C

T = Trace Flag.S = Supervisor Flag.I2, I1, I0 = Interrupt Mask Flags. X = Extend Flag.N = Negative Flag.Z = Zero Flag.V = Overflow Flag.C = Carry Flag.

CCR

Page 26: Logical, Shift, Rotate & BCD

Example: Clear all bits in CCR

0 1 0 0 1CCR =

0 1 0 0 1CCR =

*CCR extended to 8-bits before operation

0 00

ANDI.B #00,CCR

0 0 0 0 0ANDI 0 00

0 0 0 0 00 00CCR =

Page 27: Logical, Shift, Rotate & BCD

Example: Enable Trace Bit

0 0SR =

ORI.W #$8000,SR

0 1 0 0 1 0 0 1

0 0SR = 0 1 0 0 1 0 0 1

1 0OR 0 0 0 0 0 0 0 00 0 0 0 0 0

1 0SR = 0 1 0 0 1 0 0 1

Trace activated.

Page 28: Logical, Shift, Rotate & BCD

Shift & Rotate Group

Page 29: Logical, Shift, Rotate & BCD

Shift Instructions

Page 30: Logical, Shift, Rotate & BCD

LSL & LSR (Logical Shift Left/Right)

Shifts bits to left or right:LSL: Insert zeros from right.LSR: Inserts zeros from left.

X and C set to last bit pushed out.

Page 31: Logical, Shift, Rotate & BCD

LSL (Logical Shift Left)

X/C 0

Page 32: Logical, Shift, Rotate & BCD

LSR (Logical Shift Right)

X/C0

Page 33: Logical, Shift, Rotate & BCD

LSL & LSR

Dn An (An) (An)+ -(An) d(An) d(An,i) ASA ALA d(PC) d(PC,i) #n

s - - - - - - - - - - s

d - - d d d d d d - - -

N Z V CX

* * 0 **BWL

Page 34: Logical, Shift, Rotate & BCD

How LSL & LSR Effect CCR

X = C = Last bit pushed out. N = 1 if MSB is 1. Z = 1 if all active bits are zero. V = always 0.

Page 35: Logical, Shift, Rotate & BCD

Example: LSLD0 = $000000AAD1 = $00000008LSL.W D1,D0

0 0 A AD0.W =

A A 0 0D0.W =LSL

0 0

CCRX = C = 0 (last bit pushed out)N = 1 (MSB = 1)Z = 0 (D0.W not zero)V = 0 (Always cleared)

Pushed out

Page 36: Logical, Shift, Rotate & BCD

Example: LSRD0 = $000000AALSR.W #4,D0

0 0 A AD0.W =

0 0 0 AD0.W =

LSR 0

CCRX = C = 1 (last bit pushed out)N = 0 (MSB = 0)Z = 0 (D0.W not zero)V = 0 (Always cleared)

Pushed out

0 0 A AD0.W =

Page 37: Logical, Shift, Rotate & BCD

ASL & ASR (Arithmetic Shift Left/Right)

Shifts bits to left or right:ASL: Insert zeros from right.ASR: Inserts MSB from left.

X and C set to last bit pushed out.

Page 38: Logical, Shift, Rotate & BCD

ASL (Arithmetic Shift Left)

X/C 0

Page 39: Logical, Shift, Rotate & BCD

ASR (Arithmetic Shift Right)

X/C

Page 40: Logical, Shift, Rotate & BCD

ASL & ASR

Dn An (An) (An)+ -(An) d(An) d(An,i) ASA ALA d(PC) d(PC,i) #n

s - - - - - - - - - - s

d - d d d d d d d - - -

N Z V CX

* * * **BWL

V = PO + NMSB (pushed out or new MSB)

Page 41: Logical, Shift, Rotate & BCD

How ASL Effects CCR

X = C = Last bit pushed out. N = 1 if MSB is 1. Z = 0 if all active bits are zero. V = 1 if last bit pushed out is 1

or MSB is 1.

Page 42: Logical, Shift, Rotate & BCD

How ASR Effects CCR

X = C = Last bit pushed out. N = 1 if MSB is 1. Z = 0 if all active bits are zero. V = 0 (always zero)

Page 43: Logical, Shift, Rotate & BCD

Example: ASLD0 = $000000ABD1 = $00000003ASL.B D1,D0

1 0 1 0D0.B =

0 1 0 1D0.B =

0 0

CCRX = C = 1 (last bit pushed out)N = 0 (MSB = 0)Z = 0 (D0.B not zero)V = 1 (LBPO = 1)

Pushed out

1 0 1 1 0

1 0 0 0

Page 44: Logical, Shift, Rotate & BCD

Example: ASRD0 = $000000ABASR.B #4,D0

1 0 1 0D0.B =

1 1 1 1D0.B =CCRX = C = 1 (last bit pushed out)N = 1 (MSB = 1)Z = 0 (D0.B not zero)V = 0 (Always zero)

Pushed out

1 0 1 1

1 0 1 0

1 0 1 0D0.B = 1 0 1 11 1 1 1

MSB is 1, filled with 1

Page 45: Logical, Shift, Rotate & BCD

Rotate Instructions

Page 46: Logical, Shift, Rotate & BCD

ROL & ROR (Rotate Left/Right)

Pushes out MSB, and moves the bits to the back.

C set to last bit pushed out.

Page 47: Logical, Shift, Rotate & BCD

ROL & ROR

Dn An (An) (An)+ -(An) d(An) d(An,i) ASA ALA d(PC) d(PC,i) #n

s - - - - - - - - - - s

d - d d d d d d d - - -

N Z V CX

* * 0 *-BWL

Page 48: Logical, Shift, Rotate & BCD

ROL (Rotate Left)

C

Page 49: Logical, Shift, Rotate & BCD

ROR (Rotate Right)

C

Page 50: Logical, Shift, Rotate & BCD

How ROL & ROR Effects CCR

C = Last bit rotated. N = 1 if MSB is 1. Z = 0 if all active bits are zero. V = always cleared. X = unchanged.

Page 51: Logical, Shift, Rotate & BCD

Example: ROLD0 = $000000ABD1 = $00000003ROL.B D1,D0

0 1 0 1D0.B =

CCRX = unchanged.C = 1 (last bit rotated)N = 0 (MSB = 0)Z = 0 (D0.B not zero)V = always cleared.

1 1 0 1

1 0 1 0D0.B = 1 0 1 1

1 0 1 0D0.B = 1 0

Pushed out…

1 0 1 1 1

And sent to back…

Page 52: Logical, Shift, Rotate & BCD

Example: RORD0 = $000000ABROR.B #4,D0

1 0 1 0D0.B =

1 0 1 1D0.B = CCRX = unchangedC = 1 (last bit pushed out)N = 1 (MSB = 1)Z = 0 (D0.B not zero)V = always cleared

Pushed out…

1 0 1 1

1 0 1 0

1 0 1 0D0.B = 1 0 1 11 0 1 1

And sent to front…

Page 53: Logical, Shift, Rotate & BCD

ROXL & ROXR (Rotate with Extend Left/Right)

Same with ROR and ROL, but X bit becomes an extra place to store the extra bit.

Last rotated bit stored in C and X.

Page 54: Logical, Shift, Rotate & BCD

ROXL (Rotate with Extend Left)

XC

Page 55: Logical, Shift, Rotate & BCD

ROXR (Rotate with Extend Right)

X C

Page 56: Logical, Shift, Rotate & BCD

ROXL & ROXR

Dn An (An) (An)+ -(An) d(An) d(An,i) ASA ALA d(PC) d(PC,i) #n

s - - - - - - - - - - s

d - d d d d d d d - - -

N Z V CX

* * 0 **BWL

Page 57: Logical, Shift, Rotate & BCD

How ROXL & ROXR Effects CCR

X = C = Last bit rotated. N = 1 if MSB is 1. Z = 0 if all active bits are zero. V = always cleared.

Page 58: Logical, Shift, Rotate & BCD

Example: ROXLD0 = $000000ABD1 = $00000001ROXL.B D1,D0

CCRX =C = 1 (last bit pushed out)N = 0 (MSB = 0)Z = 0 (D0.B not zero)V = always cleared.

1 0 1 0D0.B = 1 0 1 1X=0

1 0 1 0D0.B = 1 0 1 1X=0

00 1 0D0.B = 1 0 1 1X=1

Page 59: Logical, Shift, Rotate & BCD

Example: ROXRD0 = $000000ABD1 = $00000004ROXR.B D1,D0

CCRX =C = 1 (last bit pushed out)N = 0 (MSB = 0)Z = 0 (D0.B not zero)V = always cleared.

1 0 1 0D0.B = 1 0 1 1 X=0

1 0 1 0D0.B = 1 0 1 1 X=0

00 1 1D0.B = 0 1 0 1 X=1

Page 60: Logical, Shift, Rotate & BCD

BCD Group

Page 61: Logical, Shift, Rotate & BCD

ABCD (Add Decimal with Extend)

Adds BCD numbers and X together. SBCD + DBCD + X = DBCD

Can only add together B sizes. X bit for multi-precision arithmetic:

Set if results outside allowed range.

Page 62: Logical, Shift, Rotate & BCD

ABCD

Dn An (An) (An)+ -(An) d(An) d(An,i) ASA ALA d(PC) d(PC,i) #n

s - - - s - - - - - - -

d - - - d - - - - - - -

N Z V CX

U * U **B

Page 63: Logical, Shift, Rotate & BCD

ABCD ExampleD0 = $00000015D1 = $00000045X = 0 before executionABCD D0,D1

15+ 45+ 0

60

0 1 1 0 0 0 0 0D1.B =

6 0

CCRX/C = 0 (0 < result < 99).Z = 0 (Result non-zero).N, V = undefined.

Page 64: Logical, Shift, Rotate & BCD

ABCD ExampleD0 = $00000099D1 = $00000099X = 1 before executionABCD D0,D1

99+ 99+ 1 198

1 0 0 1 1 0 0 1D1.B =

9 9

X/C = 1 (result > 99).Z = clear since result non-zero.N, V = undefined

Page 65: Logical, Shift, Rotate & BCD

SBCD (Subtract Decimal with Extend)

Subtracts BCD numbers. DBCD – SBCD – X = DBCD

Can only subtract B sizes. X bit for multi-precision arithmetic:

Set if results outside allowed range.

Page 66: Logical, Shift, Rotate & BCD

SBCD

Dn An (An) (An)+ -(An) d(An) d(An,i) ASA ALA d(PC) d(PC,i) #n

s - - - s - - - - - - -

d - - - d - - - - - - -

N Z V CX

U * U **B

Page 67: Logical, Shift, Rotate & BCD

SBCD ExampleD0 = $00000025D1 = $00000050X = 1 before executionSBCD D0,D1

50- 25- 1

24

0 0 1 0 0 1 0 0D1.B =

2 4

CCRX/C = 0 (0 < result < 99).Z = clear since result non-zero.N, V = undefined

Page 68: Logical, Shift, Rotate & BCD

SBCD ExampleD0 = $00000099D1 = $00000050X = 0 before executionSBCD D0,D1

50- 99- 0 - 49

0 1 0 0 1 0 0 1D0.B =

4 9

CCRX/C = 1 (result < 0).Z = clear since result non-zero.N, V = undefined

Page 69: Logical, Shift, Rotate & BCD

NBCD (Negate BCD)

Finds 10’s complement and 9’s complement of BCD number.Equal to negative BCD number.00BCD – DBCD – X = DBCD

If X = 1, finds 9’s complement: If X = 0, finds 10’s complement.

Page 70: Logical, Shift, Rotate & BCD

NBCD

Dn An (An) (An)+ -(An) d(An) d(An,i) ASA ALA d(PC) d(PC,i) #n

d - d d d d d d d - - -

N Z V CX

U * U 11B

Page 71: Logical, Shift, Rotate & BCD

In simple terms…

NBCD can be used to find 9’s complement or 10’s complement.

10’s complement is 100 – (BCD number).Set X = 0 before execution.

9’s complement is 99 – (BCD number).Set X = 1 before execution.

Page 72: Logical, Shift, Rotate & BCD

NBCD Example: 10’s Complement

D0 = $00000045X = 0 before executionNBCD D0

0 1 0 1 0 1 0 1D0.B =

5 5CCRX/C = 1 (always 1).Z = clear since result non-zero.N, V = undefined

100- 45

55

Page 73: Logical, Shift, Rotate & BCD

NBCD Example: 9’s Complement

D0 = $00000045X = 1 before executionNBCD D0

0 1 0 1 0 1 0 0D0.B =

5 4CCRX/C = 1 (always 1).Z = clear since result non-zero.N, V = undefined

99- 45

54

Page 74: Logical, Shift, Rotate & BCD

Bit Manipulation Group

Page 75: Logical, Shift, Rotate & BCD

Bit Manipulation Group

Set of instructions to manipulate bits in register/memory.

Page 76: Logical, Shift, Rotate & BCD

BCLR (Test Bit & Change)

Examines bit, modifies Z, then clear bit. Bit position specified by Dn or <id>: Effects only Z in CCR.

Page 77: Logical, Shift, Rotate & BCD

BCLR

Dn An (An) (An)+ -(An) d(An) d(An,i) ASA ALA d(PC) d(PC,i) #n

s - - - - - - - - - - s

N Z V CX

- * - --BL

d - d d d d d d d - - -

Page 78: Logical, Shift, Rotate & BCD

BCLR Example

D0 = $0000FFFFD1 = $00000002BCLR D1,D0

1 1 1 1 1 1 1 1D0.B =

1 1 1 1 1 0 1 1D0.B =

07

Z set to 0

Cleared

Page 79: Logical, Shift, Rotate & BCD

BSET (Test Bit & Set)

Examines bit, modifies Z, then sets bit. Everything else like BCLR.

Page 80: Logical, Shift, Rotate & BCD

BSET

Dn An (An) (An)+ -(An) d(An) d(An,i) ASA ALA d(PC) d(PC,i) #n

s - - - - - - - - - - s

N Z V CX

- * - --BL

d - d d d d d d d - - -

Page 81: Logical, Shift, Rotate & BCD

BSET Example

D0 = $00000000BSET #6,D0

0 0 0 0 0 0 0 0D0.B =

0 1 0 0 0 0 0 0D0.B =

07

Z set to 1

Set

Page 82: Logical, Shift, Rotate & BCD

BCHG (Test Bit & Change)

Examines bit, modifies Z, then invert bit. Everything else like BCLR.

Page 83: Logical, Shift, Rotate & BCD

BCHG

Dn An (An) (An)+ -(An) d(An) d(An,i) ASA ALA d(PC) d(PC,i) #n

s - - - - - - - - - - s

N Z V CX

- * - --BL

d - d d d d d d d - - -

Page 84: Logical, Shift, Rotate & BCD

BCHG Example

D0 = $00001075BCHG #4,D0

0 1 1 1 0 1 0 1D0.B =

0 1 1 0 0 1 0 1D0.B =

07

Z set to 0

Inverted

Page 85: Logical, Shift, Rotate & BCD

BTST (Test Bit)

Only examine bit, and modify Z. Data in register unchanged. Everything else like BCLR.

Page 86: Logical, Shift, Rotate & BCD

BCLR

Dn An (An) (An)+ -(An) d(An) d(An,i) ASA ALA d(PC) d(PC,i) #n

s - - - - - - - - - - s

N Z V CX

- * - --BL

d - d d d d d d d - - -

Page 87: Logical, Shift, Rotate & BCD

BTST Example

D0 = $00001075BTST #7,D0

0 1 1 1 0 1 0 1D0.B =

07

Z set to 1D0 unchanged

Page 88: Logical, Shift, Rotate & BCD

Conclusion

Page 89: Logical, Shift, Rotate & BCD

Summary of Instructions

Instruction Description

AND Performs AND operation

OR Performs OR operation

EOR Performs XOR operation

NOT Performs NOT operation

ANDI Performs AND operation using immediate data

ORI Performs OR operation using immediate data

EORI Performs XOR operation on immediate data

Page 90: Logical, Shift, Rotate & BCD

Summary of Instructions

Instruction Description

LSL Logical shift left, adds zeros from right.

ASL

ROL Push to left, then put at back, effects C.

ROXL

LSR Logical shift right, adds zeros from left.

ASR

ROR Push to right, then put at front, effects C.

ROXR

Arithmetic shift left, adds zeros from right.

Arithmetic shift right, adds MSB from left.

Push to left, then put at back, effects C & X.

Push to right, then put at front, effects C & X.

Page 91: Logical, Shift, Rotate & BCD

Summary of InstructionsInstruction Description

ABCD D + S + X = D

NBCD 00 – D – X = D, X = 1 (9’sC), X = 0 (10’sC)

SBCD D – S – X = D

Instruction Description

BTST Test bit and modify Z.

BSET Test bit, modify Z, and set bit.

BCHG Test bit, modify Z, and invert bit.

BCLR Test bit, modify Z, and clear bit.

Page 92: Logical, Shift, Rotate & BCD

The End

Please read:

Antonakos, pg. 76-83.