- •Chapter 1. Introduction
- •How to Develop A Program
- •What is an Assembler?
- •Modular Programming
- •Modular Program Development Process
- •Segments, Modules, and Programs
- •Translate and Link Process
- •Filename Extensions
- •Program Template File
- •Chapter 2. Architecture Overview
- •Memory Classes and Memory Layout
- •Classic 8051
- •Extended 8051 Variants
- •Philips 80C51MX
- •Intel/Atmel WM 251
- •CPU Registers
- •CPU Registers of the 8051 Variants
- •CPU Registers of the Intel/Atmel WM 251
- •Program Status Word (PSW)
- •Instruction Sets
- •Opcode Map
- •8051 Instructions
- •Additional 251 Instructions
- •Additional 80C51MX Instructions via Prefix A5
- •Chapter 3. Writing Assembly Programs
- •Assembly Statements
- •Directives
- •Controls
- •Instructions
- •Comments
- •Symbols
- •Symbol Names
- •Labels
- •Operands
- •Special Assembler Symbols
- •Immediate Data
- •Memory Access
- •Program Addresses
- •Expressions and Operators
- •Numbers
- •Characters
- •Character Strings
- •Location Counter
- •Operators
- •Expressions
- •Chapter 4. Assembler Directives
- •Introduction
- •Segment Directives
- •Location Counter
- •Generic Segments
- •Stack Segment
- •Absolute Segments
- •Default Segment
- •SEGMENT
- •RSEG
- •BSEG, CSEG, DSEG, ISEG, XSEG
- •Symbol Definition
- •CODE, DATA, IDATA, XDATA
- •esfr, sfr, sfr16, sbit
- •LIT (AX51 & A251 only)
- •Memory Initialization
- •DD (AX51 & A251 only)
- •Reserving Memory
- •DBIT
- •DSW (AX51 & A251 only)
- •DSD (AX51 & A251 only)
- •Procedure Declaration (AX51 & A251 only)
- •PROC / ENDP (AX51 & A251 only)
- •LABEL (AX51 and A251 only)
- •Program Linkage
- •PUBLIC
- •EXTRN / EXTERN
- •NAME
- •Address Control
- •EVEN (AX51 and A251 only)
- •USING
- •Other Directives
- •_ _ERROR_ _
- •Chapter 5. Assembler Macros
- •Standard Macro Directives
- •Defining a Macro
- •Parameters
- •Labels
- •Repeating Blocks
- •REPT
- •IRPC
- •Nested Definitions
- •Nested Repeating Blocks
- •Recursive Macros
- •Operators
- •NUL Operator
- •& Operator
- •< and > Operators
- •% Operator
- •;; Operator
- •! Operator
- •Invoking a Macro
- •C Macros
- •C Macro Preprocessor Directives
- •Stringize Operator
- •Predefined C Macro Constants
- •Examples with C Macros
- •C Preprocessor Side Effects
- •Chapter 6. Macro Processing Language
- •Overview
- •Creating and Calling MPL Macros
- •Creating Parameterless Macros
- •MPL Macros with Parameters
- •Local Symbols List
- •Macro Processor Language Functions
- •Comment Function
- •Escape Function
- •Bracket Function
- •METACHAR Function
- •Numbers and Expressions
- •Numbers
- •Character Strings
- •SET Function
- •EVAL Function
- •Logical Expressions and String Comparison
- •Conditional MPL Processing
- •IF Function
- •WHILE Function
- •REPEAT Function
- •EXIT Function
- •String Manipulation Functions
- •LEN Function
- •SUBSTR Function
- •MATCH Function
- •Console I/O Functions
- •Advanced Macro Processing
- •Literal Delimiters
- •Blank Delimiters
- •Identifier Delimiters
- •Literal and Normal Mode
- •MACRO Errors
- •Chapter 7. Invocation and Controls
- •Environment Settings
- •Running Ax51
- •ERRORLEVEL
- •Output Files
- •Assembler Controls
- •Controls for Conditional Assembly
- •Conditional Assembly Controls
- •Chapter 8. Error Messages
- •Fatal Errors
- •Non–Fatal Errors
- •Chapter 9. Linker/Locator
- •Overview
- •Combining Program Modules
- •Segment Naming Conventions
- •Combining Segments
- •Locating Segments
- •Overlaying Data Memory
- •Resolving External References
- •Absolute Address Calculation
- •Generating an Absolute Object File
- •Generating a Listing File
- •Bank Switching
- •Using RTX51, RTX251, and RTX51 Tiny
- •Linking Programs
- •Command Line Examples
- •Control Linker Input with µVision2
- •ERRORLEVEL
- •Output File
- •Linker/Locater Controls
- •Locating Programs to Physical Memory
- •Classic 8051
- •Extended 8051 Variants
- •Philips 80C51MX
- •Intel/Atmel WM 251
- •Data Overlaying
- •Program and Data Segments of Functions
- •Using the Overlay Control
- •Tips and Tricks for Program Locating
- •Locate Segments with Wildcards
- •Special ROM Handling (LX51 & L251 only)
- •Bank Switching
- •Common Code Area
- •Code Bank Areas
- •Bank Switching Configuration
- •Configuration Examples
- •Control Summary
- •Listing File Controls
- •Output File Controls
- •Segment and Memory Location Controls
- •High-Level Language Controls
- •Error Messages
- •Warnings
- •Non-Fatal Errors
- •Fatal Errors
- •Exceptions
- •Chapter 10. Library Manager
- •Using LIBx51
- •Interactive Mode
- •Create Library within µVision2
- •Command Summary
- •Creating a Library
- •Adding or Replacing Object Modules
- •Removing Object Modules
- •Extracting Object Modules
- •Listing Library Contents
- •Error Messages
- •Fatal Errors
- •Errors
- •Chapter 11. Object-Hex Converter
- •Using OHx51
- •OHx51 Command Line Examples
- •Creating HEX Files for Banked Applications
- •OHx51 Error Messages
- •Using OC51
- •OC51 Error Messages
- •Intel HEX File Format
- •Record Format
- •Data Record
- •Extended 8086 Segment Record
- •Extended Linear Address Record
- •Example Intel HEX File
- •Appendix A. Application Examples
- •ASM – Assembler Example
- •Using A51 and BL51
- •Using AX51 and LX51
- •Using A251 and L251
- •CSAMPLE – C Compiler Example
- •Using C51 and BL51
- •Using C51 and LX51
- •Using C251 and L251
- •BANK_EX1 – Code Banking with C51
- •Using C51 and BL51
- •Using C51 and LX51
- •BANK_EX2 – Banking with Constants
- •Using C51 and BL51
- •Using C51 and LX51
- •Using BL51
- •Using C51 and LX51
- •Philips 80C51MX – Assembler Example
- •Philips 80C51MX – C Compiler Example
- •Appendix B. Reserved Symbols
- •Appendix C. Listing File Format
- •Assembler Listing File Format
- •Listing File Heading
- •Source Listing
- •Macro / Include File / Save Stack Format
- •Symbol Table
- •Listing File Trailer
- •Appendix D. Assembler Differences
- •Differences Between A51 and A251/AX51
- •Differences between A51 and ASM51
- •Differences between A251/AX51 & ASM51
- •Glossary
- •Index
82 |
Chapter 3. Writing Assembly Programs |
|
|
Program Addresses
Program addresses are absolute or relocatable expressions with the memory class CODE or ECODE. Typically program addresses are used in jump and call instructions. For indirect jumps or calls it is required to load a program address in a register or a jump table. The following jumps and calls are possible:
SJMP Relative jumps include conditional jumps (CJNE, DJNZ, JB, JBC, JZ JC, …) and the unconditional SJMP instruction. The addressable offset JNZ is –128 to +127 bytes from the first byte of the instruction that follows
…the relative jump. When you use a relative jump in your code, you must
use an expression that evaluates to the code address of the jump 3 destination. The assembler does all the offset computations. If the
address is out of range, the assembler will issue an error message.
ACALL In-block jumps and calls permit access only within a 2KByte block of AJMP program space. The low order 11 bits of the program counter are
replaced when the jump or call is executed. For Dallas 390 contiguous mode the block size is 512KB or 19 bits. If ACALL or AJMP is the last instruction in a block, the high order bits of the program counter change and the jump will be within the block following the ACALL or
AJMP.
LCALL Long jumps and calls allow access to any address within a 64KByte LJMP segment of program space. The low order 16 bits of the program
counter are replaced when the jump or call is executed. For Dallas 390 contiguous mode: the block size is 16MB or 24 bits. One Philips 80C51MX and Intel/Atmel WM 251: if LCALL or LJMP is the last instruction in a 64KByte segment, the high order bits of the program counter change and the jump will into the segment following the
LCALL or LJMP.
ECALL Extended jumps and calls allow access within the extended program EJMP space of the Intel/Atmel WM 251 or Philips 80C51MX.
CALL Generic jumps and calls are two instruction mnemonics that do not JMP represent a specific opcode. JMP may assemble to SJMP, AJMP,
LJMP or EJMP. CALL may assemble to ACALL, LCALL or
ECALL. These generic mnemonics always evaluate to an instruction, not necessarily the shortest, that will reach the specified program
Shaded directives and options are available only in AX51 and A251.
Keil Software — A51/AX51/A251 Macro Assembler and Utilities |
83 |
|
|
address operand.
Example for all 8051 Variants
EXTRN CODE (my_function)
|
CSEG |
AT |
3 |
|
|
|
JMP |
ext_int |
; an interrupt vector |
|
|
?PR?myintr SEGMENT |
CODE |
|
; define a segment for program code |
|
|
|
RSEG |
?PR?myintr |
|
|
|
ext_int: |
JB |
FLAG,flag_OK |
|
|
|
|
INC |
my_var |
|
|
|
flag_OK: |
CPL |
FLAG |
|
|
|
|
RETI |
|
|
|
|
?PR?myprog SEGMENT CODE INBLOCK |
; a segment within a 2K block |
3 |
|||
|
RSEG |
?PR?myprog |
|
||
func1: |
CALL |
sub_func |
; will generate ACALL |
||
loop: |
CALL |
my_function |
; external function -> LCALL |
|
|
|
MOV |
A,my_var |
|
|
|
|
|
|
|||
|
JNZ |
loop |
|
|
|
|
RET |
|
|
|
|
sub_func: |
CLR |
FLAG |
|
|
|
|
MOV |
R0,#20 |
|
|
|
loop1: |
CALL |
my_function |
|
|
|
|
DJNZ |
R0,loop1 |
|
|
|
|
RET |
|
|
|
|
Example with EJMP, ECALL for Philips 80C51MX and Intel/Atmel WM 251
EXTRN ECODE:FAR (my_farfunc)
Reset |
EQU |
ECODE 0FF0000H |
; Reset location on 251 |
?PR?my_seg SEGMENT |
ECODE |
; define a SEGMENT of class EDATA |
|
|
RSEG |
?PR?my_seg |
|
func1 |
PROC |
FAR |
; far function called with ECALL |
|
CALL |
func2 |
; generates LCALL |
|
CALL |
my_farfunc |
; generates ECALL |
|
JNB |
Flag,mylab |
|
|
EJMP |
Reset |
|
mylab: |
ERET |
|
|
|
ENDP |
|
|
func2 |
PROC |
NEAR |
|
|
CALL |
my_farfunc |
; generates ECALL |
|
RET |
|
|
|
ENDP |
|
|
Shaded directives and options are available only in AX51 and A251.