MC68HC11 Instruction Set Overview • 68HC11 instruction set o A quick look at the programming procedure o The programmer's model o Instruction types and formats o Addressing modes o A tour of the instruction set • Readings for instruction set: o Spasov, Chap. 2 and Appendix A o HC11 Reference Manual, Appendix A o HC11 Programming Reference Guide Looking ahead at the programming procedure: • Soon you'll write programs in assembly language for the HC11 • Here's a super simple example program: ; Super simple test program ORG $B600 SEGMENT code TLOOP:INCA INCB JMP TLOOP • Before the HC11 can run this program, o The assembly-language code needs to be converted to machine language, and the machine-language code needs to be transferred to the HC11's memory Cont.. Looking ahead at the programming procedure: • Here is the machine code that results from the assembly-lang. program given above Address Contents $B600 01001100 $B601 01011100 $B602 01111110 $B603 10110110 $B604 00000000 Cont. Looking ahead at the programming procedure: Putting it all together • try1.asm is a source file o It is created by you, the programmer, using a text editor on your PC o Format: HC11 assembly language (ASCII text) • try1.lst is a listing file o It is created by AS11.exe, the assembler/linker that runs on your PC o (You'll probably run AS11.exe from DevHC11.exe) o Its purpose of the file is to help you debug the program – Format: ASCII text Cont. Putting it all together • try1.s19 is an object file o It is created by AS11.exe, the assembler/linker o Its purpose is to specify what bytes should be downloaded to the HC11, and to what locations in HC11 memory o Format: Motorola S-record (ASCII text) o Sometimes this is called a hex file • The object file is converted to executable machine code o The machine code is created by DevHC11.exe, the development environment that runs on your PC Cont.. Putting it all together o Its purpose is to provide instructions and data to the HC11 Format: HC11 machine language (binary) o Sometimes this is called the binary code o The machine code is transferred to the HC11 through the coordinated efforts of DevHC11.exe (running on your PC) and the Buffalo monitor program (running on the HC11) Programmer’s Model • What features of the processor are most important to the assembly-language programmer? o o o o Register set Memory organization Instruction set Addressing modes • Here is the register set (again): Cont. Programmer’s Model • Accumulators o A: 8-bit general purpose accumulator o B: 8-bit general purpose accumulator o D: Double accumulator (concatenation of A and B for 16-bit operations) Most operations can be done using either accumulator A or B • Index registers o X: 16-bit index register o Y: 16-bit index register X and Y are used for indexed addressing X is preferred, usually, because addressing with Y is slower and takes 1 extra byte of object code than with X Cont. Programmer’s Model Operations on index registers: o Simple operations (INC, DEC, and ADD from B) can be performed o More complex operations are done by exchanging the index register and the D register, doing some computation, and then exchanging the values again o X or Y is often loaded with the base address of the I/O register address space ($1000) Cont. Programmer’s Model • SP: 16-bit stack pointer Stack may be anywhere in the 64 Kbyte address space The stack grows downward in memory (i.e., a push decrements SP) Cont. Programmer’s Model • PC: 16-bit Program Counter • CCR: -bit Condition Code Register o H, N, Z, V, C: rithmetic status bits N: Negative result Z: Zero result V: Overflow result C: Carry out from operation H: Carry from low nibble (4 bits) of accumulator o S: Stop bit disabled =1 disables STOP instruction =1 after processor reset Cont… Programmer’s Model o I: Interrupt mask =1 masks all maskable interrupts (not XIRQ) =1 after processor reset o X: XIRQ interrupt mask =1 masks XIRQ =1 after processor reset (must be cleared just after reset) Overview of the 68HC11 instruction set • The instruction set specifies the kinds of data transfers and transformations that can occur in the machine • Instructions can be grouped into 5 broad categories o Data transfers: instructions that move data to and between registers o Logical: instructions that perform logic operations on data --AND, OR, etc. o Arithmetic: addition, subtraction, increment, etc. o Flow control: instructions that change the sequence of execution of a program --conditional and unconditional branches, stack operations, etc. o Input / Output operations Cont. Overview of the 68HC11 instruction set • An instruction generally consists of an opcode and some operand(s) • HC11 instructions are of different lengths (1 to 5 bytes) • The instruction set is summarized in Table A.1 of the text, Appendix A of the HC11 Reference Manual, and M68HC11 E Series Programming Reference Guide o Lists instruction mnemonic, brief description of the operation, addressing modes available, machine code format of the instruction, timing information, and effect on condition code registers Cont. Overview of the 68HC11 instruction set Cont. Overview of the 68HC11 instruction set • Opcode construction o In general, an n-bit opcode is capable of specifying any one of 2n instructions o With 8-bit opcodes, 256 distinct instructions are possible o 68HC11 has more than 300 actual instructions 145 "basic" instructions plus “addressing variations” 1 or 2 bytes of storage specify the opcode! • 1-byte opcodes o Most opcodes use just 1 byte o Downward compatible with 6801 Cont. Overview of the 68HC11 instruction set • 2-byte opcodes o Most 2-byte instructions deal with register Y, which was not present in the 6801 processor o It takes longer to fetch and execute 2-byte opcodes o New instructions use a "pre-byte", which signals that another opcode byte follows: $18, $1A, or $CD Ex. INX $08 INY $18 $08 Cont. Overview of the 68HC11 instruction set • Instruction format o An instruction is made up of an opcode and a set of operands Opcode may be one or two bytes Instructions may use 0, 1, 2, or 3 operands • Operands may be 1 or 2 bytes o Instruction lengths range from 1 to 5 bytes o Example (assume this is stored at address $E000): LDAA #$FF ; load ACCA with the ; Value $FF Machine code: $E000 $86 $E001 $FF Cont. Overview of the 68HC11 instruction set • Fetch/Execute operation: LDAA #$FF First clock cycle Cont. Overview of the 68HC11 instruction set • Fetch/Execute operation: LDAA #$FF Second clock cycle Addressing modes • How does the instruction specify the location of data? • The HC11 supports 5 different addressing modes o Inherent Addressing Operands are specified implicitly in the opcode itself Operands are contained in the registers instead of memory Instruction length: or 2 bytes Examples: • Register increment, clears CLRA • Register shift operations ASLA • Register additions ABA Cont. Addressing modes • How does the instruction specify the location of data? • The HC11 supports 5 different addressing modes o Inherent Addressing Operands are specified implicitly in the opcode itself Operands are contained in the registers instead of memory Instruction length: or 2 bytes Examples: • Register increment, clears CLRA • Register shift operations ASLA • Register additions ABA Cont. Addressing modes • Immediate addressing One operand is included as part of the instruction word Other operand (if needed) comes from an implied register Instruction length: 2 -4 bytes Specified operand is a constant and cannot be altered at run time Mode is denoted by a # before the operand value Example: LDAA #$05 $86 $05 Cont. Addressing mode • Direct addressing The operand included in the instruction word is a memory address, specifying where the data is located Second operand is an implied register Instruction length: 2 -4 bytes Since an address is specified, the data value itself can be changed during program execution • Address is a constant Address included in the instruction word is only 1 byte • Direct addressing can only be used to reference locations $0000 --$00FF --256 locations Example: LDAA 05 $96 $05 Cont. Addressing mode • Extended addressing Same as direct addressing, but with 2 bytes of address --the full range of addresses can be specified ($0000 to $FFFF) Instruction length: 3 or 4 bytes Example: LDAA $0005 $B6 $00 $05 Why have both modes? Cont. Addressing mode • Indexed addressing The effective address of the data in memory is computed as the sum of the value contained in an index register (X or Y) and an offset (contained in the instruction word) The offset is a 1-byte unsigned quantity » Useful for table and array access Eg. DAA $56,X $A6 56 Cont. Addressing mode • Relative addressing Similar to indexed addressing uses PC value instead of the value in X or Y Instruction's offset value is added to the value in the program counter to give the address of the next instruction Used to specify branch addresses resulting from jump commands Offset is an 8-bit 2's complement number --ranges from -128 to +127 decimal Basic tour of the instruction set • Load Instructions o o o o Transfer data from memory to register LDAA, LDAB, LDD, LDX, LDY, LDS Different addressing modes supported Assume the following memory contents: 0050 40 41 42 43 44 45 46 47 -48 49 4a 4b 4c 4d 4e 4f 2000 50 51 52 53 54 55 56 57 -58 59 5a 5b 5c 5d 5e 5f LDAA LDAB LDAA LDD #$56 $56 $2000 $2002 ; ; ; ; ACCA$56 (immediate) ACCB = $46 (direct) ACCA = $50 (extended) ACCD = $5253 (extended) Cont. Basic tour of the instruction set LDX #$2000 LDAA $C, X LDY #$56 LDAB 0, Y LDX $5, X ; CCA = $52, ACCB = $53 ; IX = $2000 (immediate) ; ACCA = $5C (indexed) ; IY = $56 (immediate) ; ACCB = $46 (indexed) ; IX = ? (indexed) • Store Instructions o Transfer data from register to memory o STAA, STAB, STD, STX, STY, STS o Direct, extended, or indexed addressing No immediate addressing Cont. Basic tour of the instruction set • Transfer Instructions o Transfer data from register to register TAB ; ACCA � ACCB TBA ; ACCB � ACCA TAP ; ACCA � CCR TPA ; CCR � ACCA TXS ; IX � SP TSX ; SP � IX TYS ; IY � SP TSY ; SP � IY XGDX ; IX � ACCD XDGY ; IY � ACCD Cont. Basic tour of the instruction set • Increment Instructions INC opr INCA INCB INX INY INS • Decrement Instructions DEC opr DECA DECB Cont. Basic tour of the instruction set DEX DEY DES • Clear Instructions CLR opr CLRA Rotate Instructions o Shifts all 8 bits plus the Carry bit circularly one position. ROL opr ROLA ROLB Cont. Basic tour of the instruction set ROR opr RORA RORB o Note: 9 rotates puts data back in original position (not 8 as stated in text) • Rotate Instructions Example Assume C = 1, ACCA = $3B Cont. Basic tour of the instruction set • Shift Instructions o Logical Shifts LSL opr LSLA LSLB LSLD LSR opr LSRA LSRB LSRD Cont. Basic tour of the instruction set • Shift Instructions o Arithmatic Shifts ASL opr ASLA ASLB ASLD ASR opr ASRA ASRB ASRD ASR preserves sign bit ASL/ASR can be used to multiply/divide by 2 What is the difference between ASL and LSL? Cont. Basic tour of the instruction set • Logical Instructions o Bit-wise AND ANDA opr ANDB opr o Bit-wise OR ORA opr ORB opr o Bit-wise Exclusive-OR EORA opr EORB opr Cont. Basic tour of the instruction set o 1’s Complement COM opr COMA COMB • Arithmetic Instructions o Add instructions ABA ; ACCA + ACCB � ACCA ADDA opr ; ACCA + M � ACCA ADDB opr ; ACCB + M � ACCB ADDD opr ; ACCD + M � ACCD ADCA opr ; ACCA+ M+ C � ACCA Cont. Basic tour of the instruction set ABX ; IX + ACCB � IX ABY ; IY + ACCB � IY o Subtract Instructions SBA ; ACCA -ACCB � ACCA SUBA opr ; ACCA -M � ACCA SUBB opr ; ACCB -M � ACCB SUBD opr ; ACCD -M � ACCD SBCA opr ; ACCA -M -C � ACCA SBCB opr ; ACCB -M -C � ACCB Cont. Basic tour of the instruction set • Arithmetic Instructions o Unsigned arithmetic Numbers range from $00 to $FF (0 to 255) The carry bit (C) is set if result is outside range o Signed arithmetic Numbers range from $80 to $7f (-128 to +127) The overflow bit (V) is set if result is outside range The negative bit (N) is set if result is negative (same as MSB of result) Cont. Basic tour of the instruction set • Arithmetic instructions o The same instructions are used for both signed and unsigned arithmetic The CPU does not care whether the values are signed or unsigned • The arithmetic result is the same for both cases • C, V, and N bits are set based on Boolean combinations of the operands Programmer must keep track of whether values are signed or unsigned • Whether to use the C or V bit to check for overflow Cont. Basic tour of the instruction set • Arithmetic Instructions o Example: Add $56 + $B0 • Unsigned: $56 + $B0 = $106 (86 + 176 = 262) • Signed: $56 + $B0 = $06 (86 + (-80) = 6) LDAA #$56 LDAB #$B0 ABA ;ACCA = $06, C = 1, V = 0 o Example: Add $56 to $60 • Unsigned: $56 + $60 = $B6 (86 + 96 = 182) • Signed: $56 + $60 = $B6 (86 + 96 = -74!!!) Cont. Basic tour of the instruction set LDAA #$56 LDAB #$60 ABA ;ACCA = $B6, C = 0, V = 1 • Multiplication o MUL instruction Multiplies 8-bit unsigned values in ACCA and ACCB, then puts the 16-bit result in ACCD • Note that this overwrites ACCA and ACCB! o If you’re multiplying by a power of 2, you may want to use ASL instructions instead Why? Cont. Basic tour of the instruction set • Binary Fractions o Multiplying two 8-bit numbers gives 16-bit result. What if you only want 8 bits? o Different ways to interpret 8-bit numbers Unsigned integers 0 –255 Signed integers -128 -+127 Binary fractions 0 -1 • $00 = 0/256 = 0 • $80 = 128/256 = 0.5 • $FF = 255/256 = 0.9961 o You can use the ADCA instruction after a MUL to convert 16bit result to 8-bit binary fraction MUL sets C to 1 if bit 7 of ACCB is 1 Cont. Basic tour of the instruction set • Binary Fractions o Example: Multiply $20 x $35 (32 x 53 in decimal) Unsigned integers: • $20 x $35 = 32 x 53 = 1696 = $6A0 LDAA #$20 LDAB #$35 MUL ; ACCD = $06A0, C = 1 ; ACCA=$06, ACCB=$A0 Binary fractions: • (32 / 256) x (53 / 256) = 1696 / 65,536 Cont. Basic tour of the instruction set = 6.625 / 256 = 7 / 256 LDAA #$20 LDAB #$35 MUL ; ACCD = $06A0, C = 1 ADCA #$00 ; now ACCA = $07 • Integer Division o IDIV Divides 16-bit unsigned integer in ACCD by 16-bit unsigned integer in IX Puts quotient in IX, remainder in ACCD o Example: 6 / 4 Cont. Basic tour of the instruction set LDD #$6 ; ACCD = $6 LDX #$4 ; IX = $4 IDIV ; IX = $1, ACCD = $2 o Note: IDIV takes 41 cycles to execute You can use ASR instructions to divide by powers of 2 o Only gives you the quotient, not the remainder o Divide by zero IX set to $FFFF, C set to 1 • Fractional Division o FDIV Divides 16-bit binary fraction in ACCD by 16-bit fraction in IX • 16-bit values between 0 and 1 Cont. Basic tour of the instruction set • 16-bit values between 0 and 1 Puts quotient in IX, remainder in ACCD Often used to convert remainder from IDIV into a fraction Example: 6/4 LDD #$6 LDX #$4 IDIV ; IX = $1, ACCD = $2 STX Somewhere ; store quotient LDX #$4 ; reload denominator FDIV ; IX = $8000, ACCD = $0 ; (Note $8000 = 0.5) Cont. Basic tour of the instruction set • Floating point numbers o Used to increase the range of number representation past that of integer formats o Due to 8-bit CPU, IEEE floating point standard is not supported on the HC11 o Motorola has a non-standard format o Floating point routines can be downloaded from the Motorola web site if you need these for projects (you will not need them for the labs) • CCR Operations CLC CLV SEC SEV ; ; ; ; clear the clear the set the C set the V C bit V bit bit bit Cont. Basic tour of the instruction set o Can use SEC and CLC to set up the C bit prior to rotate instructions, for example • “No Operation” Instruction NOP o Does nothing but increment the PC o Why would you need this? • Compare Instructions o Compares two registers, or a register and a memory location/immediate value Subtracts the two values o Sets N, Z, V, C condition codes o Does not change operands Cont. Basic tour of the instruction set CBA ; ACCA -ACCB CMPA opr ; ACCA -M CMPB opr ; ACCB –M CPD opr ; ACCD -M CPX opr ; IX -M CPY opr ; IY -M • Can be used to check if two values are equal, greater than/less than, etc. Often used before conditional branch instruction • Compare Instructions • Example: Assume the 16-bit value $5100 is stored at memory location $2000: LDAA #$50 Cont. Basic tour of the instruction set • Bit Set/Clear Instructions o Used to set or clear multiple bits in a memory location BSET opr mask BCLR opr mask o 1’s in mask specify which bits are set or cleared. Other bits are unaffected. o Example: Assume IX = $20, memory location $34 contains the value $1A BSET $14,X $31 ; now location $34 = $3B BCLR $34 $1C ; now location $34 = $23 • Bit Test Instructions Cont. Basic tour of the instruction set • Bit Test Instructions o Performs logical AND and modifies condition codes N and Z (V is always cleared, C is unaffected) o Does not modify the operands BITA opr BITB opr o Example: Assume location $2000 contains the value $1A LDAA #$3F LDAB #$05 BITA #$03 ; N=0, Z=0 BITB $2000 ; N=0, Z=1 Cont. Basic tour of the instruction set • Flow control with looping and branching o Flow control is the process of Making decisions Performing operations in sequence Repeating identical operations • Fig 2.21 Flow control mechanisms Cont. Basic tour of the instruction set • Relative addressing o Offset is added to the PC to cause the branch o 8-bit offset Range is -128 to +127 o Destination address is actually relative to the address following the branch instruction Why? o Calculating destination addresses: PCnew = PCold + T + rel PCold is address of branch instruction PCnew is destination address rel is the relative address T is 2 for most instructions Cont. Basic tour of the instruction set o T = 4 for BRCLR, BRSET with indexed addressing using IX o T = 5 for BRCLR, BRSET with indexed addressing using IY • Relative addressing o The assembler usually handles the calculation of relative addresses In your program, put a label on the destination instruction, and then the branch instruction can reference the label o Example: ORG $B600 Label: LDAA $100 INCA STAA $100 BRA Label ; ; ; ; get current val increment it store updated val repeat Cont. Basic tour of the instruction set Object code: B600 B6 01 00 B603 4C B604 B7 01 00 B607 20 F7 • Conditional branching o Here, the branch instruction checks if a (specified) condition is true or false Uses condition codes in CCR o Use branch instruction after setting the condition codes If it is true, branch to target address If false --no branch, continue execution at the next instruction o Uses only relative addressing to specify the target address Cont. Basic tour of the instruction set Limited to 8-bit relative offset Textbook shows a way to combine a conditional branch with a JMP to overcome this limit • Conditional Branching o Simple conditional branches BCS rel ; branch if C=1 BCC rel ; branch if C=0 BMI rel ; branch if N=1 BPL rel ; branch if N=0 BVS rel ; branch if V=1 BVC rel ; branch if V=0 BEQ rel ; branch if Z=1 BNE rel ; branch if Z=0 Cont. Basic tour of the instruction set • Conditional Branching o Signed branches Use when working with signed values Branches are based on N, Z, and V bits only BGT rel ; greater than BLT rel ; less than BGE rel ; greater than or equal BLE rel ; less than or equal BEQ rel ; equal BNE rel ; not equal • Conditional Branching o Unsigned branches Use when working with unsigned values Branches based on C and Z condition codes Cont. Basic tour of the instruction set Note that Motorola uses the terms “greater than” and “less than” to refer to signed values, and “higher” and “lower” to refer to unsigned values BHI rel ; higher BHS rel ; higher or same (same as BCC) BLO rel ; lower (same as BCS) BLS rel ; lower or same BEQ rel ; equal BNE rel ; not equal Conditional branching can also be based on bit values in a particular memory value o Format: BRCLR opr mask rel BRSET opr mask rel Cont. Basic tour of the instruction set o opr is the memory address (direct or indexed addressing is used) o mask identifies the bits to check (set to 1, others are 0) in an AND format o rel is the relative branch address o Example: BRSET $10 $05 new Branch to address "new" if bits 0 and 2 of the value stored at location $10 are both 1 • Fetch/Execute Operation o BNE LOOP o First clock cycle Cont. Basic tour of the instruction set Cont. Basic tour of the instruction set • Fetch/Execute Operation o BNE OOP o Second clock cycle Cont. Basic tour of the instruction set • Fetch/Execute Operation o BNE OOP o Third clock cycle o New PC = $E012 + $FFF6 = $E008 Cont. Basic tour of the instruction set o How do we stop a program once its execution is finished? o What happens at the "end" of our program? • STOP o This instruction stops the execution by disabling all system clocks and putting the system in a minimum-power standby mode o Only ways to recover from a STOP are: Perform a system RESET* Generate a valid system interrupt o Avoid using this –catastrophic • BRA $ or BRA * o Used in our text's examples Cont. Basic tour of the instruction set o Infinite loop branching back on itself o $ (or *) denotes "current" address (location of BRA instruction) o Program never really terminates, so use with caution • SWI o This instruction causes a software generated interrupt to occur o Upon occurrence, can jump to a location in memory and execute what's found there o Some systems use this approach to return to a monitor routine after program execution is finished