home *** CD-ROM | disk | FTP | other *** search
Text File | 1989-08-25 | 136.0 KB | 4,052 lines |
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ASxxxx Assemblers
-
-
- and
-
-
- ASLINK Relocating Linker
- CHAPTER 1 THE ASSEMBLER 1-1
- 1.1 THE ASXXXX ASSEMBLERS 1-1
- 1.1.1 Assembly Pass 1 1-2
- 1.1.2 Assembly Pass 2 1-2
- 1.1.3 Assembly Pass 3 1-2
- 1.2 SOURCE PROGRAM FORMAT 1-3
- 1.2.1 Statement Format 1-3
- 1.2.1.1 Label Field 1-3
- 1.2.1.2 Operator Field 1-5
- 1.2.1.3 Operand Field 1-5
- 1.2.1.4 Comment Field 1-6
- 1.3 SYMBOLS AND EXPRESSIONS 1-6
- 1.3.1 Character Set 1-6
- 1.3.2 User-Defined Symbols 1-10
- 1.3.3 Local Symbols 1-11
- 1.3.4 Current Location Counter 1-12
- 1.3.5 Numbers 1-14
- 1.3.6 Terms 1-14
- 1.3.7 Expressions 1-15
- 1.4 GENERAL ASSEMBLER DIRECTIVES 1-16
- 1.4.1 .module Directive 1-16
- 1.4.2 .title Directive 1-17
- 1.4.3 .sbttl Directive 1-17
- 1.4.4 .page Directive 1-17
- 1.4.5 .byte and .db Directives 1-17
- 1.4.6 .word and .dw Directives 1-18
- 1.4.7 .blkb, .blkw, and .ds Directives 1-18
- 1.4.8 .ascii Directive 1-18
- 1.4.9 .asciz Directive 1-19
- 1.4.10 .radix Directive 1-19
- 1.4.11 .even Directive 1-20
- 1.4.12 .odd Directive 1-20
- 1.4.13 .area Directive 1-20
- 1.4.14 .org Directive 1-21
- 1.4.15 .globl Directive 1-22
- 1.4.16 .if, .else, and .endif Directives 1-22
- 1.4.17 .include Directive 1-23
- 1.5 INVOKING ASXXXX 1-24
- 1.6 ERRORS 1-25
- 1.7 LISTING FILE 1-26
- 1.8 SYMBOL TABLE FILE 1-27
- 1.9 OBJECT FILE 1-28
-
- CHAPTER 2 THE LINKER 2-1
- 2.1 ASLINK RELOCATING LINKER 2-1
- 2.2 INVOKING ASLINK 2-2
- 2.3 ASLINK PROCESSING 2-3
- 2.4 LINKER INPUT FORMAT 2-4
- 2.4.1 Object Module Format 2-4
- 2.4.2 Header Line 2-5
- 2.4.3 Module Line 2-5
- 2.4.4 Symbol Line 2-5
- 2.4.5 Area Line 2-5
- 2.4.6 T Line 2-6
- 2.4.7 R Line 2-6
-
- CHAPTER 3 BUILDING ASXXXX AND ASLINK 3-1
- 3.1 BUILDING AN ASSEMBLER 3-1
- Page ii
-
-
-
- 3.2 BUILDING ASLINK 3-2
-
- APPENDIX A AS6800 ASSEMBLER A-1
- A.1 .setdp DIRECTIVE A-1
- A.2 6800 REGISTER SET A-1
- A.3 6800 INSTRUCTION SET A-2
- A.3.1 Inherent Instructions A-3
- A.3.2 Branch Instructions A-3
- A.3.3 Single Operand Instructions A-4
- A.3.4 Double Operand Instructions A-5
- A.3.5 Jump and Jump to Subroutine Instructions A-5
- A.3.6 Long Register Instructions A-6
-
- APPENDIX B AS6801 ASSEMBLER B-1
- B.1 .setdp DIRECTIVE B-1
- B.2 .hd6303 DIRECTIVE B-1
- B.3 6801 REGISTER SET B-2
- B.4 6801 INSTRUCTION SET B-2
- B.4.1 Inherent Instructions B-3
- B.4.2 Branch Instructions B-3
- B.4.3 Single Operand Instructions B-3
- B.4.4 Double Operand Instructions B-5
- B.4.5 Jump and Jump to Subroutine Instructions B-5
- B.4.6 Long Register Instructions B-5
- B.4.7 6303 Specific Instructions B-6
-
- APPENDIX C AS6804 ASSEMBLER C-1
- C.1 6804 REGISTER SET C-1
- C.2 6804 INSTRUCTION SET C-1
- C.2.1 Inherent Instructions C-2
- C.2.2 Branch Instructions C-2
- C.2.3 Single Operand Instructions C-2
- C.2.4 Jump and Jump to Subroutine Instructions C-2
- C.2.5 Bit Test Instructions C-2
- C.2.6 Load Immediate data Instruction C-3
- C.2.7 6804 Derived Instructions C-3
-
- APPENDIX D AS6805 ASSEMBLER D-1
- D.1 .setdp DIRECTIVE D-1
- D.2 6805 REGISTER SET D-1
- D.3 6805 INSTRUCTION SET D-2
- D.3.1 Control Instructions D-2
- D.3.2 Bit Manipulation Instructions D-3
- D.3.3 Branch Instructions D-3
- D.3.4 Read-Modify-Write Instructions D-4
- D.3.5 Register\Memory Instructions D-4
- D.3.6 Jump and Jump to Subroutine Instructions D-5
-
- APPENDIX E AS6809 ASSEMBLER E-1
- E.1 .setdp DIRECTIVE E-1
- E.2 6809 REGISTER SET E-1
- E.3 6809 INSTRUCTION SET E-2
- E.3.1 Inherent Instructions E-4
- E.3.2 Short Branch Instructions E-4
- Page iii
-
-
-
- E.3.3 Long Branch Instructions E-4
- E.3.4 Single Operand Instructions E-5
- E.3.5 Double Operand Instructions E-6
- E.3.6 D-register Instructions E-6
- E.3.7 Index/Stack Register Instructions E-6
- E.3.8 Jump and Jump to Subroutine Instructions E-7
- E.3.9 Register - Register Instructions E-7
- E.3.10 Condition Code Register Instructions E-7
- E.3.11 6800 Compatibility Instructions E-7
-
- APPENDIX F AS6811 ASSEMBLER F-1
- F.1 .setdp DIRECTIVE F-1
- F.2 6811 REGISTER SET F-1
- F.3 6811 INSTRUCTION SET F-2
- F.3.1 Inherent Instructions F-3
- F.3.2 Branch Instructions F-3
- F.3.3 Single Operand Instructions F-4
- F.3.4 Double Operand Instructions F-5
- F.3.5 Bit Manupulation Instructions F-5
- F.3.6 Jump and Jump to Subroutine Instructions F-6
- F.3.7 Long Register Instructions F-6
-
- APPENDIX G AS8085 ASSEMBLER G-1
- G.1 8085 REGISTER SET G-1
- G.2 8085 INSTRUCTION SET G-1
- G.2.1 Inherent Instructions G-2
- G.2.2 Register/Memory/Immediate Instructions G-2
- G.2.3 Call and Return Instructions G-2
- G.2.4 Jump Instructions G-2
- G.2.5 Input/Output/Reset Instructions G-3
- G.2.6 Move Instructions G-3
- G.2.7 Other Instructions G-3
-
- APPENDIX H ASZ80 ASSEMBLER H-1
- H.1 .hd64 DIRECTIVE H-1
- H.2 Z80 REGISTER SET AND CONDITIONS H-1
- H.3 Z80 INSTRUCTION SET H-2
- H.3.1 Inherent Instructions H-3
- H.3.2 Implicit Operand Instructions H-3
- H.3.3 Load Instruction H-4
- H.3.4 Call/Return Instructions H-4
- H.3.5 Jump and Jump to Subroutine Instructions H-4
- H.3.6 Bit Manipulation Instructions H-5
- H.3.7 Interrupt Mode and Reset Instructions H-5
- H.3.8 Input and Output Instructions H-5
- H.3.9 Register Pair Instructions H-5
- H.3.10 HD64180 Specific Instructions H-6
-
-
- Page iv
-
-
-
-
-
-
-
-
-
- P R E F A C E
-
-
-
-
-
-
- The ASxxxx assemblers were written following the style of
- several cross assemblers found in the Digital Equipment Corpora-
- tion Users Society (DECUS) distribution of the C programming
- language. The DECUS code was provided with no documentation as
- to the input syntax or the output format. Study of the code
- revealed that the unknown author of the code had attempted to
- formulate an assembler with attributes similiar to those of the
- PDP-11 MACRO assembler (without macro's). The incomplete code
- from the DECUS C distribution has been largely rewritten, only
- the program structure, and C source file organization remains
- relatively unchanged. However, I wish to thank the author for
- his contribution to this set of assemblers.
-
- The ASLINK program was written as a companion to the ASxxxx
- assemblers, its design and implementation was not derived from
- any other work.
-
- The ASxxxx assemblers and the ASLINK relocating linker are
- placed in the Public Domain. Publication or distribution of
- these programs for non-commercial use is hereby granted with the
- stipulation that the copyright notice be included with all
- copies.
-
- I would greatly appreciate receiving the details of any
- changes, additions, or errors pertaining to these programs and
- will attempt to incorporate any fixes or generally useful
- changes in a future update to these programs.
-
-
-
-
- Alan R. Baldwin
- Kent State University
- Physics Department
- Kent, Ohio 44242
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- CHAPTER 1
-
- THE ASSEMBLER
-
-
-
-
-
- 1.1 THE ASXXXX ASSEMBLERS
-
-
- The ASxxxx assemblers are a series of microprocessor assem-
- blers written in the C programming language. Each assembler has
- a device specific section which includes:
-
- 1. device description, byte order, and file extension in-
- formation
-
- 2. a table of the assembler general directives, special
- device directives, assembler mnemonics and associated
- operation codes
-
- 3. machine specific code for processing the device mnemon-
- ics, addressing modes, and special directives
-
- The device specific information is detailed in the appendices.
-
- The assemblers have a common device independent section which
- handles the details of file input/output, symbol table genera-
- tion, program/data areas, expression analysis, and assembler
- directive processing.
-
- The assemblers provide the following features:
-
- 1. Command string control of assembly functions
-
- 2. Alphabetized, formatted symbol table listing
-
- 3. Relocatable object modules
-
- 4. Global symbols for linking object modules
-
- 5. Conditional assembly directives
-
-
-
- THE ASSEMBLER PAGE 1-2
- THE ASXXXX ASSEMBLERS
-
-
- 6. Program sectioning directives
-
-
- ASxxxx assembles one or more source files into a single relo-
- catable ascii object file. The output of the ASxxxx assemblers
- consists of an ascii relocatable object file(*.rel), an assembly
- listing file(*.lst), and a symbol file(*.sym).
-
-
- 1.1.1 Assembly Pass 1
-
-
- During pass 1, ASxxxx opens all source files and performs a
- rudimenatry assembly of each source statement. During this pro-
- cess all symbol tables are built, program sections defined, and
- number of bytes for each assembled source line is estimated.
-
- At the end of pass 1 all undefined symbols may be made global
- (external) using the ASxxxx switch -g, otherwise undefined sym-
- bols will be flagged as errors during succeeding passes.
-
-
- 1.1.2 Assembly Pass 2
-
-
- During pass 2 the ASxxxx assembler resolves forward refer-
- ences and determines the number of bytes for each assembled
- line. The number of bytes used by a particular assembler in-
- struction may depend upon the addressing mode, whether the in-
- struction allows multiple forms based upon the relative distance
- to the addressed location, or other factors. Pass 2 resolves
- these cases and determines the address of all symbols.
-
-
- 1.1.3 Assembly Pass 3
-
-
- Pass 3 by the assembler generates the listing file, the relo-
- catable output file, and the symbol tables. Also during pass 3
- the errors will be reported.
-
- The relocatable object file is an ascii file containing sym-
- bol references and definitions, program area definitions, and
- the relocatable assembled code, the linker ASLINK will use this
- information to generate an absolute load file (Motorola or Intel
- formats).
-
-
-
-
- THE ASSEMBLER PAGE 1-3
- SOURCE PROGRAM FORMAT
-
-
- 1.2 SOURCE PROGRAM FORMAT
-
-
-
- 1.2.1 Statement Format
-
-
- A source program is composed of assembly-language statements.
- Each statement must be completed on one line. A line may con-
- tain a maximum of 128 characters, longer lines are truncated and
- lost.
-
- An ASxxxx assembler statement may have as many as four
- fields. These fields are identified by their order within the
- statement and/or by separating characters between fields. The
- general format of the ASxxxx statement is:
-
- [label:] Operator Operand [;Comment(s)]
-
- The label and comment fields are optional. The operator and
- operand fields are interdependent. The operator field may be an
- assembler directive or an assembly mnemonic. The operand field
- may be optional or required as defined in the context of the
- operator.
-
- ASxxxx interprets and processes source statements one at a
- time. Each statement causes a particular operation to be per-
- formed.
-
-
- 1.2.1.1 Label Field -
-
- A label is a user-defined symbol which is assigned the value
- of the current location counter and entered into the user de-
- fined symbol table. The current location counter is used by
- ASxxxx to assign memory addresses to the source program state-
- ments as they are encountered during the assembly process. Thus
- a label is a means of symbolically referring to a specific
- statement.
-
- When a program section is absolute, the value of the current
- location counter is absolute; its value references an absolute
- memory address. Similarly, when a program section is relocat-
- able, the value of the current location counter is relocatable.
- A relocation bias calculated at link time is added to the ap-
- parent value of the current location counter to establish its
- effective absolute address at execution time. (The user can
- also force the linker to relocate sections defined as absolute.
- This may be required under special circumstances.)
-
- If present, a label must be the first field in a source
- statement and must be terminated by a colon (:). For example,
-
-
- THE ASSEMBLER PAGE 1-4
- SOURCE PROGRAM FORMAT
-
-
- if the value of the current location counter is absolute
- 01F0(H), the statement:
-
- abcd: nop
-
- assigns the value 01F0(H) to the label abcd. If the location
- counter value were relocatable, the final value of abcd would be
- 01F0(H)+K, where K represents the relocation bias of the program
- section, as calculated by the linker at link time.
-
- More than one label may appear within a single label field.
- Each label so specified is assigned the same address value. For
- example, if the value of the current location counter is
- 1FF0(H), the multiple labels in the following statement are each
- assigned the value 1FF0(H):
-
- abcd: aq: $abc: nop
-
- Multiple labels may also appear on successive lines. For ex-
- ample, the statements
-
- abcd:
- aq:
- $abc: nop
-
- likewise cause the same value to be assigned to all three la-
- bels.
-
- A double colon (::) defines the label as a global symbol.
- For example, the statement
-
- abcd:: nop
-
- establishes the label abcd as a global symbol. The distinguish-
- ing attribute of a global symbol is that it can be referenced
- from within an object module other than the module in which the
- symbol is defined. References to this label in other modules
- are resolved when the modules are linked as a composite execut-
- able image.
-
- The legal characters for defining labels are:
-
- A through Z
- a through z
- 0 through 9
- . (Period)
- $ (Dollar sign)
- _ (underscore)
-
- A label may be any length, however, only the first eight (8)
- characters are significant and, therefore must be unique among
- all labels in the source program (not necessarily among
-
-
- THE ASSEMBLER PAGE 1-5
- SOURCE PROGRAM FORMAT
-
-
- separately compiled modules). An error code(s) (m or p) will be
- generated in the assembly listing if the first eight characters
- in two or more labels are the same. The m code is caused by the
- redeclaration of the symbol or its reference by another state-
- ment. The p code is generated because the symbols location is
- changing on each pass through the source file.
-
- The label must not start with the characters 0-9, as this
- designates a local symbol with special attributes described in a
- later section.
-
-
- 1.2.1.2 Operator Field -
-
- The operator field specifies the action to be performed. It
- may consist of an instruction mnemonic (op code) or an assembler
- directive.
-
- When the operator is an instruction mnemonic, a machine in-
- struction is generated and the assembler evaluates the addresses
- of the operands which follow. When the operator is a directive
- ASxxxx performs certain control actions or processing operations
- during assembly of the source program.
-
- Leading and trailing spaces or tabs in the operator field
- have no significance; such characters serve only to separate
- the operator field from the preceeding and following fields.
-
- An operator is terminated by a space, tab or end of line.
-
-
- 1.2.1.3 Operand Field -
-
- When the operator is an instruction mnemonic (op code), the
- operand field contains program variables that are to be
- evaluated/manipulated by the operator.
-
- Operands may be expressions or symbols, depending on the
- operator. Multiple expressions used in the operand fields may
- be separated by a comma. An operand should be preceeded by an
- operator field; if it is not, the statement will give an error
- (q or o). All operands following instruction mnemonics are
- treated as expressions.
-
- The operand field is terminated by a semicolon when the field
- is followed by a comment. For example, in the following
- statement:
-
- label: lda abcd,x ;Comment field
-
- the tab between lda and abcd terminates the operator field and
- defines the beginning of the operand field; a comma separates
-
-
- THE ASSEMBLER PAGE 1-6
- SOURCE PROGRAM FORMAT
-
-
- the operands abcd and x; and a semicolon terminates the operand
- field and defines the beginning of the comment field. When no
- comment field follows, the operand field is terminated by the
- end of the source line.
-
-
- 1.2.1.4 Comment Field -
-
- The comment field begins with a semicolon and extends through
- the end of the line. This field is optional and may contain any
- 7-bit ascii character except null.
-
- Comments do not affect assembly processing or program execu-
- tion.
-
-
- 1.3 SYMBOLS AND EXPRESSIONS
-
-
- This section describes the generic components of the ASxxxx
- assemblers: the character set, the conventions observed in con-
- structing symbols, and the use of numbers, operators, and ex-
- pressions.
-
-
- 1.3.1 Character Set
-
-
- The following characters are legal in ASxxxx source programs:
-
- 1. The letters A through Z. Both upper- and lower-case
- letters are acceptable. The assemblers are case sensi-
- tive, i.e. ABCD and abcd are different symbols. (The
- assemblers can be made case insensitive by recompiling
- with the appropriate switches.)
-
- 2. The digits 0 through 9
-
- 3. The characters . (period), $ (dollar sign), and _ (un-
- derscore).
-
- 4. The special characters listed in Tables 1 through 6.
-
-
- Tables 1 through 6 describe the various ASxxxx label and
- field terminators, assignment operators, operand separators, as-
- sembly, unary, binary, and radix operators.
-
-
- THE ASSEMBLER PAGE 1-7
- SYMBOLS AND EXPRESSIONS
-
-
- Table 1 Label Terminators and Assignment Operators
- ----------------------------------------------------------------
-
- : Colon Label terminator.
-
- :: Double colon Label Terminator; defines the
- label as a global label.
-
- = Equal sign Direct assignment operator.
-
- == Double equal Direct assignment operator;
- sign defines the symbol as a global
- symbol.
-
- ----------------------------------------------------------------
-
-
-
-
-
- Table 2 Field Terminators and Operand Separators
- ----------------------------------------------------------------
-
- Tab Item or field terminator.
-
- Space Item or field terminator.
-
- , Comma Operand field separator.
-
- ; Semicolon Comment field indicator.
-
- ----------------------------------------------------------------
-
-
-
-
-
- Table 3 Assembler Operators
- ----------------------------------------------------------------
-
- # Number sign Immediate expression indicator.
-
- . Period Current location counter.
-
- ( Left parenthesis Expression delimiter.
-
- ) Right parenthesis Expression delimeter.
-
- ----------------------------------------------------------------
-
-
- THE ASSEMBLER PAGE 1-8
- SYMBOLS AND EXPRESSIONS
-
-
-
-
-
-
-
- Table 4 Unary Operators
- ----------------------------------------------------------------
-
- < Left bracket <FEDC Produces the lower byte
- value of the expression.
- (DC)
-
- > Right bracket >FEDC Produces the upper byte
- value of the expression.
- (FE)
-
- + Plus sign +A Positive value of A
-
- - Minus sign -A Produces the negative
- (2's complement) of A.
-
- ' Single quote 'D Produces the value of
- the character D.
-
- " Double quote "AB Produces the double byte
- value for AB.
-
- \ Backslash '\n Unix style characters
- \b, \f, \n, \r, \t
- or '\001 or octal byte values.
-
- ----------------------------------------------------------------
-
-
-
-
-
-
-
- THE ASSEMBLER PAGE 1-9
- SYMBOLS AND EXPRESSIONS
-
-
- Table 5 Binary Operators
- ----------------------------------------------------------------
-
- << Double 0800 << 4 Produces the 4 bit
- Left bracket left-shifted value of
- 0800. (8000)
-
- >> Double 0800 >> 4 Produces the 4 bit
- Right bracket right-shifted value of
- 0800. (0080)
-
- + Plus sign A + B Arithmetic Addition
- operator.
-
- - Minus sign A - B Arithmetic Subtraction
- operator.
-
- * Asterisk A * B Arithmetic Multiplica-
- tion operator. (signed
- 16-bit)
-
- / Slash A / B Arithmetic Division
- operator. (signed
- 16-bit quotient)
-
- & Ampersand A & B Logical AND operator.
-
- | Bar A | B Logical OR operator.
-
- % Percent sign A % B Modulus operator.
- (16-bit value)
-
- ^ Up arrow or A ^ B EXCLUSIVE OR operator.
- circumflex
-
- ----------------------------------------------------------------
-
-
-
-
-
-
-
- THE ASSEMBLER PAGE 1-10
- SYMBOLS AND EXPRESSIONS
-
-
- Table 6 Temporary Radix Operators
- ----------------------------------------------------------------
-
- 0b, 0B Binary radix operator.
-
- 0@, 0o, 0O, 0q, 0Q Octal radix operator.
-
- 0d, 0D Decimal radix operator.
-
- 0h, 0H, 0x, 0X Hexidecimal radix operator.
-
- ----------------------------------------------------------------
-
-
-
-
-
-
-
- 1.3.2 User-Defined Symbols
-
-
- User-defined symbols are those symbols that are equated to a
- specific value through a direct assignment statement or appear
- as labels. These symbols are added to the User Symbol Table as
- they are encountered during assembly.
-
- The following rules govern the creation of user-defined symbols:
-
- 1. Symbols can be composed of alphanumeric characters,
- dollar signs ($), periods (.), and underscores (_)
- only.
-
- 2. The first character of a symbol must not be a number
- (except in the case of local symbols).
-
- 3. The first eight characters of a symbol must be unique.
- A symbol can be written with more than eight legal
- characters, but the ninth and subsequent characters are
- ignored.
-
- 4. Spaces and Tabs must not be embedded within a symbol.
-
-
-
-
-
- THE ASSEMBLER PAGE 1-11
- SYMBOLS AND EXPRESSIONS
-
-
- 1.3.3 Local Symbols
-
-
- Local symbols are specially formatted symbols used as labels
- within a block of coding that has been delimited as a local sym-
- bol block. Local symbols are of the form n$, where n is a
- decimal integer from 0 to 255, inclusive. Examples of local
- symbols are:
-
- 1$
- 27$
- 138$
- 244$
-
- The range of a local symbol block consists of those state-
- ments between two normally constructed symbolic labels. Note
- that a statement of the form:
-
- ALPHA = EXPRESSION
-
- is a direct assignment statement but does not create a label and
- thus does not delimit the range of a local symbol block.
-
- Note that the range of a local symbol block may extend across
- program areas.
-
- Local symbols provide a convenient means of generating labels
- for branch instructions and other such references within local
- symbol blocks. Using local symbols reduces the possibility of
- symbols with multiple definitions appearing within a user pro-
- gram. In addition, the use of local symbols differentiates
- entry-point labels from local labels, since local labels cannot
- be referenced from outside their respective local symbol blocks.
- Thus, local symbols of the same name can appear in other local
- symbol blocks without conflict. Local symbols require less sym-
- bol table space than normal symbols. Their use is recommended.
-
- The use of the same local symbol within a local symbol block
- will generate one or both of the m or p errors.
-
-
- THE ASSEMBLER PAGE 1-12
- SYMBOLS AND EXPRESSIONS
-
-
- Example of local symbols:
-
- a: ldx #atable ;get table address
- lda #0d48 ;table length
- 1$: clr ,x+ ;clear
- deca
- bne 1$
-
- b: ldx #btable ;get table address
- lda #0d48 ;table length
- 1$: clr ,x+ ;clear
- deca
- bne 1$
-
-
- 1.3.4 Current Location Counter
-
-
- The period (.) is the symbol for the current location coun-
- ter. When used in the operand field of an instruction, the
- period represents the address of the first byte of the
- instruction:
-
- AS: ldx #. ;The period (.) refers to
- ;the address of the ldx
- ;instruction.
-
- When used in the operand field of an ASxxxx directive, it
- represents the address of the current byte or word:
-
- QK = 0
-
- .word 0xFFFE,.+4,QK ;The operand .+4 in the .word
- ;directive represents a value
- ;stored in the second of the
- ;three words during assembly.
-
- If we assume the current value of the program counter is
- 0H0200, then during assembly, ASxxxx reserves three words of
- storage starting at location 0H0200. The first value, a hex-
- idecimal constant FFFE, will be stored at location 0H0200. The
- second value represented by .+4 will be stored at location
- 0H0202, its value will be 0H0206 ( = 0H0202 + 4). The third
- value defined by the symbol QK will be placed at location
- 0H0204.
-
- At the beginning of each assembly pass, ASxxxx resets the lo-
- cation counter. Normally, consecutive memory locations are as-
- signed to each byte of object code generated. However, the
- value of the location counter can be changed through a direct
- assignment statement of the following form:
-
-
-
- THE ASSEMBLER PAGE 1-13
- SYMBOLS AND EXPRESSIONS
-
-
- . = . + expression
-
-
- The new location counter can only be specified relative to
- the current location counter. Neglecting to specify the current
- program counter along with the expression on the right side of
- the assignment operator will generate the (.) error. (Absolute
- program areas may use the .org directive to specify the absolute
- location of the current program counter.)
-
- The following coding illustrates the use of the current location
- counter:
-
- .area CODE1 (ABS) ;program area CODE1
- ;is ABSOLUTE
-
- .org 0H100 ;set location to
- ;0H100 absolute
-
- num1: ldx #.+0H10 ;The label num1 has
- ;the value 0H100.
- ;X is loaded with
- ;0H100 + 0H10
-
- .org 0H130 ;location counter
- ;set to 0H130
-
- num2: ldy #. ;The label num2 has
- ;the value 0H130.
- ;Y is loaded with
- ;value 0H130.
-
-
- .area CODE2 (REL) ;program area CODE2
- ;is RELOCATABLE
-
- . = . + 0H20 ;Set location counter
- ;to relocatable 0H20 of
- ;the program section.
-
- num3: .word 0 ;The label num3 has
- ;the value
- ;of relocatable 0H20.
-
- . = . + 0H40 ;will reserve 0H40
- ;bytes of storage as will
- .blkb 0H40 ;or
- .blkw 0H20
-
- The .blkb and .blkw directives are the preferred methods of
- allocating space.
-
-
-
- THE ASSEMBLER PAGE 1-14
- SYMBOLS AND EXPRESSIONS
-
-
- 1.3.5 Numbers
-
-
- ASxxxx assumes that all numbers in the source program are to
- be interpreted in decimal radix unless otherwise specified. The
- .radix directive may be used to specify the default as octal,
- decimal, or hexidecimal. Individual numbers can be designated
- as binary, octal, decimal, or hexidecimal through the temporary
- radix prefixes shown in table 6.
-
- Negative numbers must be preceeded by a minus sign; ASxxxx
- translates such numbers into two's complement form. Positive
- numbers may (but need not) be preceeded by a plus sign.
-
- Numbers are always considered to be absolute values, therefor
- they are never relocatable.
-
-
- 1.3.6 Terms
-
-
- A term is a component of an expression and may be one of the
- following:
-
-
- 1. A number.
-
- 2. A symbol:
- 1. A period (.) specified in an expression causes the
- current location counter to be used.
- 2. A User-defined symbol.
- 3. An undefined symbol is assigned a value of zero and
- inserted in the User-Defined symbol table as an un-
- defined symbol.
-
- 3. A single quote followed by a single ascii character, or
- a double quote followed by two ascii characters.
-
- 4. An expression enclosed in parenthesis. Any expression
- so enclosed is evaluated and reduced to a single term
- before the remainder of the expression in which it ap-
- pears is evaluated. Parenthesis, for example, may be
- used to alter the left-to-right evaluation of expres-
- sions, (as in A*B+C versus A*(B+C)), or to apply a un-
- ary operator to an entire expression (as in -(A+B)).
-
- 5. A unary operator followed by a symbol or number.
-
-
-
-
-
- THE ASSEMBLER PAGE 1-15
- SYMBOLS AND EXPRESSIONS
-
-
- 1.3.7 Expressions
-
-
- Expressions are combinations of terms joined together by
- binary operators. Expressions reduce to a 16-bit value. The
- evaluation of an expression includes the determination of its
- attributes. A resultant expression value may be one of three
- types (as described later in this section): relocatable, ab-
- solute, and external.
-
- Expressions are evaluate with an operand hierarchy as follows:
-
- * / % multiplication,
- division, and
- modulus first.
-
- + - addition and
- subtraction second.
-
- << >> left shift and
- right shift third.
-
- ^ exclusive or fourth.
-
- & logical and fifth.
-
- | logical or last
-
- except that unary operators take precedence over binary
- operators.
-
-
- A missing or illegal operator terminates the expression
- analysis, causing error codes (o) and/or (q) to be generated
- depending upon the context of the expression itself.
-
- At assembly time the value of an external (global) expression
- is equal to the value of the absolute part of that expression.
- For example, the expression external+4, where 'external' is an
- external symbol, has the value of 4. This expression, however,
- when evaluated at link time takes on the resolved value of the
- symbol 'external', plus 4.
-
- Expressions, when evaluated by ASxxxx, are one of three
- types: relocatable, absolute, or external. The following dis-
- tinctions are important:
-
- 1. An expression is relocatable if its value is fixed re-
- lative to the base address of the program area in which
- it appears; it will have an offset value added at link
- time. Terms that contain labels defined in relocatable
- program areas will have a relocatable value;
-
-
- THE ASSEMBLER PAGE 1-16
- SYMBOLS AND EXPRESSIONS
-
-
- similarly, a period (.) in a relocatable program area,
- representing the value of the current program location
- counter, will also have a relocatable value.
-
- 2. An expression is absolute if its value is fixed. An
- expression whose terms are numbers and ascii characters
- will reduce to an absolute value. A relocatable ex-
- pression or term minus a relocatable term, where both
- elements being evaluated belong to the same program
- area, is an absolute expression. This is because every
- term in a program area has the same relocation bias.
- When one term is subtracted from the other the reloca-
- tion bias is zero.
-
- 3. An expression is external (or global) if it contains a
- single global reference (plus or minus an absolute ex-
- pression value) that is not defined within the current
- program. Thus, an external expression is only par-
- tially defined following assembly and must be resolved
- at link time.
-
-
-
- 1.4 GENERAL ASSEMBLER DIRECTIVES
-
-
- An ASxxxx directive is placed in the operator field of the
- source line. Only one directive is allowed per source line.
- Each directive may have a blank operand field or one or more
- operands. Legal operands differ with each directive.
-
-
- 1.4.1 .module Directive
-
- Format:
-
- .module string
-
- The .module directive causes the string to be included in the
- assemblers output file as an identifier for this particular ob-
- ject module. The string may be from 1 to 8 characters in
- length. Only one identifier is allowed per assembled module.
- The main use of this directive is to allow the linker to report
- a modules' use of undefined symbols. At link time all undefined
- symbols are reported and the modules referencing them are
- listed.
-
-
-
-
- THE ASSEMBLER PAGE 1-17
- GENERAL ASSEMBLER DIRECTIVES
-
-
- 1.4.2 .title Directive
-
- Format:
-
- .title string
-
- The .title directive provides a character string to be placed
- on the second line of each page during listing.
-
-
- 1.4.3 .sbttl Directive
-
- Format:
-
- .sbttl string
-
- The .sbttl directive provides a character string to be placed
- on the third line of each page during listing.
-
-
- 1.4.4 .page Directive
-
- Format:
-
- .page
-
- The .page directive causes a page ejection with a new heading
- to be printed. The new page occurs after the next line of the
- source program is processed, this allows an immediately follow-
- ing .sbttl directive to appear on the new page. The .page
- source line will not appear in the file listing.
-
-
- 1.4.5 .byte and .db Directives
-
- Format:
-
- .byte exp ;Stores the binary value
- .db exp ;of the expression in the
- ;next byte.
-
- .byte exp1,exp2,expn ;Stores the binary values
- .db exp1,exp2,expn ;of the list of expressions
- ;in successive bytes.
-
- where: exp, represent expressions that will be
- exp1, truncated to 8-bits of data.
- . Each expression will be calculated
- . as a 16-bit word expression,
- . the high-order byte will be truncated.
- . Multiple expressions must be
- expn separated by commas.
-
-
- THE ASSEMBLER PAGE 1-18
- GENERAL ASSEMBLER DIRECTIVES
-
-
- The .byte or .db directives are used to generate successive
- bytes of binary data in the object module.
-
-
- 1.4.6 .word and .dw Directives
-
- Format:
-
- .word exp ;Stores the binary value
- .dw exp ;of the expression in
- ;the next word.
-
- .word exp1,exp2,expn ;Stores the binary values
- .dw exp1,exp2,expn ;of the list of expressions
- ;in successive words.
-
- where: exp, represent expressions that will occupy two
- exp1, bytes of data. Each expression will be
- . calculated as a 16-bit word expression.
- . Multiple expressions must be
- expn separated by commas.
-
- The .word or .dw directives are used to generate successive
- words of binary data in the object module.
-
-
- 1.4.7 .blkb, .blkw, and .ds Directives
-
- Format:
-
- .blkb N ;reserve N bytes of space
- .blkw N ;reserve N words of space
- .ds N ;reserve N bytes of space
-
- The .blkb and .ds directives reserve byte blocks in the ob-
- ject module; the .blkw directive reserves word blocks.
-
-
- 1.4.8 .ascii Directive
-
- Format:
-
- .ascii /string/
-
- where: string is a string of printable ascii characters.
-
- / / represent the delimiting characters. These
- delimiters may be any paired printing
- characters, as long as the characters are not
- contained within the string itself. If the
- delimiting characters do not match, the .ascii
- directive will give the (q) error.
-
-
- THE ASSEMBLER PAGE 1-19
- GENERAL ASSEMBLER DIRECTIVES
-
-
-
- The .ascii directive places one binary byte of data for each
- character in the string into the object module.
-
-
- 1.4.9 .asciz Directive
-
- Format:
-
- .asciz /string/
-
- where: string is a string of printable asciz characters.
-
- / / represent the delimiting characters. These
- delimiters may be any paired printing
- characters, as long as the characters are not
- contained within the string itself. If the
- delimiting characters do not match, the .asciz
- directive will give the (q) error.
-
- The .ascii directive places one binary byte of data for each
- character in the string into the object module. Following all
- the character data a zero byte is inserted to terminate the
- character string.
-
-
- 1.4.10 .radix Directive
-
- Format:
-
- .radix character
-
- where: character represents a single character specifying the
- default radix to be used for succeeding numbers.
- The character may be any one of the following:
-
- B,b Binary
-
- O,o Octal
- Q,q
- @
-
- D,d Decimal
- 'blank'
-
- H,h Hexidecimal
- X,x
-
-
-
-
- THE ASSEMBLER PAGE 1-20
- GENERAL ASSEMBLER DIRECTIVES
-
-
- 1.4.11 .even Directive
-
- Format:
-
- .even
-
- The .even directive ensures that the current location counter
- contains an even boundary value by adding 1 if the current loca-
- tion is odd.
-
-
- 1.4.12 .odd Directive
-
- Format:
-
- .odd
-
- The .odd directive ensures that the current location counter
- contains an odd boundary value by adding one if the current lo-
- cation is even.
-
-
- 1.4.13 .area Directive
-
- Format:
-
- .area name [(options)]
-
- where: name represents the symbolic name of the program sec-
- tion. This name may be the same as any
- user-defined symbol as the area names are in-
- dependent of all symbols and labels.
-
- options specify the type of program or data area:
- ABS absolute (automatically invokes OVR)
- REL relocatable
- OVR overlay
- CON concatenate
-
-
- The .area directive provides a means of defining and separat-
- ing multiple programming and data sections. The name is the
- area label used by the assembler and the linker to collect code
- from various separately assembled modules into one section. The
- name may be from 1 to 8 characters in length.
-
- The options are specified within parenthesis and separated by
- commas as shown in the following example:
-
- .area TEST (REL,CON) ;This section is relocatable
- ;and concatenated with other
- ;sections of this program area.
-
-
- THE ASSEMBLER PAGE 1-21
- GENERAL ASSEMBLER DIRECTIVES
-
-
-
- .area DATA (REL,OVR) ;This section is relocatable
- ;and overlays other sections
- ;of this program area.
-
- .area SYS (ABS,OVR) ;(CON not allowed with ABS)
- ;This section is defined as
- ;absolute. Absolute sections
- ;are always overlayed with
- ;other sections of this program
- ;area.
-
- The default area type is REL|CON; i.e. a relocatable sec-
- tion which is concatenated with other sections of code with the
- same area name. The ABS option indicates an absolute area. The
- OVR and CON options indicate if program sections of the same
- name will overlay each other (start at the same location) or be
- concatenated with each other (appended to each other).
-
- Multiple invocations of the .area directive with the same
- name must specify the same options or leave the options field
- blank, this defaults to the previously specified options for
- this program area.
-
- The ASxxxx assemblers automatically provide two program
- sections:
-
- '. .ABS.' This dumby section contains all absolute
- symbols and their values.
-
- '_CODE' This is the default program/data area.
- This program area is of type (REL,CON).
-
-
- 1.4.14 .org Directive
-
- Format:
-
- .org exp
-
- where: exp is an absolute expression that becomes the cur-
- rent location counter.
-
- The .org directive is valid only in an absolute program section
- and will give a (q) error if used in a relocatable program area.
- The .org directive specifies that the current location counter
- is to become the specified absolute value.
-
-
-
-
- THE ASSEMBLER PAGE 1-22
- GENERAL ASSEMBLER DIRECTIVES
-
-
- 1.4.15 .globl Directive
-
- Format:
-
- .globl sym1,sym2,...,symn
-
- where: sym1, represent legal symbolic names. When
- sym2,... When multiple symbols are specified,
- symn they are separated by commas.
-
- A .globl directive may also have a label field and/or a com-
- ment field.
-
- The .globl directive is provided to define (and thus provide
- linkage to) symbols not otherwise defined as global symbols
- within a module. In defining global symbols the directive
- .globl J is similar to:
-
- J == expression or J::
-
- Because object modules are linked by global symbols, these
- symbols are vital to a program. All internal symbols appearing
- within a given program must be defined at the end of pass 1 or
- they will be considered undefined. The assembly directive (-g)
- can be be invoked to make all undefined symbols global at the
- end of pass 1.
-
-
- 1.4.16 .if, .else, and .endif Directives
-
- Format:
-
- .if expr
- . ;}
- . ;} range of true condition
- . ;}
- .else
- . ;}
- . ;} range of false condition
- . ;}
- .endif
-
- The conditional assembly directives allow you to include or
- exclude blocks of source code during the assembly process, based
- on the evaluation of the condition test.
-
- The range of true condition will be processed if the expres-
- sion 'expr' is not zero (i.e. true) and the range of false con-
- dition will be processed if the expression 'expr' is zero (i.e
- false). The range of true condition is optional as is the .else
- directive and the range of false condition. The following are
- all valid .if/.else/.endif constructions:
-
-
- THE ASSEMBLER PAGE 1-23
- GENERAL ASSEMBLER DIRECTIVES
-
-
-
- .if A-4 ;evaluate A-4
- .byte 1,2 ;insert bytes if A-4 is
- .endif ;not zero
-
- .if K+3 ;evaluate K+3
- .else
- .byte 3,4 ;insert bytes if K+3
- .endif ;is zero
-
- .if J&3 ;evaluate J masked by 3
- .byte 12 ;insert this byte if J&3
- .else ;is not zero
- .byte 13 ;insert this byte if J&3
- .endif ;is zero
-
-
- The .if/.else/.endif directives may be nested upto 10 levels.
-
- The .page directive is processed within a false condition
- range to allow extended textual information to be incorporated
- in the source program with out the need to use the comment
- delimiter (;):
-
- .if 0
-
- .page
- This text will be bypassed during assembly
- but appear in the listing file.
- .
- .
- .
-
- .endif
-
-
- 1.4.17 .include Directive
-
- Format:
-
- .include string
-
- where: string represents a delimited string that is the file
- specification of an ASxxxx source file.
-
- The .include directive is used to insert a source file within
- the source file currently being assembled. When this directive
- is encountered, an implicit .page directive is issued. When the
- end of the specified source file is reached, an implicit .page
- directive is issued and input continues from the previous source
- file. The maximum nesting level of source files specified by a
-
-
- THE ASSEMBLER PAGE 1-24
- GENERAL ASSEMBLER DIRECTIVES
-
-
- .include directive is five. The line containing the .include
- directive will not appear in the listing file.
-
- The total number of separately specified .include files is
- unlimited as each .include file is opened and then closed during
- each pass made by the assembler.
-
-
- 1.5 INVOKING ASXXXX
-
-
- The ASxxxx assemblers are command line oriented. After the
- assembler is started, enter the option(s) and file(s) to assem-
- ble following the 'argv:' prompt:
-
- argv: [-dqxgalos] file1 [file2 file3 ... file6]
-
- The options are:
-
- d decimal listing
- q octal listing
- x hex listing (default)
-
- The listing radix affects the
- .lst, .rel, and .sym files.
-
- g undefined symbols made global
- a all user symbols made global
-
- l create list output file1.lst
- o create object output file1.rel
- s create symbol output file1.sym
-
- The file name for .lst, .rel, and .sym files is the first
- file name specified in the command line. All output files are
- ascii text files which may be edited, copied, etc. The output
- files are the concatenation of all the input files, if files are
- to be assembled independently invoke the assembler for each
- file.
-
- The .rel file contains a radix directive so that the linker
- will use the proper conversion for this file. Linked files may
- have different radices.
-
- If the list (l) option is specified without the symbol table
- (s) option, the symbol table is placed at the end of the listing
- file.
-
-
-
-
- THE ASSEMBLER PAGE 1-25
- ERRORS
-
-
- 1.6 ERRORS
-
-
- The ASxxxx assemblers provide limited diagnostic error codes
- during the assembly process, these errors will be noted in the
- listing file and printed on the stderr device. The errors are:
-
- (.) This error is caused by an absolute direct assign-
- ment of the current location counter
- . = expression (incorrect)
- rather than the correct
- . = . + expression
-
- (a) Indicates a machine specific addressing or address-
- ing mode error.
-
- (i) Caused by an .include file error or an .if/.endif
- mismatch.
-
- (m) Multiple definitions of the same label, multiple
- .module directives, or multiple conflicting attri-
- butes in an .area directive.
-
- (o) Directive or mnemonic error or the use of the .org
- directive in a relocatable area.
-
- (p) Phase error: label location changing between passes
- 2 and 3. Normally caused by having more than one
- level of forward referencing.
-
- (q) Questionable syntax: missing or improper operators,
- terminators, or delimiters.
-
- (r) Relocation error: logic operation attempted on a
- relocatable term, addition of two relocatable terms,
- subtraction of two relocatable terms not within the
- same programming area or external symbols.
-
- (u) Undefined symbol encountered during assembly.
-
-
-
-
- THE ASSEMBLER PAGE 1-26
- LISTING FILE
-
-
- 1.7 LISTING FILE
-
-
- The (-l) option produces an ascii output listing file. Each
- page of output contains a four line header:
-
-
- 1. The ASxxxx program name and page number
-
- 2. Title from a .title directive (if any)
-
- 3. Subtitle from a .sbttl directive (if any)
-
- 4. Blank line
-
-
-
- Each succeeding line contains five fields:
-
-
- 1. Error field (first three characters of line)
-
- 2. Current location counter
-
- 3. Generated code in byte format
-
- 4. Source text line number
-
- 5. Source text
-
-
- The error field may contain upto 3 error flags indicating any
- errors encountered while assembling this line of source code.
-
- The current location counter field displays the 16-bit pro-
- gram position. This field will be in the selected radix.
-
- The generated code follows the program location. The listing
- radix determines the number of bytes that will be displayed in
- this field. Hexidecimal listing allows six bytes of data within
- the field, decimal and octal allow four bytes within the field.
- If more than one field of data is generated from the assembly of
- a single line of source code, then the data field is repeated on
- successive lines.
-
- The source text line number is printed in decimal and is fol-
- lowed by the source text.
-
- Two special cases will disable the listing of a line of
- source text:
-
-
-
- THE ASSEMBLER PAGE 1-27
- LISTING FILE
-
-
- 1. Source line with a .page directive is never listed.
-
- 2. Source line with a .include file directive is not
- listed unless the .include file cannot be opened.
-
-
-
- 1.8 SYMBOL TABLE FILE
-
-
- The symbol table has two parts:
-
- 1. The alphabetically sorted list of symbols and/or labels
- defined or referenced in the source program.
-
- 2. A list of the program areas defined during assembly of
- the source program.
-
-
- The sorted list of symbols and/or labels contains the follow-
- ing information:
-
- 1. Program area number (none if absolute value or exter-
- nal)
-
- 2. The symbol or label
-
- 3. Directly assigned symbol is denoted with an (=) sign
-
- 4. The value of a symbol, location of a label relative to
- the program area base address (=0), or a **** indicat-
- ing the symbol or label is undefined.
-
- 5. The characters: G - global, R - relocatable, and X -
- external.
-
-
- The list of program areas provides the correspondence between
- the program area numbers and the defined program areas, the size
- of the program areas, and the area flags (attributes).
-
-
-
-
- THE ASSEMBLER PAGE 1-28
- OBJECT FILE
-
-
- 1.9 OBJECT FILE
-
-
- The object file is an ascii file containing the information
- needed by the linker to bind multiple object modules into a com-
- plete loadable memory image. The object module contains the
- following designators:
-
- [XDQ][HL]
- X Hexidecimal radix
- D Decimal radix
- Q Octal radix
-
- H Most significant byte first
- L Least significant byte first
-
- H Header
- M Module
- A Area
- S Symbol
- T Object code
- R Relocation information
-
- Refer to the linker for a detailed description of each of the
- designators and the format of the information contained in the
- object file.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- CHAPTER 2
-
- THE LINKER
-
-
-
-
-
- 2.1 ASLINK RELOCATING LINKER
-
-
- ASLINK is the companion linker for the ASxxxx assemblers.
-
- The program ASLINK is a general relocating linker performing
- the following functions:
-
- 1. Bind multiple object modules into a single memory image
-
- 2. Resolve inter-module symbol references
-
- 3. Combine code belonging to the same area from multiple
- object files into a single contiguous memory region
-
- 4. Perform byte and word program counter relative
- (pc or pcr) addressing calculations
-
- 5. Define absolute symbol values at link time
-
- 6. Define absolute area base address values at link time
-
- 7. Produce Intel Hex or Motorola S19 output file
-
- 8. Produce a map of the linked memory image
-
-
-
-
-
- THE LINKER PAGE 2-2
- INVOKING ASLINK
-
-
- 2.2 INVOKING ASLINK
-
-
- The linker may run in the command line mode or command file
- modes. The allowed startup linker commands are:
-
- -c/-f command line / command file modes
-
- -p/-n enable/disable echo file.lnk input to stdout
-
- If command line mode is selected, all linker commands come
- from stdin, if the command file mode is selected the commands
- are input from the specified file (extension must be .lnk).
-
- The linker is started via
-
- ASLINK -(cfpn)
-
- After invoking the linker the valid options are:
-
- 1. -i/-s Intel Hex (file.ihx) or Motorola S19 (file.s19)
- image output file.
-
- 2. -m Generate a map file (file.map). This file con-
- tains a list of the symbols (by area) with absolute ad-
- dresses, sizes of linked areas, and other linking
- information.
-
- 3. -xdq Specifies the number radix for the map file
- (Hexidecimal, Decimal, or Octal).
-
- 4. fileN Files to be linked. Files may be on the same
- line as the above options or on a separate line(s) one
- file per line or multiple files separated by spaces or
- tabs.
-
- 5. -b area = expression (one definition per line)
- This specifies an area base address where the expres-
- sion may contain constants and/or defined symbols from
- the linked files.
-
- 6. -g symbol = expression (one definition per line)
- This specifies the value for the symbol where the ex-
- pression may contain constants and/or defined symbols
- from the linked files.
-
- 7. -e or null line, terminates input to the linker.
-
-
-
-
-
- THE LINKER PAGE 2-3
- ASLINK PROCESSING
-
-
- 2.3 ASLINK PROCESSING
-
-
- The linker processes the files in the order they are
- presented. The first pass through the input files is used to
- define all program areas, the section area sizes, and symbols
- defined or referenced. After the first pass the -b (area base
- address) definitions, if any, are processed and the areas
- linked.
-
- The area linking proceeds by first examining the area types
- ABS, CON, REL, and OVR. Absolute areas (ABS) from separate ob-
- ject modules are always overlayed and have been assembled at a
- specific address, these are not normally relocated (if a -b com-
- mand is used on an absolute area the area will be relocated).
- Relative areas (normally defined as REL|CON) have a base address
- of 0x0000 as read from the object files, the -b command speci-
- fies the beginning address of the area. All subsequent relative
- areas will be concatenated with proceeding relative areas.
- Where specific ordering is desired, the first linker input file
- should have the area definitions in the desired order. At the
- completion of the area linking all area addresses and lengths
- have been determined.
-
- Next the global symbol definitions (-g option), if any, are
- processed. The symbol definitions have been delayed until this
- point because the absolute addresses of all internal symbols are
- known and can be used in the expression calculations.
-
- Before continuing with the linking process the symbol table
- is scanned to determine if any symbols have been referenced but
- not defined. Undefined symbols are listed on the stderr device.
- if a .module directive was included in the assembled file the
- module making the reference to this undefined variable will be
- printed.
-
- Constants defined as global in more than one module will be
- flagged as multiple definitions if their values are not identi-
- cal.
-
- After the preceeding processes are complete the linker may
- output a map file (-m option). This file provides the following
- information:
-
- 1. Global symbol values and label absolute addresses
-
- 2. Defined areas and there lengths
-
- 3. Remaining undefined symbols
-
- 4. List of modules linked
-
-
-
- THE LINKER PAGE 2-4
- ASLINK PROCESSING
-
-
- 5. List of -b and -g definitions
-
-
-
-
- The final step of the linking process is performed during the
- second pass of the input files. As the xxx.rel files are read
- the code is relocated by substituting the physical addresses for
- the referenced symbols and areas and may be output in Intel or
- Motorola formats. The number of files linked and symbols de-
- fined/referenced is limited by the processor space available to
- build the area/symbol lists.
-
-
- 2.4 LINKER INPUT FORMAT
-
-
- The linkers' input object file is an ascii file containing
- the information needed by the linker to bind multiple object
- modules into a complete loadable memory image.
-
- The object module contains the following designators:
-
- [XDQ][HL]
- X Hexidecimal radix
- D Decimal radix
- Q Octal radix
-
- H Most significant byte first
- L Least significant byte first
-
- H Header
- M Module
- A Area
- S Symbol
- T Object code
- R Relocation information
-
-
- 2.4.1 Object Module Format
-
-
- The first line of an object module contains the [XDQ][HL]
- format specifier (i.e. XH indicates a hexidecimal file with
- most significant byte first) for the following designators.
-
-
-
-
- THE LINKER PAGE 2-5
- LINKER INPUT FORMAT
-
-
- 2.4.2 Header Line
-
- H aa areas gg global symbols
-
- The header line specifies the number of areas(aa) and the
- number of global symbols(gg) defined or referenced in this ob-
- ject module segment.
-
-
- 2.4.3 Module Line
-
- M name
-
- The module line specifies the module name from which this
- header segment was assembled. The module line will not appear
- if the .module directive was not used in the source program.
-
-
- 2.4.4 Symbol Line
-
- S string Defnnnn
-
- or
-
- S string Refnnnn
-
- The symbol line defines (Def) or references (Ref) the symbol
- 'string' with the value nnnn. The defined value is relative to
- the current area base address. References to constants and ex-
- ternal global symbols will always appear before the first area
- definition. References to external symbols will have a value of
- zero.
-
-
- 2.4.5 Area Line
-
- A label size ss flags ff
-
- The area line defines the area label, the size (ss) of the
- area in bytes, and the area flags (ff). The area flags specify
- the ABS, REL, CON, and OVR parameters:
-
- OVR/CON (0x04/0x00 i.e. bit position 2)
-
- ABS/REL (0x08/0x00 i.e. bit position 3)
-
-
-
-
- THE LINKER PAGE 2-6
- LINKER INPUT FORMAT
-
-
- 2.4.6 T Line
-
- T xx xx nn nn nn nn nn ...
-
- The T line contains the assembled code output by the assem-
- bler with xx xx being the offset address from the current area
- base address and nn being the assembled instructions and data in
- byte format.
-
-
- 2.4.7 R Line
-
- R 0 0 nn nn n1 n2 xx xx ...
-
- The R line provides the relocation information to the linker.
- The nn nn value is the current area index, i.e. which area the
- current relocation references. Relocation information is en-
- coded in groups of 4 bytes:
-
- 1. n1 is the relocation mode
- 1. bit 0 word(0x00)/byte(0x01)
- 2. bit 1 relocatable area(0x00)/symbol(0x02)
- 3. bit 2 normal(0x00)/PC relative(0x04) relocation
-
- 2. n2 is a byte index into the corresponding (i.e. pre-
- ceeding) T line data (i.e. a pointer to the data to be
- updated by the relocation)
-
- 3. xx xx is the area/symbol index for the area/symbol be-
- ing referenced. the corresponding area/symbol is found
- in the header area/symbol lists.
-
-
- The groups of 4 bytes are repeated for each item requiring relo-
- cation in the preceeding T line.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- CHAPTER 3
-
- BUILDING ASXXXX AND ASLINK
-
-
-
-
- The assemblers and linker have been successfully compiled us-
- ing the DECUS C compiler (patch level 9) with RT-11/TSX+ and
- with Borland's Turbo C V1.5 with MS-DOS. The only difference is
- the definition of 'VOID' (contained in asm.h and aslink.h) as
- 'char' in DECUS C and as 'void' in Turbo C.
-
- The device specific header file (i.e. 6800.h, 6801.h, etc.)
- contains the DECUS C 'BUILD' directives for generating a command
- file to compile, assemble, and link the necessary files to pre-
- pare an executable image for a particular assembler.
-
-
- 3.1 BUILDING AN ASSEMBLER
-
-
- The building of a typical assembler (6809 for example) re-
- quires the following files:
-
- 1. 6809.H
- 2. M09EXT.C
- 3. M09MCH.C
- 4. M09ADR.C
- 5. M09PST.C
- 6. ASM.H
- 7. ASMAIN.C
- 8. ASLEX.C
- 9. ASSYM.C
- 10. ASSUBR.C
- 11. ASEXPR.C
- 12. ASDATA.C
- 13. ASLIST.C
- 14. ASOUT.C
-
-
- The first five files are the 6809 processor dependent sec-
- tions which contain the following:
-
-
-
- BUILDING ASXXXX AND ASLINK PAGE 3-2
- BUILDING AN ASSEMBLER
-
-
- 1. 6809.h - header file containing the machine specific
- definitions of constants, variables, structures, and
- types
-
- 2. m09ext - device description, byte order, and file ex-
- tension information
-
- 3. m09pst - a table of the assembler general directives,
- special device directives, and assembler mnemonics with
- associated operation codes
-
- 4. m09mch / m09adr - machine specific code for processing
- the device mnemonics, addressing modes, and special
- directives
-
-
- The remaining nine files provide the device independent sec-
- tions which handle the details of file input/output, symbol
- table generation, program/data areas, expression analysis, and
- assembler directive processing.
-
- The assembler defaults to the case sensitive mode. This may
- be altered by changing the case sensitivity flag in asm.h to
-
- /*
- * Case Sensitivity Flag
- */
- #define CASE_SENSITIVE 0
-
- The assemblers and linker should be compiled with the same
- case sensitivity option.
-
- The DECUS C build files are asxxxx.bld and the Turbo C pro-
- ject files are asxxxx.prj.
-
-
- 3.2 BUILDING ASLINK
-
-
- The building of the linker requires the following files:
-
- 1. ASLINK.H
- 2. LKMAIN.C
- 3. LKLEX.C
- 4. LKAREA.C
- 5. LKHEAD.C
- 6. LKSYM.C
- 7. LKEVAL.C
- 8. LKDATA.C
- 9. LKLIST.C
- 10. LKRLOC.C
-
-
- BUILDING ASXXXX AND ASLINK PAGE 3-3
- BUILDING ASLINK
-
-
- 11. LKS19.C
- 12. LKIHX.C
-
-
- The linker defaults to the case sensitive mode. This may be
- altered by changing the case sensitivity flag in aslink.h to
-
- /*
- * Case Sensitivity Flag
- */
- #define CASE_SENSITIVE 0
-
- The linker and assemblers should be compiled with the same
- case sensitivity option.
-
- The DECUS C build file is aslink.bld and the Turbo C project
- file is aslink.prj.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- APPENDIX A
-
- AS6800 ASSEMBLER
-
-
-
-
-
- A.1 .setdp DIRECTIVE
-
- Format:
-
- .setdp [area]
-
- The .setdp directive informs the assembler in which area the
- direct page is located. If the optional area name is left
- blank, then the current area is defined as containing the direct
- page. If a .setdp directive is not issued the assembler
- defaults the direct page to the area "_CODE". The .setdp direc-
- tive is required when using the relocation features so that the
- direct page space may be independently positioned at link time.
-
- The assembler verifies that any variable referenced as a
- direct variable is located in this area and has a value from 0
- to 255.
-
-
- A.2 6800 REGISTER SET
-
- The following is a list of the 6800 registers used by AS6800:
-
- a,b - 8-bit accumulators
- x - index register
-
-
-
-
- AS6800 ASSEMBLER PAGE A-2
- 6800 INSTRUCTION SET
-
-
- A.3 6800 INSTRUCTION SET
-
-
- The following tables list all 6800/6802/6808 mnemonics recog-
- nized by the AS6800 assembler. The designation [] refers to a
- required addressing mode argument. The following list specifies
- the format for each addressing mode supported by AS6800:
-
- #data immediate data
- byte or word data
-
- *dir direct page addressing
- (see .setdp directive)
- 0 <= dir <= 255
- (the value of dir must be defined
- within the current assembly)
-
- ,x register indirect addressing
- zero offset
-
- offset,x register indirect addressing
- 0 <= offset <= 255
- (the value of offset must be defined
- within the current assembly)
-
- ext extended addressing
-
- label branch label
-
- The terms data, dir, offset, ext, and label may all be expres-
- sions. The terms dir, offset, and label are not allowed to be
- external references.
-
- Note that not all addressing modes are valid with every in-
- struction, refer to the 6800 technical data for valid modes.
-
-
- AS6800 ASSEMBLER PAGE A-3
- 6800 INSTRUCTION SET
-
-
- A.3.1 Inherent Instructions
-
- aba cba
- clc cli
- clv daa
- des dex
- ins inx
- nop rti
- rts sba
- sec sei
- sev swi
- tab tap
- tba tpa
- tsx txs
- wai
-
- psha pshb
- psh a psh b
- pula pulb
- pul a pul b
-
-
- A.3.2 Branch Instructions
-
- bra label bhi label
- bls label bcc label
- bhs label bcs label
- blo label bne label
- beq label bvc label
- bvs label bpl label
- bmi label bge label
- blt label bgt label
- ble label bsr label
-
-
- AS6800 ASSEMBLER PAGE A-4
- 6800 INSTRUCTION SET
-
-
- A.3.3 Single Operand Instructions
-
- asla aslb
- asl a asl b
- asl []
-
- asra asrb
- asr a asr b
- asr []
-
- clra clrb
- clr a clr b
- clr []
-
- coma comb
- com a com b
- com []
-
- deca decb
- dec a dec b
- dec []
-
- inca incb
- inc a inc b
- inc []
-
- lsla lslb
- lsl a lsl b
- lsl []
-
- lsra lsrb
- lsr a lsr b
- lsr []
-
- nega negb
- neg a neg b
- neg []
-
- rola rolb
- rol a rol b
- rol []
-
- rora rorb
- ror a ror b
- ror []
-
- tsta tstb
- tst a tst b
- tst []
-
-
- AS6800 ASSEMBLER PAGE A-5
- 6800 INSTRUCTION SET
-
-
- A.3.4 Double Operand Instructions
-
- adca [] adcb []
- adc a [] adc b []
-
- adda [] addb []
- add a [] add b []
-
- anda [] andb []
- and a [] and b []
-
- bita [] bitb []
- bit a [] bit b []
-
- cmpa [] cmpb []
- cmp a [] cmp b []
-
- eora [] eorb []
- eor a [] eor b []
-
- ldaa [] ldab []
- lda a [] lda b []
-
- oraa [] orab []
- ora a [] ora b []
-
- sbca [] sbcb []
- sbc a [] sbc b []
-
- staa [] stab []
- sta a [] sta b []
-
- suba [] subb []
- sub a [] sub b []
-
-
- A.3.5 Jump and Jump to Subroutine Instructions
-
- jmp [] jsr []
-
-
-
-
- AS6800 ASSEMBLER PAGE A-6
- 6800 INSTRUCTION SET
-
-
- A.3.6 Long Register Instructions
-
- cpx []
- lds [] sts []
- ldx [] stx []
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- APPENDIX B
-
- AS6801 ASSEMBLER
-
-
-
-
-
- B.1 .setdp DIRECTIVE
-
- Format:
-
- .setdp [area]
-
- The .setdp directive informs the assembler in which area the
- direct page is located. If the optional area name is left
- blank, then the current area is defined as containing the direct
- page. If a .setdp directive is not issued the assembler
- defaults the direct page to the area "_CODE". The .setdp direc-
- tive is required when using the relocation features so that the
- direct page space may be positioned properly at link time.
-
- The assembler verifies that any variable referenced as a
- direct variable is located in this area and has a value from 0
- to 255.
-
-
- B.2 .hd6303 DIRECTIVE
-
- Format:
-
- .hd6303
-
- The .hd6303 directive enables processing of the HD6303 specific
- mnemonics not included in the 6801 instruction set. HD6303
- mnemonics encountered without the .hd6303 directive will be
- flagged with an 'o' error.
-
-
-
-
- AS6801 ASSEMBLER PAGE B-2
- 6801 REGISTER SET
-
-
- B.3 6801 REGISTER SET
-
- The following is a list of the 6801 registers used by AS6801:
-
- a,b - 8-bit accumulators
- d - 16-bit accumulator <a:b>
- x - index register
-
-
- B.4 6801 INSTRUCTION SET
-
-
- The following tables list all 6801/6303 mnemonics recognized
- by the AS6801 assembler. The designation [] refers to a re-
- quired addressing mode argument. The following list specifies
- the format for each addressing mode supported by AS6801:
-
- #data immediate data
- byte or word data
-
- *dir direct page addressing
- (see .setdp directive)
- 0 <= dir <= 255
- (the value of dir must be defined
- within the current assembly)
-
- ,x register indirect addressing
- zero offset
-
- offset,x register indirect addressing
- 0 <= offset <= 255
- (the value of offset must be defined
- within the current assembly)
-
- ext extended addressing
-
- label branch label
-
- The terms data, dir, offset, ext, and label may all be expres-
- sions. The terms dir, offset, and label are not allowed to be
- external references.
-
- Note that not all addressing modes are valid with every in-
- struction, refer to the 6801/6303 technical data for valid
- modes.
-
-
- AS6801 ASSEMBLER PAGE B-3
- 6801 INSTRUCTION SET
-
-
- B.4.1 Inherent Instructions
-
- aba abx
- cba clc
- cli clv
- daa des
- dex ins
- inx mul
- nop rti
- rts sba
- sec sei
- sev swi
- tab tap
- tba tpa
- tsx txs
- wai
-
-
- B.4.2 Branch Instructions
-
- bra label brn label
- bhi label bls label
- bcc label bhs label
- bcs label blo label
- bne label beq label
- bvc label bvs label
- bpl label bmi label
- bge label blt label
- bgt label ble label
- bsr label
-
-
- B.4.3 Single Operand Instructions
-
- asla aslb asld
- asl a asl b asl d
- asl []
-
- asra asrb
- asr a asr b
- asr []
-
- clra clrb
- clr a clr b
- clr []
-
- coma comb
- com a com b
- com []
-
- deca decb
- dec a dec b
-
-
- AS6801 ASSEMBLER PAGE B-4
- 6801 INSTRUCTION SET
-
-
- dec []
-
- eora eorb
- eor a eor b
- eor []
-
- inca incb
- inc a inc b
- inc []
-
- lsla lslb lsld
- lsl a lsl b lsl d
- lsl []
-
- lsra lsrb lsrd
- lsr a lsr b lsr d
- lsr []
-
- nega negb
- neg a neg b
- neg []
-
- psha pshb pshx
- psh a psh b psh x
-
- pula pulb pulx
- pul a pul b pul x
-
- rola rolb
- rol a rol b
- rol []
-
- rora rorb
- ror a ror b
- ror []
-
- tsta tstb
- tst a tst b
- tst []
-
-
- AS6801 ASSEMBLER PAGE B-5
- 6801 INSTRUCTION SET
-
-
- B.4.4 Double Operand Instructions
-
- adca [] adcb []
- adc a [] adc b []
-
- adda [] addb [] addd []
- add a [] add b [] add d []
-
- anda [] andb []
- and a [] and b []
-
- bita [] bitb []
- bit a [] bit b []
-
- cmpa [] cmpb []
- cmp a [] cmp b []
-
- ldaa [] ldab []
- lda a [] lda b []
-
- oraa [] orab []
- ora a [] ora b []
-
- sbca [] sbcb []
- sbc a [] sbc b []
-
- staa [] stab []
- sta a [] sta b []
-
- suba [] subb [] subd []
- sub a [] sub b [] sub d []
-
-
- B.4.5 Jump and Jump to Subroutine Instructions
-
- jmp [] jsr []
-
-
- B.4.6 Long Register Instructions
-
- cpx [] ldd []
- lds [] ldx []
- std [] sts []
- stx []
-
-
- AS6801 ASSEMBLER PAGE B-6
- 6801 INSTRUCTION SET
-
-
- B.4.7 6303 Specific Instructions
-
- aim #data, [] eim #data, []
- oim #data, [] tim #data, []
-
- xgdx slp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- APPENDIX C
-
- AS6804 ASSEMBLER
-
-
-
-
- Because the 6804 has only a 256 byte ram space the .setdp
- directive is not supported.
-
-
- C.1 6804 REGISTER SET
-
- The following is a list of the 6804 registers used by AS6804:
-
- x,y - index registers
-
-
- C.2 6804 INSTRUCTION SET
-
-
- The following tables list all 6804 mnemonics recognized by
- the AS6804 assembler. The designation [] refers to a required
- addressing mode argument. The following list specifies the
- format for each addressing mode supported by AS6804:
-
- #data immediate data
- byte or word data
-
- ,x register indirect addressing
-
- dir direct addressing
- 0 <= dir <= 255
-
- ext extended addressing
-
- label branch label
-
- The terms data, dir, and ext may be expressions. The terms dir
- and label are not allowed to be external references.
-
- Note that not all addressing modes are valid with every in-
- struction, refer to the 6804 technical data for valid modes.
-
-
- AS6804 ASSEMBLER PAGE C-2
- 6804 INSTRUCTION SET
-
-
- C.2.1 Inherent Instructions
-
- coma decx
- decy incx
- incy rola
- rti rts
- stop tax
- tay txa
- tya wait
-
-
- C.2.2 Branch Instructions
-
- bne label beq label
- bcc label bcs label
-
-
- C.2.3 Single Operand Instructions
-
- add []
- and []
- cmp []
- dec []
- inc []
- lda []
- sta []
- sub []
-
-
- C.2.4 Jump and Jump to Subroutine Instructions
-
- jsr []
- jmp []
-
-
- C.2.5 Bit Test Instructions
-
- brclr #data,[],label
- brset #data,[],label
-
- bclr #label,[]
- bset #label,[]
-
-
-
-
- AS6804 ASSEMBLER PAGE C-3
- 6804 INSTRUCTION SET
-
-
- C.2.6 Load Immediate data Instruction
-
- mvi [],#data
-
-
- C.2.7 6804 Derived Instructions
-
- asla
- bam label
- bap label
- bxmi label
- bxpl label
- bymi label
- bypl label
- clra
- clrx
- clry
- deca
- decx
- decy
- inca
- incx
- incy
- ldxi #data
- ldyi #data
- nop
- tax
- tay
- txa
- tya
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- APPENDIX D
-
- AS6805 ASSEMBLER
-
-
-
-
-
- D.1 .setdp DIRECTIVE
-
- Format:
-
- .setdp [area]
-
- The .setdp directive informs the assembler in which area the
- direct page is located. If the optional area name is left
- blank, then the current area is defined as containing the direct
- page. If a .setdp directive is not issued the assembler
- defaults the direct page to the area "_CODE". The .setdp direc-
- tive is required when using the relocation features so that the
- direct page space may be positioned properly at link time.
-
- The assembler verifies that any variable referenced as a
- direct variable is located in this area and has a value from 0
- to 255.
-
-
- D.2 6805 REGISTER SET
-
- The following is a list of the 6805 registers used by AS6805:
-
- a - 8-bit accumulator
- x - index register
-
-
-
-
- AS6805 ASSEMBLER PAGE D-2
- 6805 INSTRUCTION SET
-
-
- D.3 6805 INSTRUCTION SET
-
-
- The following tables list all 6805 mnemonics recognized by
- the AS6805 assembler. The designation [] refers to a required
- addressing mode argument. The following list specifies the
- format for each addressing mode supported by AS6805:
-
- #data immediate data
- byte or word data
-
- *dir direct page addressing
- (see .setdp directive)
- 0 <= dir <= 255
- (the value of dir must be defined
- within the current assembly)
-
- ,x register indirect addressing
- zero offset
-
- offset,x register indirect addressing
- 0 <= offset <= 255 --- byte mode
- 256 <= offset <= 65535 --- word mode
- (an externally defined offset uses the
- word mode)
-
- ext extended addressing
-
- label branch label
-
- The terms data, dir, offset, and ext may all be expressions.
- The terms dir and label are not allowed to be an external refer-
- ence.
-
- Note that not all addressing modes are valid with every in-
- struction, refer to the 6805 technical data for valid modes.
-
-
- D.3.1 Control Instructions
-
- clc cli
- nop rsp
- rti rts
- sec sei
- stop swi
- tax txa
- wait
-
-
-
-
- AS6805 ASSEMBLER PAGE D-3
- 6805 INSTRUCTION SET
-
-
- D.3.2 Bit Manipulation Instructions
-
- brset #data,*dir,label
- brclr #data,*dir,label
-
- bset #data,*dir
- bclr #data,*dir
-
-
- D.3.3 Branch Instructions
-
- bra label brn label
- bhi label bls label
- bcc label bcs label
- bne label beq label
- bhcc label bhcs label
- bpl label bmi label
- bmc label bms label
- bil label bih label
- bsr label
-
-
- AS6805 ASSEMBLER PAGE D-4
- 6805 INSTRUCTION SET
-
-
- D.3.4 Read-Modify-Write Instructions
-
- nega negx
- neg []
-
- coma comx
- com []
-
- lsra lsrx
- lsr []
-
- rora rorx
- ror []
-
- asra asrx
- asr []
-
- lsla lslx
- lsl []
-
- rola rolx
- rol []
-
- deca decx
- dec []
-
- inca incx
- inc []
-
- tsta tstx
- tst []
-
- clra clrx
- clr []
-
-
- D.3.5 Register\Memory Instructions
-
- sub [] cmp []
- sbc [] cpx []
- and [] bit []
- lda [] sta []
- eor [] adc []
- ora [] add []
- ldx [] stx []
-
-
- AS6805 ASSEMBLER PAGE D-5
- 6805 INSTRUCTION SET
-
-
- D.3.6 Jump and Jump to Subroutine Instructions
-
- jmp [] jsr []
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- APPENDIX E
-
- AS6809 ASSEMBLER
-
-
-
-
-
- E.1 .setdp DIRECTIVE
-
- Format:
-
- .setdp base [,area]
-
- The .setdp directive informs the assembler the base address of
- the direct page region (the low-order 8-bits of the base address
- are cleared) and specifies the direct page area. If the op-
- tional area name is left blank, then the current area is defined
- as containing the direct page. If a .setdp directive is not is-
- sued the assembler defaults the direct page to the area "_CODE".
- The .setdp directive is required when using the relocation
- features so that the direct page space may be positioned
- properly at link time.
-
- The assembler verifies that any variable referenced as a
- direct variable is located in this area and has a value from 0
- to 255. It is the programmers responsibility to load the dp
- register with the correct page segment.
-
-
- E.2 6809 REGISTER SET
-
- The following is a list of the 6809 registers used by AS6809:
-
- a,b - 8-bit accumulators
- d - 16-bit accumulator <a:b>
- x,y - index registers
- s,u - stack pointers
- pc - program counter
- cc - condition code
- dp - direct page
-
-
-
-
- AS6809 ASSEMBLER PAGE E-2
- 6809 INSTRUCTION SET
-
-
- E.3 6809 INSTRUCTION SET
-
-
- The following tables list all 6809 mnemonics recognized by
- the AS6809 assembler. The designation [] refers to a required
- addressing mode argument. The following list specifies the
- format for each addressing mode supported by AS6809:
-
- #data immediate data
- byte or word data
-
- *dir direct page addressing
- (see .setdp directive)
- 0 <= dir <= 255
- (the value of dir must be defined
- within the current assembly)
-
- label branch label
-
- r,r1,r2 registers
- cc,a,b,d,dp,x,y,s,u,pc
-
- ,-x ,--x register indexed
- autodecrement
-
- ,x+ ,x++ register indexed
- autoincrement
-
- ,x register indexed addressing
- zero offset
-
- offset,x register indexed addressing
- -16 <= offset <= 15 --- 5-bit
- -128 <= offset <= -17 --- 8-bit
- 16 <= offset <= 127 --- 8-bit
- -32768 <= offset <= -129 --- 16-bit
- 128 <= offset <= 32767 --- 16-bit
- (external definition of offset
- uses 16-bit mode)
-
- a,x accumulator offset indexed addressing
-
- ext extended addressing
-
- ext,pc pc addressing ( pc <- pc + ext )
-
- ext,pcr pc relative addressing
-
- [,--x] register indexed indirect
- autodecrement
-
- [,x++] register indexed indirect
-
-
- AS6809 ASSEMBLER PAGE E-3
- 6809 INSTRUCTION SET
-
-
- autoincrement
-
- [,x] register indexed indirect addressing
- zero offset
-
- [offset,x] register indexed indirect addressing
- -128 <= offset <= 127 --- 8-bit
- -32768 <= offset <= -129 --- 16-bit
- 128 <= offset <= 32767 --- 16-bit
- (external definition of offset
- uses 16-bit mode)
-
- [a,x] accumulator offset indexed
- indirect addressing
-
- [ext] extended indirect addressing
-
- [ext,pc] pc indirect addressing
- ( [pc <- pc + ext] )
-
- [ext,pcr] pc relative indirect addressing
-
- The terms data, dir, label, offset, and ext may all be expres-
- sions. The terms dir and a short label are not allowed to be an
- external reference.
-
- Note that not all addressing modes are valid with every in-
- struction, refer to the 6809 technical data for valid modes.
-
-
- AS6809 ASSEMBLER PAGE E-4
- 6809 INSTRUCTION SET
-
-
- E.3.1 Inherent Instructions
-
- abx daa
- mul nop
- rti rts
- sex swi
- swi1 swi2
- swi3 sync
-
-
- E.3.2 Short Branch Instructions
-
- bcc label bcs label
- beq label bge label
- bgt label bhi label
- bhis label bhs label
- ble label blo label
- blos label bls label
- blt label bmi label
- bne label bpl label
- bra label brn label
- bvc label bvs label
- bsr label
-
-
- E.3.3 Long Branch Instructions
-
- lbcc label lbcs label
- lbeq label lbge label
- lbgt label lbhi label
- lbhis label lbhs label
- lble label lblo label
- lblos label lbls label
- lblt label lbmi label
- lbne label lbpl label
- lbra label lbrn label
- lbvc label lbvs label
- lbsr label
-
-
- AS6809 ASSEMBLER PAGE E-5
- 6809 INSTRUCTION SET
-
-
- E.3.4 Single Operand Instructions
-
- asla aslb
- asl []
-
- asra asrb
- asr []
-
- clra clrb
- clr []
-
- coma comb
- com []
-
- deca decb
- dec []
-
- inca incb
- inc []
-
- lsla lslb
- lsl []
-
- lsra lsrb
- lsr []
-
- nega negb
- neg []
-
- rola rolb
- rol []
-
- rora rorb
- ror []
-
- tsta tstb
- tst []
-
-
- AS6809 ASSEMBLER PAGE E-6
- 6809 INSTRUCTION SET
-
-
- E.3.5 Double Operand Instructions
-
- adca [] adcb []
-
- adda [] addb []
-
- anda [] andb []
-
- bita [] bitb []
-
- cmpa [] cmpb []
-
- eora [] eorb []
-
- lda [] ldb []
-
- ora [] orb []
-
- sbca [] sbcb []
-
- sta [] stb []
-
- suba [] subb []
-
-
- E.3.6 D-register Instructions
-
- addd [] subd []
- cmpd [] ldd []
- std []
-
-
- E.3.7 Index/Stack Register Instructions
-
- cmps [] cmpu []
- cmpx [] cmpy []
-
- lds [] ldu []
- ldx [] ldy []
-
- leas [] leau []
- leax [] leay []
-
- sts [] stu []
- stx [] sty []
-
- pshs r pshu r
- puls r pulu r
-
-
- AS6809 ASSEMBLER PAGE E-7
- 6809 INSTRUCTION SET
-
-
- E.3.8 Jump and Jump to Subroutine Instructions
-
- jmp [] jsr []
-
-
- E.3.9 Register - Register Instructions
-
- exg r1,r2 tfr r1,r2
-
-
- E.3.10 Condition Code Register Instructions
-
- andcc #data orcc #data
- cwai #data
-
-
- E.3.11 6800 Compatibility Instructions
-
- aba cba
- clc cli
- clv des
- dex ins
- inx
- ldaa [] ldab []
- oraa [] orab []
- psha pshb
- pula pulb
- sba sec
- sei sev
- staa [] stab []
- tab tap
- tba tpa
- tsx txs
- wai
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- APPENDIX F
-
- AS6811 ASSEMBLER
-
-
-
-
-
- F.1 .setdp DIRECTIVE
-
- Format:
-
- .setdp [area]
-
- The .setdp directive informs the assembler in which area the
- direct page is located. If the optional area name is left
- blank, then the current area is defined as containing the direct
- page. If a .setdp directive is not issued the assembler
- defaults the direct page to the area "_CODE". The .setdp direc-
- tive is required when using the relocation features so that the
- direct page space may be positioned properly at link time.
-
- The assembler verifies that any variable referenced as a
- direct variable is located in this area and has a value from 0
- to 255.
-
-
- F.2 6811 REGISTER SET
-
- The following is a list of the 6811 registers used by AS6811:
-
- a,b - 8-bit accumulators
- d - 16-bit accumulator <a:b>
- x,y - index registers
-
-
-
-
- AS6811 ASSEMBLER PAGE F-2
- 6811 INSTRUCTION SET
-
-
- F.3 6811 INSTRUCTION SET
-
-
- The following tables list all 6811 mnemonics recognized by
- the AS6811 assembler. The designation [] refers to a required
- addressing mode argument. The following list specifies the
- format for each addressing mode supported by AS6811:
-
- #data immediate data
- byte or word data
-
- *dir direct page addressing
- (see .setdp directive)
- 0 <= dir <= 255
- (the value of dir must be defined
- within the current assembly)
-
- ,x register indirect addressing
- zero offset
-
- offset,x register indirect addressing
- 0 <= offset <= 255
- (the value of offset must be defined
- within the current assembly)
-
- ext extended addressing
-
- label branch label
-
- The terms data, dir, offset, and ext may all be expressions.
- The terms dir, offset, and label are not allowed to be external
- references.
-
- Note that not all addressing modes are valid with every in-
- struction, refer to the 6811 technical data for valid modes.
-
-
- AS6811 ASSEMBLER PAGE F-3
- 6811 INSTRUCTION SET
-
-
- F.3.1 Inherent Instructions
-
- aba abx
- aby cba
- clc cli
- clv daa
- des dex
- dey fdiv
- idiv ins
- inx iny
- mul nop
- rti rts
- sba sec
- sei sev
- stop swi
- tab tap
- tba tpa
- tsx txs
- wai xgdx
- xgdy
-
- psha pshb
- psh a psh b
- pshx pshy
- psh x psh y
-
- pula pulb
- pul a pul b
- pulx puly
- pul x pul y
-
-
- F.3.2 Branch Instructions
-
- bra label brn label
- bhi label bls label
- bcc label bhs label
- bcs label blo label
- bne label beq label
- bvc label bvs label
- bpl label bmi label
- bge label blt label
- bgt label ble label
- bsr label
-
-
- AS6811 ASSEMBLER PAGE F-4
- 6811 INSTRUCTION SET
-
-
- F.3.3 Single Operand Instructions
-
- asla aslb asld
- asl a asl b asl d
- asl []
-
- asra asrb
- asr a asr b
- asr []
-
- clra clrb
- clr a clr b
- clr label
-
- coma comb
- com a com b
- com []
-
- deca decb
- dec a dec b
- dec []
-
- inca incb
- inc a inc b
- inc []
-
- lsla lslb lsld
- lsl a lsl b lsl d
- lsl []
-
- lsra lsrb lsrd
- lsr a lsr b lsr d
- lsr []
-
- nega negb
- neg a neg b
- neg []
-
- rola rolb
- rol a rol b
- rol []
-
- rora rorb
- ror a ror b
- ror []
-
- tsta tstb
- tst a tst b
- tst []
-
-
- AS6811 ASSEMBLER PAGE F-5
- 6811 INSTRUCTION SET
-
-
- F.3.4 Double Operand Instructions
-
- adca [] adcb []
- adc a [] adc b []
-
- adda [] addb [] addd []
- add a [] add b [] add d []
-
- anda [] andb []
- and a [] and b []
-
- bita [] bitb []
- bit a [] bit b []
-
- cmpa [] cmpb []
- cmp a [] cmp b []
-
- eora [] eorb []
- eor a [] eor b []
-
- ldaa [] ldab []
- lda a [] lda b []
-
- oraa [] orab []
- ora a [] ora b []
-
- sbca [] sbcb []
- sbc a [] sbc b []
-
- staa [] stab []
- sta a [] sta b []
-
- suba [] subb [] subd []
- sub a [] sub b [] sub d []
-
-
- F.3.5 Bit Manupulation Instructions
-
- bclr [],#data
- bset [],#data
-
- brclr [],#data,label
- brset [],#data,label
-
-
-
-
- AS6811 ASSEMBLER PAGE F-6
- 6811 INSTRUCTION SET
-
-
- F.3.6 Jump and Jump to Subroutine Instructions
-
- jmp [] jsr []
-
-
- F.3.7 Long Register Instructions
-
- cpx [] cpy []
-
- ldd [] lds []
- ldx [] ldy []
-
- std [] sts []
- stx [] sty []
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- APPENDIX G
-
- AS8085 ASSEMBLER
-
-
-
-
-
- G.1 8085 REGISTER SET
-
- The following is a list of the 8080/8085 registers used by
- AS8085:
-
- a,b,c,d,e,h,l - 8-bit accumulators
- m - memory through (hl)
- sp - stack pointer
- psw - status word
-
-
- G.2 8085 INSTRUCTION SET
-
-
- The following tables list all 8080/8085 mnemonics recognized
- by the AS8085 assembler. The following list specifies the
- format for each addressing mode supported by AS8085:
-
- #data immediate data
- byte or word data
-
- r,r1,r2 register or register pair
- psw,a,b,c,d,e,h,l
- bc,de,hl,sp,pc
-
- m memory address using (hl)
-
- addr direct memory addressing
-
- label call or jump label
-
- The terms data, m, addr, and label may be expressions.
-
- Note that not all addressing modes are valid with every in-
- struction, refer to the 8080/8085 technical data for valid
- modes.
-
-
- AS8085 ASSEMBLER PAGE G-2
- 8085 INSTRUCTION SET
-
-
- G.2.1 Inherent Instructions
-
- cma cmc
- daa di
- ei hlt
- nop pchl
- ral rar
- ret rim
- rrc rlc
- sim sphl
- stc xchg
- xthl
-
-
- G.2.2 Register/Memory/Immediate Instructions
-
- adc r adc m aci #data
- add r add m adi #data
- ana r ana m ani #data
- cmp r cmp m cpi #data
- ora r ora m ori #data
- sbb r sbb m sbi #data
- sub r sub m sui #data
- xra r xra m xri #data
-
-
- G.2.3 Call and Return Instructions
-
- cc label rc
- cm label rm
- cnc label rnc
- cnz label rnz
- cp label rp
- cpe label rpe
- cpo label rpo
- cz label rz
- call label
-
-
- G.2.4 Jump Instructions
-
- jc label
- jm label
- jnc label
- jnz label
- jp label
- jpe label
- jpo label
- jz label
- jmp label
-
-
- AS8085 ASSEMBLER PAGE G-3
- 8085 INSTRUCTION SET
-
-
- G.2.5 Input/Output/Reset Instructions
-
- in data
- out data
- rst data
-
-
- G.2.6 Move Instructions
-
- mov r1,r2
- mov r,m
- mov m,r
-
- mvi r,#data
- mvi m,#data
-
-
- G.2.7 Other Instructions
-
- dcr r dcr m
- inr r inr m
-
- dad r dcx r
- inx r ldax r
- pop r push r
- stax r
-
- lda addr lhld addr
- shld addr sta addr
-
- lxi r,#data
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- APPENDIX H
-
- ASZ80 ASSEMBLER
-
-
-
-
-
- H.1 .hd64 DIRECTIVE
-
- Format:
-
- .hd64
-
- The .hd64 directive enables processing of the HD64180 specific
- mnemonics not included in the Z80 instruction set. HD64180
- mnemonics encountered without the .hd64 directive will be
- flagged with an 'o' error.
-
-
- H.2 Z80 REGISTER SET AND CONDITIONS
-
-
- The following is a complete list of register designations and
- condition mnemonics:
-
- byte registers - a,b,c,d,e,h,l,i,r
- register pairs - af,af',bc,de,hl
- word registers - pc,sp,ix,iy
-
- C - carry bit set
- M - sign bit set
- NC - carry bit clear
- NZ - zero bit clear
- P - sign bit clear
- PE - parity even
- PO - parity odd
- Z - zero bit set
-
-
-
-
- ASZ80 ASSEMBLER PAGE H-2
- Z80 INSTRUCTION SET
-
-
- H.3 Z80 INSTRUCTION SET
-
-
- The following tables list all Z80/HD64180 mnemonics recog-
- nized by the ASZ80 assembler. The designation [] refers to a
- required addressing mode argument. The following list specifies
- the format for each addressing mode supported by ASZ80:
-
- #data immediate data
- byte or word data
-
- n byte value
-
- rg a byte register
- a,b,c,d,e,h,l
-
- rp a register pair
- bc,de,hl
-
- (hl) implied addressing or
- register indirect addressing
-
- (label) direct addressing
-
- offset(ix) indexed addressing with
- an offset
-
- label call/jmp/jr label
-
- The terms data, dir, offset, and ext may all be expressions.
- The terms dir and offset are not allowed to be external refer-
- ences.
-
- Note that not all addressing modes are valid with every in-
- struction, refer to the Z80/HD64180 technical data for valid
- modes.
-
-
- ASZ80 ASSEMBLER PAGE H-3
- Z80 INSTRUCTION SET
-
-
- H.3.1 Inherent Instructions
-
- ccf cpd
- cpdr cpi
- cpir cpl
- daa di
- ei exx
- halt neg
- nop reti
- retn rla
- rlca rld
- rra rrca
- rrd scf
-
-
- H.3.2 Implicit Operand Instructions
-
- adc a,[] adc []
- add a,[] add []
- and a,[] and []
- cp a,[] cp []
- dec a,[] dec []
- inc a,[] inc []
- or a,[] or []
- rl a,[] rl []
- rlc a,[] rlc []
- rr a,[] rr []
- rrc a,[] rrc []
- sbc a,[] sbc []
- sla a,[] sla []
- sra a,[] sra []
- srl a,[] srl []
- sub a,[] sub []
- xor a,[] xor []
-
-
- ASZ80 ASSEMBLER PAGE H-4
- Z80 INSTRUCTION SET
-
-
- H.3.3 Load Instruction
-
- ld rg,[] ld [],rg
- ld (bc),a ld a,(bc)
- ld (de),a ld a,(de)
- ld (label),a ld a,(label)
- ld (label),rp ld rp,(label)
- ld i,a ld r,a
- ld a,i ld a,r
- ld sp,hl ld sp,ix
- ld sp,iy ld rp,#data
-
- ldd lddr
- ldi ldir
-
-
- H.3.4 Call/Return Instructions
-
- call C,label ret C
- call M,label ret M
- call NC,label ret NC
- call NZ,label ret NZ
- call P,label ret P
- call PE,label ret PE
- call PO,label ret PO
- call Z,label ret Z
- call label ret
-
-
- H.3.5 Jump and Jump to Subroutine Instructions
-
- jp C,label jp M,label
- jp NC,label jp NZ,label
- jp P,label jp PE,label
- jp PO,label jp Z,label
-
- jp (hl) jp (ix)
- jp (iy) jp label
-
- djnz label
-
- jr C,label jr NC,label
- jr NZ,label jr Z,label
- jr label
-
-
- ASZ80 ASSEMBLER PAGE H-5
- Z80 INSTRUCTION SET
-
-
- H.3.6 Bit Manipulation Instructions
-
- bit n,[]
- res n,[]
- set n,[]
-
-
- H.3.7 Interrupt Mode and Reset Instructions
-
- im n
- im n
- im n
- rst n
-
-
- H.3.8 Input and Output Instructions
-
- in a,(n) in rg,(c)
- ind indr
- ini inir
-
- out (n),a out (c),rg
- outd otdr
- outi otir
-
-
- H.3.9 Register Pair Instructions
-
- add hl,rp add ix,rp
- add iy,rp
-
- adc hl,rp sbc hl,rp
-
- ex (sp),hl ex (sp),ix
- ex (sp),iy
- ex de,hl
- ex af,af'
-
- push rp pop rp
-
-
- ASZ80 ASSEMBLER PAGE H-6
- Z80 INSTRUCTION SET
-
-
- H.3.10 HD64180 Specific Instructions
-
- in0 rg,(n)
- out0 (n),rg
-
- otdm otdmr
- otim otimr
-
- mlt bc mlt de
- mlt hl mlt sp
-
- slp
-
- tst a
- tstio #data
-