0% found this document useful (0 votes)
114 views

ECE 3120 Computer Systems Shift and Rotate

This document provides an overview of shift and rotate instructions for the 68HCS12 microcontroller. It defines logical shift, arithmetic shift, and cyclic (rotate) instructions and explains how they operate on memory locations and accumulators. Examples are given to demonstrate how to use shift and rotate instructions to modify values. Boolean logic and bit test/manipulation instructions are also summarized. Finally, it discusses using instruction sequences and repetition to generate time delays for applications that require timing.

Uploaded by

Air_za
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
114 views

ECE 3120 Computer Systems Shift and Rotate

This document provides an overview of shift and rotate instructions for the 68HCS12 microcontroller. It defines logical shift, arithmetic shift, and cyclic (rotate) instructions and explains how they operate on memory locations and accumulators. Examples are given to demonstrate how to use shift and rotate instructions to modify values. Boolean logic and bit test/manipulation instructions are also summarized. Finally, it discusses using instruction sequences and repetition to generate time delays for applications that require timing.

Uploaded by

Air_za
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 19

ECE 3120

Computer Systems
Shift and Rotate
Manjeera Jeedigunta
http://blogs.cae.tntech.edu/msjeedigun21
Email: [email protected]
Tel: 931-372-6181, Prescott Hall 120
† Prev:
„ Loops

† Today:
„ Shift and Rotation
Shift and Rotate Instructions
The 68HCS12 has shift and rotate instructions that apply to a memory location,
accumulators A, B and D. A memory operand must be specified using the
extended or index addressing modes.

Logical Shift
Shift Left (Memory,A,B,D): LSL,LSLA,LSLB,LSLD
Shift Right (Memory,A,B,D): LSR,LSRA,LSRB,LSRD

Arithmetic Shift, Similar to a Logical shift, but the sign bit remains unchanged.
Shift Left (Memory,A,B,D): ASL,ASLA,ASLB,ASLD
Shift Right (Memory,A,B,D): ASR,ASRA,ASRB

Cyclic Shift (or Rotation)


Left (Memory,A,B): ROL, ROLA,ROLB
Right (Memory,A,B): ROR, RORA,RORB
Logical Shift One bit falls off and a ‘0’ is shifted in!

LSL,LSLA,LSLB C b7 ----------------- b0 0

LSLD C b7 ----------------- b0 b7 ----------------- b0 0


accumulator A accumulator B

LSR,LSRA,LSRB 0 b7 ----------------- b0 C

LSRD 0 b7 ----------------- b0 b7 ----------------- b0 C


accumulator A accumulator B
Arithmetic Shift :Similar to Logical shift but here the sign bit
remains the same

ASL,ASLA,ASLB C b7 ----------------- b0 0

ASLD C b7 ----------------- b0 b7 ----------------- b0 0


accumulator A accumulator B

ASR,ASRA,ASRB
b7 ----------------- b0 C
Rotation (Cyclic Shift)

ROL, ROLA,ROLB b7 ----------------- b0 C

ROR, RORA,RORB C b7 ----------------- b0

A useful link from The Teacher@ website.


Example 2.18 Suppose that [A] = $95 and C = 1. Compute the new values of A
and C after the execution of the instruction ASLA.

Solution:
accumulator A

1 0 0 1 0 1 0 1 0 Original value New value


C flag
[A] = 10010101 [A] = 00101010
C=1 C=1
1 0 0 1 0 1 0 1 0
Figure 2.11b Execution result of the ASLA instruction

Figure 2.11a Operation of the ASLA instruction

Example 2.19 Suppose that m[$800] = $ED and C = 0. Compute the new values
of m[$800] and the C flag after the execution of the instruction ASR $800.

Solution:

1 1 1 0 1 1 0 1 Original value New value


memory C flag
location [$800]= 11101101 [$800]= 11110110
$800 C=0 C=1
1 1 1 1 0 1 1 0 1
Figure 2.12b Result of the ASR $800 instruction

Figure 2.12a Operation of the ASR $800 instruction


Example 2.20 Suppose that m[$800] = $E7 and C = 1. Compute the new contents
of m[$800] and the C flag after the execution of the instruction LSR $800.

Solution:

1 1 1 0 0 1 1 1 Original value New value


memory C flag [$800] = 11100111 [$800] = 01110011
location C=1 C=1
$800
0 0 1 1 1 0 0 1 1 1 Figure 2.13b Execution result of LSR $800

Figure 2.13a Operation of the LSR $800 instruction

Example 2.21 Suppose that [B] = $BD and C = 1. Compute the new values of
B and the C flag after the execution of the instruction ROLB.

Solution:

Original value New value


1 0 1 1 1 1 0 1 1
C flag [B] = 10111101 [B] = 01111011
C=1 C=1
accumulator B 0 1 1 1 1 0 1 1 1
Figure 14b. Execution result of ROLB
Figure 2.14a Operation of the instruction ROLB
Shift a Multi-byte Number
For shifting right

1. The bit 7 of each byte will receive the bit 0 of its immediate left byte with
the exception of the most significant byte which will receive a 0.
2. Each byte will be shifted to the right by 1 bit. The bit 0 of the least
significant byte will be lost.

Suppose there is a k-byte number that is stored at loc to loc+k-1.

Method for shifting right

Step 1: Shift the byte at loc to the right one place.


Step 2: Rotate the byte at loc+1 to the right one place.
Step 3: Repeat Step 2 for the remaining bytes.
For shifting left

1. The bit 0 of each byte will receive the bit 7 of its immediate right byte with the
exception of the least significant byte which will receive a 0.
2. Each byte will be shifted to the left by 1 bit. The bit 7 of the most significant
byte will be lost.

Suppose there is a k-byte number that is stored at loc to loc+k-1.

Method for shifting left

Step 1: Shift the byte at loc+k-1 to the left one place.


Step 2: Rotate the byte at loc+K-2 to the left one place.
Step 3: Repeat Step 2 for the remaining bytes.
Example 2.24 Write a program to shift the 32-bit number stored at $1000-$1003 to the
right four places.

ldab #4 ;set up the loop count


ldx #$1000
again lsr 0,x
ror 1,x
ror 2,x
ror 3,x
dbne b,again
Boolean Logic Instructions
- Changing a few bits are often done in I/O applications.
- Boolean logic operation can be used to change a few I/O port pins easily.

Table 2 .8 Sum m ary o f Bo o le ran lo gic instruc tio ns


M ne m o nic Func tio n O pe ratio n

AN D A < o pr> AND A with m e m o ry A ← (A) • (M )


AN D B < o pr> AN D B with m e m o ry B ← (B) • (M )
AN D CC < o pr> AN D CCR with m e m o ry (c le ar CCR bits) CCR ← (CCR) • (M )
EO RA < o pr> Exc lusive O R A with m e m ro y A ← (A) ⊕ (M )
Example AND
EO RB < o pr> Exc lusive O R B with m e m o ry B ← (B) ⊕ (M )
O RAA < o pr> O R A with m e m o ry A ← (A) + (M )
O RAB < o pr> O R B with m e m o ry B ← (B) + (M )
Ldaa $56
O RCC < o pr> O R CCR with m e m o ry CCR ← (CCR) + (M )
CLC Cle ar C bit in CCR C← 0 Anda #$0F
CLI Cle ar I bit in CCR I← 0
CLV Cle ar V bit in CCR V← 0 Staa $56
CO M < o pr> O ne 's c o m ple m e nt m e m o ry M ← $ FF - (M )
CO M A O ne 's c o m ple m e nt A A ← $ FF - (A)
CO M B O ne 's c o m ple m e nt B B ← $ FF - (B)
N EG < o pr> Two 's c o m ple m e nt m e m o ry M ← $ 0 0 - (M )
N EG A Two 's c o m ple m e nt A A ← $ 0 0 - (A)
N EG B Two 's c o m ple m e nt B B ← $ 0 0 - (B)
Bit Test and Manipulate Instruction
† Used to either test or change the values of certain bits
in a given number
† Bclr,bita,bitb,bset
† Examples:
„ Bclr 0,x,$81 Æ (10000001)
† Clears MSB and LSB, pointed by memory location 0,x
„ Bita #$44 Æ (01000100)
† Tests bit 6 & 2 of A and updates Z,N flags accordingly
„ Bitb #$22 Æ (00100010)
† Tests bit 5 & 1 of B and updates Z,N flags accordingly
„ Bset 0,y,$33 (00110011)
† Sets bits 5,4,1,0 of the memory location pointed by 0,y
Program Execution Time
- The 68HCS12 uses the E clock (ECLK) as a timing reference.
- There are many applications that require the generation of time delays.

The creation of a time delay involves two steps:

1. Select a sequence of instructions that takes a certain amount of time to


execute.
2. Repeat the selected instruction sequence for an appropriate number of times.

Delay of 10ms
For a delay
Instr1 of 50 ms??
Instr2
Instr3
……
……
Instrn
For example, the instruction
sequence to the right takes 40 loop psha ; 2 E cycles
pula ; 3 E cycles
E cycles to execute. By
psha
repeating this instruction pula
sequence certain number of psha
times, different time delay can pula
be created. psha
pula
psha
Assume that the E frequency of pula
68HCS12 is 24 MHz and hence psha
its clock period is 41.25 ns. pula
psha
Therefore the instruction
pula
sequence to the right will take nop ; 1 E cycle
1.667 μs to execute. nop ; 1 E cycle
dbne x,loop ; 3 E cycles
Example 2.25 Write a program loop to create a delay of 100 ms.

ldx #60000;
Solution: A delay loop psha ; 2 E cycles
of 100 ms can be pula ; 3 E cycles
psha
created by repeating pula
the previous loop psha
60000 times. pula
psha
pula
psha
pula
psha
pula
psha
pula
nop ; 1 E cycle
nop ; 1 E cycle
dbne x,loop ; 3 E cycles
Chapter Review
† Assembly Language Program Structure:
„ Label, operation, operand, comment
† Directives: end,org,db,ds,fill…
† Flow chart
† Arithmetic
† Loops, branch instructions
† Shift and rotate
† Boolean logic
† Bit test and manipulate
† Program execution time
Now, you should be able to:
† Allocate memory blocks, define constants,
and create a message using assembler
directives
† Write assembly programs to perform simple
arithmetic operations
† Write loops to perform repetitive operations
† Use loops to creat time delays
† Use boolean and bit manipulation instructions
to perform bit field operations.
† Next:

„ Chapter 3

You might also like