Download presentation
Presentation is loading. Please wait.
Published byΑργυρός Αλεξάνδρου Modified over 5 years ago
1
ME 4447/6405 Microprocessor Control of Manufacturing Systems and
Introduction to Mechatronics Instructor: Professor Charles Ume Lecture #10
2
Relative Addressing
3
Relative Addressing Relative addressing is used for branch instructions only. Three types of branch instructions: Short Branches – offset signed 8-bit number (-128 to 127) Long Branches – offset signed 16-bit number (-32,768 to 32,767) Bit Condition Branches – offset signed 8-bit number (-128 to 127) Short Branch instructions are 2 bytes in length. First byte contains opcode Second byte contains address offset BEQ Loop 27 offset (I byte)
4
Relative Addressing Long branch instructions are 4 bytes in length
First two bytes contain opcode and postbyte Second byte contains 16-bit signed address offset LBEQ Loop MSB LSB offset value Bit condition branch instructions are 4 to 6 bytes in length depending on addressing mode BRSET $0800 #$05 Loop 1E byte offset value Offset is calculated by subtracting contents of Program Counter from destination address. (Note: The Program Counter contains the memory location of the next instruction) If branch condition is true, then add offset to program counter
5
Example 1 Example Program assembled except for the relative addresses (offsets) ORG $ Address Opcode Postbyte Operand ABA $ : : BACK LDAA #$ $106A NEGA $106C ADDA $1A00 $106D BB A00 BEQ FRONT $ ADDA $ $ B BNE BACK $ FRONT NOP $ A7 SWI F END Offset ? Offset ?
6
Example 1 First calculate address offset for forward branch
ORG $ Address Opcode Postbyte Operand ABA $ : : BACK LDAA #$ $106A NEGA $106C ADDA $1A00 $106D BB A00 BEQ FRONT $ ADDA $ $ B BNE BACK $ FRONT NOP $ A7 SWI 3F END Offset ? Offset ?
7
Example 1 Branching Forward
Offset is positive if branching forward
8
Example 1 Address of BEQ instruction and Address of where to jump to (NOP) ORG $ Address Opcode Postbyte Operand ABA $ : : BACK LDAA #$ $106A NEGA $106C ADDA $1A00 $106D BB A00 BEQ FRONT ADDA $ $ B BNE BACK $ FRONT NOP A7 SWI 3F END $1070 Offset ? Offset ? $1080
9
Step2: Subtract result from destination address $1080-$1072 = $0E
Example 1 Branching Forward Continued In Hexadecimal Step1: Add $02 to starting address $1070+$02 = $1072 to determine contents of Program Counter Step2: Subtract result from destination address $1080-$1072 = $0E Address Offset is : $0E $ + $ $ 1’s COMP 2’s COMP +$ = $0E
10
Example 1 Calculate address offset for backward branch
ORG $ Address Opcode Postbyte Operand ABA $ : : BACK LDAA #$ $106A NEGA $106C ADDA $1A00 $106D BB A00 BEQ FRONT $ E ADDA $ $ B BNE BACK $ FRONT NOP $ A7 SWI 3F END Offset ?
11
Example 1 Branching Backward
Offset negative if branching backward
12
Example 1 Address of BNE instruction and Address of where to jump to (LDAA) ORG $ Address Opcode Postbyte Operand ABA $ : : BACK LDAA #$ NEGA $106C ADDA $1A00 $106D BB A00 BEQ FRONT $ ADDA $ $ B BNE BACK FRONT NOP $ A7 SWI 3F END $106A $1074 Offset ?
13
Example 1 Branching Forward Continued
In Hexadecimal Step1: Add $02 to starting address $1074+$02 = $1076 to determine contents of Program Counter Step2: Subtract result from destination address $106A-$1076 But result will be negative so: Step 3: Switch order and subtract $1076-$106A = $0C Step 4: Take 1’s complement $0C -> $F3 Step5: Take 2’s complement $F3 + $01 = $F4 Address offset will be: $F4
14
Example 1 Branching Forward Continued
Note: In Binary $ + $ $ 1’s COMP 2’s COMP +$106A = $F4
15
Example 1 Example Program assembled completely
ORG $ Address Opcode Postbyte Operand ABA $ : : BACK LDAA #$ $106A NEGA $106C ADDA $1A00 $106D BB A00 BEQ FRONT $ E ADDA $ $ B BNE BACK $ F4 FRONT NOP $ A7 SWI 3F END
16
Address Opcode Postbyte Operand
Long Branch Instructions Long branch instructions are equivalent to short branch instructions, except offset is signed 16-bit number [-32,767 to 32,768] Example: Assume distance from branch instruction to destination is greater than 127 memory locations. Must use long branch instructions: Short Branch: BNE FRONT $ A : : FRONT NOP $ A7 Long Branch: LBNE FRONT $ A FRONT NOP $ A7 Address Opcode Postbyte Operand
17
Example Branch Instructions
Branch if bit(s) clear (BRCLR) Example: Branch to DOG when bit 0 and bit 2 are clear in data contained at address $19 BRCLR $19 #$05 DOG Assume $19 contains #$63 #$63 = #$05 = (MASK) will not branch to DOG Assume $19 contains #$62 #$62 = #$05 = (MASK) will branch to DOG (Note: BRCLR may be used in extended addressing mode.) Can also be written as: LDY #$0019 BRCLR $00,Y #$05 DOG
18
Example Branch Instructions
Branch if bit(s) set (BRSET) Example: Branch to DOG when bit 0 and bit 2 are set in data contained at address $20 BRSET $20 #$05 DOG Assume $20 contains #$63 #$63 = #$05 = (MASK) *will not branch to DOG Assume $20 contains #$65 #$65 = #$05 = (MASK) *will branch to DOG Can also be written as: LDX #$0020 BRSET $00,X #$05 DOG
19
Branch Instructions from Programming Reference Guide
20
Branch Instructions from Programming Reference Guide (continued)
(Note: BRCLR and BRSET boxed in Red)
21
Special Instructions Bit Clear Example: BCLR $34 #$04
Assume $34 contains #$44 #$44 = #$04 = Result: $34 will now contain Alternative: If index register X contains #$0034, we can use the following instruction to perform the same operation as above. BCLR $00,X #$04
22
Special Instructions Cont’d
Bit Set Example: BSET $00,X #$01 Assume the content of index register X is #$0045 and assume that $45 contains #$60. #$60 = #$01 = Result: $45 now contains Alternative: We can use the following instruction to perform the same operation as above. BSET $45 #$01
23
Special Instructions Cont’d
BITA This instruction is similar to ANDA except that the result of this operation is not stored in accumulator A. Example: BITA #$7C BNE LOOP Assume accumulator A contains #% #$7C = #% Result: The operation produces the result #% but this is not stored anywhere. The following instruction will branch to LOOP because the result of the preceding operation was not equal to zero.
24
Homework Set #3 Solution
1. Write a subroutine to save the first 5 odd (8-bit) numbers pointed to by the x-register (passed in) onto the stack. Note: For subroutine to execute in main program, a BSR or JSR command must be used in main program. 2. Write a program to output a square wave thru port S pin The output can be observed on the scope, and the period T of the wave should be measured. More than one period wave should be generated. The machine cycle time of the MC9S12C32 should be estimated. Draw the square wave.
25
QUESTIONS???
Similar presentations
© 2024 SlidePlayer.com Inc.
All rights reserved.