1 / 24

Microcontroller Assembly Programming Guide

Learn the top assembly instructions, data organization, and programming concepts for microcontroller design using HCS12.

tbolinger
Download Presentation

Microcontroller Assembly Programming Guide

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. ECE 372 – Microcontroller DesignAssembly Programming • HCS12 Assembly Programming • Basic Assembly Programming • Top Assembly Instructions (Instruction You Should Know!) • Assembly Programming Concepts • Data Organization

  2. ECE 372 – Microcontroller DesignAssembly Programming • HCS12 Assembly Instructions • Load and Store Instructions • Arithmetic Operations • Logic Operations • Branch Instructions • Shift and Rotation Operation • Bit tests and Bit manipulations • Stack and Index Pointer Operations • Condition Code Register Instructions • Subroutine Calls • Interrupt Handling Operations • Miscellaneous Operations

  3. ECE 372 – Microcontroller DesignAssembly Programming – Top Assembly Instructions • Load and Store Instructions • ldaa/ldab/ldd - Load A/B/D from memory (or immediate value) • ldx/ldy - Load Index Register X/Y from memory (or immediate value) • lds - Load Stack Pointer (SP) from memory (or immediate value) • staa/stab/std - Store A/B/D to memory • stx/sty – Store Index Register X/Y to memory • sts – Store Stack Pointer (SP) to memory

  4. ECE 372 – Microcontroller DesignAssembly Programming – Top Assembly Instructions • Arithmetic Operations • adda/addb/addd – Add memory (or immediate value) to A/B/D • suba/subb/subd – Subtract memory (or immediate value) from A/B/D • aba – Add B to A • sba – Subtract B from A • inca/incb/inx/iny – Increment A/B/X/Y • e.g. A = A + 1 • deca/decb/dex/dey – Decrement A/B/X/Y • e.g. A = A - 1

  5. ECE 372 – Microcontroller DesignAssembly Programming – Top Assembly Instructions • Arithmetic Operations • cmpa/cmpb/cpd/cpx/cpy – Compare A/B/D/X/Y with memory (or immediate value) • Branch follows (e.g. greater, less, equal) • mul – Performs 8-bit unsigned multiplication of A and B, storing 16-bit result in D • e.g. D = A * B • idiv – Performa 16-bit unsigned division of D and Y, storing quotient in X and remainder in D • e.g. X = D / X and D = D % X

  6. ECE 372 – Microcontroller DesignAssembly Programming – Top Assembly Instructions • Logic Operations • anda/andb – Perform 8-bit logical AND of A/B with memory (or immediate value) • oraa/orab – Perform 8-bit logical OR of A/B with memory (or immediate value) • eora/eorb – Perform 8-bit logical XOR of A/B with memory (or immediate value) • bset/bclr – Set/Clear bit in memory using provided mask • bita/bitb – Performs 8-bit logical AND of A/B with memory (or immediate value) and modifies CCR • Contents of A/B or the memory location are not affected

  7. ECE 372 – Microcontroller DesignAssembly Programming – Top Assembly Instructions • Branch Instructions (Unsigned/Signed) • beq – Branch if equal (Relative PC Addressing) • bne – Branch if not equal (Relative PC Addressing) • bra – Branch always (Relative PC Addressing) • jmp – Branch always (Absolute Addressing)

  8. ECE 372 – Microcontroller DesignAssembly Programming – Top Assembly Instructions • Branch Instructions (Unsigned) • bhi – Branch if higher (Relative PC Addressing) • i.e. unsigned greater than • bhs – Branch if higher or same (Relative PC Addressing) • i.e. unsigned greater than or equal • blo – Branch if lower (Relative PC Addressing) • i.e. unsigned less than • bls – Branch if lower or same (Relative PC Addressing) • i.e. unsigned less than or equal

  9. ECE 372 – Microcontroller DesignAssembly Programming – Top Assembly Instructions • Branch Instructions (Signed) • bgt – Branch if greater than (Relative PC Addressing) • bge – Branch if greater than of equal (Relative PC Addressing) • blt – Branch if less than (Relative PC Addressing) • ble – Branch if less than or equal (Relative PC Addressing) • bmi – Branch if minus (Relative PC Addressing) • i.e. negative result • bpl – Branch if plus (Relative PC Addressing) • i.e. positive result

  10. ECE 372 – Microcontroller DesignAssembly Programming – Top Assembly Instructions • Long Branch Instructions • Similar to other branch instructions • PC relative addressing • But with 16-bit relative address • Few Examples: • lbra – Branch always (Long Relative PC Addressing) • lbeq – Branch if equals (Long Relative PC Addressing) • lbgt – Branch if greater than (Long Relative PC Addressing)

  11. C 7 6 5 4 3 2 1 0 Rotate Left: ECE 372 – Microcontroller DesignAssembly Programming – Top Assembly Instructions • Shift and Rotate Operations • rola/rolb – Rotate left A/B through carry (C) • rora/rorb – Rotate right A/B through carry (C)

  12. ECE 372 – Microcontroller DesignAssembly Programming – Top Assembly Instructions • Shift and Rotate Operations • lsla/lslb/lsld – Logical shift left A/B/D into carry (C) • Same as asla/aslb/asld instructions • Least significant bit is loaded with 0 • Also performs multiply by 2 • lsra/lsrb/lsrd – Logical shift right A/B/D into carry (C) • NOT the same asra/asrb/asrd • Most significant bit is loaded with 0 • Also performs unsigned divide by 2 C 7 6 5 4 3 2 1 0 0 Logical Shift Left: 7 6 5 4 3 2 1 0 C 0 Logical Shift Right:

  13. ECE 372 – Microcontroller DesignAssembly Programming – Top Assembly Instructions • Shift and Rotate Operations • asla/aslb/asld – Arithmetic shift left A/B/D into carry (C) • Same as lsla/lslb/lsld instructions • Least significant bit is loaded with 0 • Also performs multiply by 2 • asra/asrb/asrd – Arithmetic shift right A/B/D into carry (C) • NOT the same lsra/lsrb/lsrd • Most significant bit is loaded with previous most significant bit value • Also performs unsigned/signed divide by 2 7 6 5 4 3 2 1 0 C Arithmetic Shift Right:

  14. If Cond. cond If Body !cond ECE 372 – Microcontroller DesignAssembly Programming – Programming Concepts If-Then C Code: if(cond) { // if body } If-Then Assembly Template: cmp?? ; If Cond. b?? EndIf ; Branch !cond ; If Body EndIf:

  15. If Cond. A>=20 If Body !(A>=20) ECE 372 – Microcontroller DesignAssembly Programming – Programming Concepts If-Then C Code: if(a>=20) { // if body } If-Then Assembly Code: cmpa, #20 ; If Cond. (A>=20) blo EndIf ; Branch !(A>=20)=>(A<20) ; If Body EndIf:

  16. If–Else Cond. cond !cond If Body Else Body ECE 372 – Microcontroller DesignAssembly Programming – Programming Concepts If-Then-Else C Code: if(cond) { // if body } else { // else body } If-Then-Else Assembly Template: cmp?? ; If-Else Cond. b?? Else ; Branch !cond ; If Body bra EndIf ; Branch EndIf Else: ; Else Body ; EndIf:

  17. If–Else Cond. A>=20 !(A>=20) If Body Else Body ECE 372 – Microcontroller DesignAssembly Programming – Programming Concepts If-Then-Else C Code: if(a>=20) { // if body } else { // else body } If-Then-Else Assembly Code: cmpa, #20 ; If-Else Cond. (A>=20) blo Else ; Branch !(A>=20)=>(A<20) ; If Body bra EndIf ; Branch EndIf Else: ; Else Body ; EndIf:

  18. Loop Init. Loop Iter. Loop Body Loop Cond. cond !cond ECE 372 – Microcontroller DesignAssembly Programming – Programming Concepts For Loop C Code: for(init; cond; iter) { // loop body } For Loop Assembly Template: ?? ; Loop Init. Loop: cmp?? ; Loop Cond. b?? EndLoop ; Branch !cond ; Loop Body ?? ; Loop Iter. bra Loop ; Repeat Loop EndLoop:

  19. J=0 J++ Loop Body Loop Cond. J<10 !(J<10) ECE 372 – Microcontroller DesignAssembly Programming – Programming Concepts For Loop C Code: for(J=0; J<10; J++) { // loop body } For Loop Assembly Code: ldaa #0 ; Loop Init. (J=0) Loop: cmpa #10 ; Loop Cond. (J<10) bge EndLoop ; Branch !(J<10)=>(J>=10) ; Loop Body adda #1 ; Loop Iter. (J++) bra Loop ; Repeat Loop EndLoop:

  20. Loop Body Loop Cond. cond !cond ECE 372 – Microcontroller DesignAssembly Programming – Programming Concepts While Loop C Code: while(cond) { // loop body } While Loop Assembly Template: Loop: cmp?? ; Loop Cond. b?? EndLoop ; Branch !cond ; Loop Body bra Loop ; Repeat Loop EndLoop:

  21. Loop Body Loop Cond. i!=0 !(i!=0) ECE 372 – Microcontroller DesignAssembly Programming – Programming Concepts While Loop C Code: while(i!=0) { // loop body } While Loop Assembly Code: Loop: cmpa, #0 ; Loop Cond. (i!=0) beq EndLoop ; Branch !(i!=0)=>(i==0) ;Loop Body bra Loop ; Repeat Loop EndLoop:

  22. ECE 372 – Microcontroller DesignAssembly Programming – Data Organization • Data Organization • Global Variables • Constants • Program Code • Local Variables • Return Addresses • Temporary Data

  23. ECE 372 – Microcontroller DesignAssembly Programming – Data Organization • Data Organization • Heap • Block of memory for allocating storage whose lifetime is not related to the execution of the current routine • Often used for dynamically allocated data (malloc) • Typically located at lowest memory address after global varaibles

  24. ECE 372 – Microcontroller DesignAssembly Programming – Data Organization • Data Organization • Stack • Generally – A data structure supporting two basic operations, push and pop • Push – Adds an item to the top of the stack • Pop – Removes an item from the top of the stack • LIFO – Last In First Out data structure (opposite of queue) • Stack Pointer (SP) • Points to memory location corresponding to the top of the stack • Must be initialized within your assembly program

More Related