1 / 27

Chapter 2: HCS12 Assembly Programming

Chapter 2: HCS12 Assembly Programming. The HCS12 Microcontroller. Han-Way Huang. Minnesota State University, Mankato. September 2009. Three Sections of a HCS12/MC9S12 Assembly Program 1. Assembler Directives - Define data and symbol - Reserve and initialize memory locations

nan
Download Presentation

Chapter 2: HCS12 Assembly Programming

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. Chapter 2: HCS12 Assembly Programming The HCS12 Microcontroller Han-Way Huang MinnesotaState University, Mankato September 2009

  2. Three Sections of a HCS12/MC9S12 Assembly Program 1. Assembler Directives - Define data and symbol - Reserve and initialize memory locations - Set assembler and linking condition - Specify output format - Specifies the end of a program. 2. Assembly Language Instructions - HCS12/MC9S12 instructions 3. Comments - Explain the function of a single or a group of instructions

  3. Fields of a HCS12 Instruction 1. Label field - Optional - Starts with a letter and followed by letters, digits, or special symbols (_ or .) - Can start from any column if ended with “:” - Must start from column 1 if not ended with “:” 2. Operation field - Contains the mnemonic of a machine instruction or an assembler directive - Separated from the label by at least one space 3. Operand field - Follows the operation field and is separated from the operation field by at least one space - Contains operands for instructions or arguments for assembler directives 4. Comment field - Any line starts with an * or ; is a comment - Separated from the operand and operation field for at least one space - Optional

  4. Identify the Four Fields of an Instruction Example loop adda #$40 ; add 40 to accumulator A (1) “loop” is a label (2) “adda” is an instruction mnemonic (3) “#$40” is the operand (4) “add #$40 to accumulator A” is a comment movb 0,X,0,Y ; memory to memory copy (1) no label field (b) “movb” is an instruction mnemonic (c) “0,X,0,Y” is the operand field (d) “; memory to memory copy” is a comment

  5. Assembler Directives 1. end - ends a program to be processed by an assembler - any statement following the end directive is ignored 2. org - The assembler uses a location counter to keep track of the memory location where the next machine code byte should be placed. - This directive sets a new value for the location counter of the assembler. The sequence org $1000 ldab #$FF places the opcode byte for the instruction ldab #$FF at location $1000.

  6. dc.b (define constant byte) db (define byte) fcb (form constant byte) - These three directives define the value of a byte or bytes that will be placed at a given location. - These directives are often preceded by the org directive. - For example, org $800 array dc.b $11,$22,$33,$44 dc.w (define constant word) dw (define word) fdb (form double bytes) - Define the value of a word or words that will be placed at a given location. - The value can be specified by an expression. - For example, vec_tabdc.w $1234, abc-20

  7. fcc (form constant character) - Used to define a string of characters (a message). - The first character (and the last character) is used as the delimiter. - The last character must be the same as the first character. - The delimiter must not appear in the string. - The space character cannot be used as the delimiter. - Each character is represented by its ASCII code. - For example, msgfcc “Please enter 1, 2 or 3:”

  8. fill (fill memory) • - This directive allows the user to fill a certain number of memory locations with a given • value. • - The syntax is fill value,count • - For example, • space_linefill $20,40 • ds (define storage) • rmb (reserve memory byte) • ds.b (define storage bytes) • Each of these directives reserves a number of bytes given as the arguments to the • directive. • - For example, • buffer ds 100 • reserves 100 bytes

  9. ds.w (define storage word) rmw (reserve memory word) - Each of these directives increments the location counter by the value indicated in the number-of-words argument multiplied by two. - For example, dbufds.w 20 reserves 40 bytes starting from the current location counter. equ (equate) - This directive assigns a value to a label. - Using this directive makes one’s program more readable. - Examples arr_cntequ 100 oc_cntequ 50

  10. loc - This directive increments and produces an internal counter used in conjunction with the backward tick mark (`). By using the loc directive and the ` mark one can write program segments like the following example, without thinking up new labels: loc loc ldaa #2 ldaa #2 loop` decasame as loop001 deca bne loop` bne loop001 loc loc loop` brclr 0,x,$55,loop` loop002 brclr 0,x,$55,loop002

  11. Macro • A name assigned to a group of instructions • Use macro and endm to define a macro. • Example of macro • sumOf3 macro arg1,arg2,arg3 • ldaa arg1 • adda arg2 • adda arg3 • endm • Invoke a defined macro: write down the name and the arguments of the macro • sumOf3 $1000,$1001,$1002 • is replaced by • ldaa $1000 • adda $1001 • adda $1002

  12. Software Development Process 1Problem definition: Identify what should be done 2Develop the algorithm. Algorithm is the overall plan for solving the problem at hand. - An algorithm is often expressed in the following format: Step 1 … Step 2 … - Another way to express the overall plan is to use flowchart. 3Programming. Convert the algorithm or flowchart into programs. 4Program Testing. 5 Program maintenance.

  13. Symbols of Flowchart

  14. Programs to do simple arithmetic Example 2.4 Write a program to add the values of memory locations at $1000, $1001, and $1002, and save the result at $1100. Solution: Step 1 A  m[$1000] Step 2 A  A + m[$1001] Step 3 A  A + m[$1002] Step 4 $802  A org $1500 ldaa $1000 adda $1501 adda $1002 staa $1100 end

  15. Example 2.4 Write a program to subtract the contents of the memory location at $1005 from the sum of the memory locations at $1000 and $1002, and store the difference at $1100. Solution: org $1500 ldaa $1000 adda $1002 suba $1005 staa $1100 end

  16. Example 2.6 Write a program to add two 16-bit numbers that are stored at $1000-$1001 and $1002-$1003 and store the sum at $1100-$1101. Solution: org $1500 ldd $1000 addd $1002 std $1100 end The Carry Flag - bit 0 of the CCR register - set to 1 when the addition operation produces a carry 1 - set to 1 when the subtraction operation produces a borrow 1 - enables the user to implement multi-precision arithmetic

  17. Example 2.7 Write a program to add two 4-byte numbers that are stored at $1000-$1003 and $1004-$1007, and store the sum at $1010-$1013. Solution: Addition starts from the LSB and proceeds toward MSB. org $1500 ldd $1002 ; add and save the least significant two bytes addd $1006 ; “ std $1012 ; “ ldaa $1001 ; add and save the second most significant bytes adca $1005 ; “ staa $1011 ; “ ldaa $1000 ; add and save the most significant bytes adca $1004 ; “ staa $1010 ; “ end

  18. Example 2.8 Write a program to subtract the hex number stored at $1004-$1007 from the • the hex number stored at $1000-$1003 and save the result at $1100-$1103. • Solution: The subtraction starts from the LSBs and proceeds toward the MSBs. • org $1500 • ldd $1002 ; subtract and save the least significant two bytes • subd $1006 ; “ • std $1102 ; “ • ldaa $1001 ; subtract and save the difference of the second to most • sbca $1005 ; significant bytes • staa $1001 ; “ • ldaa $1000 ; subtract and save the difference of the most significant • sbca $1004 ; bytes • staa $1100 ; “ • end

  19. BCD numbers and addition - Each digit is encoded by 4 bits - Two digits are packed into one byte - The addition of two BCD numbers is performed by a binary addition and an adjust operation using the daa instruction - The instruction daa can be applied after the instructions adda,adca, and aba - Simplifies I/O conversion For example, the instruction sequence ldaa $1000 adda $1001 daa staa $1002 adds the BCD numbers stored at $1000 and $1001 and saves the sum at $1002.

  20. Multiplicationand Division

  21. Example 2.10 Write an instruction sequence to multiply the 16-bit numbers stored at $1000-$1001 and $1002-$1003 and store the product at $1100-$1103. Solution: ldd $1000 ldy $1002 emul sty $1100 std $1102 Example 2.11 Write an instruction sequence to divide the signed 16-bit number stored at $1020-$1021 into the 16-bit signed number stored at $1005-$1006 and store the quotient and remainder at $1100 and $1102, respectively. Solution: ldd $1005 ldx $1020 idivs stx $1100 ; store the quotient std $1102 ; store the remainder

  22. Illustration of 32-bit by 32-bit Multiplication - Two 32-bit numbers M and N are divided into two 16-bit halves M = MHML N = NHNL

  23. Example 2.12 Write a program to multiply two unsigned 32-bit numbers stored at M~M+3 and N~N+3, respectively and store the product at P~P+7. Solution: org $1000 M ds.b 4 N ds.b 4 P ds.b 8 org $1500 ldd M+2 ldy N+2 emul ; compute MLNL sty P+4 std P+6 ldd M ldy N emul ; compute MHNH sty P std P+2 ldd M ldy N+2 emul ; compute MHNL

  24. ; add MHNL to memory locations P+2~P+5 addd P+4 std P+4 tfr Y,D adcb P+3 stab P+3 adca P+2 staa P+2 ; propagate carry to the most significant byte ldaa P+1 adca #0 ; add carry to the location at P+1 staa P+1 ; “ ldaa P ; add carry to the location at P adca #0 ; “ staa P ; “ ; compute MLNH ldd M+2 ldy N emul

  25. ; add MLNH to memory locations P+2 ~ P+5 addd P+4 std P+4 tfr Y,D adcb P+3 stab P+3 adca P+2 staa P+2 ; propagate carry to the most significant byte clra adca P+1 staa P+1 ldaa P adca #0 staa P end

  26. Example 2.13 Write a program to convert the 16-bit number stored at $1000-$1001 to BCD format and store the result at $1010-$1014. Convert each BCD digit into its ASCII code and store it in one byte. Solution: - A binary number can be converted to BCD format by using repeated division by 10. - The largest 16-bit binary number is 65535 which has five decimal digits. - The first division by 10 generates the least significant digit, the second division by 10 obtains the second least significant digit, and so on. org $1000 data dc.w 12345 ; data to be tested org $1010 result ds.b 5 ; reserve bytes to store the result org $1500 ldd data ldy #result ldx #10 idiv addb #$30 ; convert the digit into ASCII code stab 4,Y ; save the least significant digit xgdx ldx #10

  27. idiv adcb #$30 stab 3,Y ; save the second to least significant digit xgdx ldx #10 idiv addb #$30 stab 2,Y ; save the middle digit xgdx ldx #10 idiv addb #$30 stab 1,Y ; save the second most significant digit xgdx addb #$30 stab 0,Y ; save the most significant digit end

More Related