mirror of
https://github.com/SEPPDROID/Digital-Research-Source-Code.git
synced 2025-10-27 02:14:19 +00:00
Upload
Digital Research
This commit is contained in:
@@ -0,0 +1,834 @@
|
||||
.pn 95
|
||||
.bp odd
|
||||
.mt 5
|
||||
.mb 6
|
||||
.pl 66
|
||||
.ll 65
|
||||
.po 10
|
||||
.hm 2
|
||||
.fm 2
|
||||
.he
|
||||
.ft All Information Presented Here is Proprietary to Digital Research
|
||||
.tc 5 AS68 Assembler
|
||||
.ce 2
|
||||
=================== ENTIRE SECTION MUST BE RE-WRITTEN ===============
|
||||
=================== STARTING WITH McCLURE'S STUFF ===============
|
||||
.sh
|
||||
Section 5
|
||||
.qs
|
||||
.sp
|
||||
.sh
|
||||
AS68 Assembler
|
||||
.qs
|
||||
.sp 3
|
||||
.he CP/M-8000 Programmer's Guide 5.1 Assembler Operation
|
||||
.tc 5.1 Assembler Operation
|
||||
.sh
|
||||
5.1 Assembler Operation
|
||||
.qs
|
||||
.ix assembler (AS68) operation
|
||||
.pp 5
|
||||
The CP/M-8000 Assembler, AS68, assembles an assembly language source program
|
||||
for execution on the a Z8000 microprocessor. It produces a relocatable
|
||||
object file and, optionally, a listing. The assembly language
|
||||
accepted by AS68 is identical to that of the Zilog Z8000 assembler
|
||||
described in the Zilog manuals: \c
|
||||
.ul
|
||||
MZ8000 Resident Structured Assembler Reference Manual M8000MASM(D4) \c
|
||||
.qu
|
||||
and the \c
|
||||
.ul
|
||||
16-bit Microprocessor User's Manual, \c
|
||||
.qu
|
||||
third edition Z8000UM(AD3). Appendix D contains a summary of the
|
||||
instruction set. Exceptions and additions are described in Sections 5.6
|
||||
and 5.7.
|
||||
.sp 2
|
||||
.tc 5.2 Initializing AS68
|
||||
.he CP/M-8000 Programmer's Guide 5.2 Initializing AS68
|
||||
.sh
|
||||
5.2 Initializing AS68
|
||||
.pp
|
||||
If the file AS68SYM.DAT is not on your disk, you must create this file
|
||||
to initialize AS68 before you can use AS68 to assemble files. To
|
||||
initialize AS68, specify the AS68 command, the -I option, and the filename
|
||||
AS68INIT as shown below.
|
||||
.sp
|
||||
.ti 10
|
||||
AS68 -I AS68INIT
|
||||
.sp
|
||||
AS68 creates the output file AS68SYMB.DAT, which AS68 requires
|
||||
when it assembles programs. After you create this file, you need not
|
||||
specify this command line again unless you reconfigure your
|
||||
system to have different TPA boundaries.
|
||||
.sp 2
|
||||
.tc 5.3 Invoking the Assembler (AS68)
|
||||
.he CP/M-8000 Programmer's Guide 5.3 Invoking the Assembler (AS68)
|
||||
.sh
|
||||
5.3 Invoking the Assembler (AS68)
|
||||
.qs
|
||||
.pp
|
||||
Invoke AS68 by entering a command of the following form:
|
||||
.sp 2
|
||||
.in 8
|
||||
.nf
|
||||
AS68 [-F d:] [-P] [-S d:] [-U] [-L] [-N] [-I]
|
||||
[-O object filename]
|
||||
source filename [>listing filename]
|
||||
.fi
|
||||
.in 0
|
||||
.bp
|
||||
.ce
|
||||
.sh
|
||||
Table 5-1. Assembler Options
|
||||
.sp
|
||||
.in 5
|
||||
.ll 60
|
||||
.nf
|
||||
Option Meaning
|
||||
.fi
|
||||
.sp
|
||||
.in 14
|
||||
.ti -9
|
||||
-F d:
|
||||
.sp
|
||||
The -F option specifies the drive on which temporary files are
|
||||
created. The variable d: is the drive designation, which must be
|
||||
followed by a colon. If this option is not specified, the temporary files
|
||||
that AS68 creates are created on the current drive.
|
||||
.sp 2
|
||||
.ti -9
|
||||
-I
|
||||
.sp
|
||||
The -I option initializes the assembler. See Section 5.2 for
|
||||
details.
|
||||
.sp 2
|
||||
.ti -9
|
||||
-P
|
||||
.sp
|
||||
If specified, AS68 produces and prints a listing on the standard
|
||||
output device which, by default, is the console. You can redirect the listing,
|
||||
including error messages, to a file by using the >listing filename
|
||||
parameter. Note that error messages are produced whether or not the -P
|
||||
option is specified. No listing is produced, however, unless you specify
|
||||
the -P option.
|
||||
.sp 2
|
||||
.ti -9
|
||||
-S d:
|
||||
.sp
|
||||
The -S option indicates the drive on which the assembler
|
||||
initialization
|
||||
file, AS68SYMB.DAT, resides. This file is created when you initialize AS68.
|
||||
See Section 5.2. AS68 reads the file AS68SYMB.DAT before it assembles a
|
||||
source file. The variable, d:, is the drive designation; it must be
|
||||
followed by a colon. If you do not specify this option, AS68 assumes
|
||||
the initialization file is on the default drive.
|
||||
.sp 2
|
||||
.ti -9
|
||||
-U
|
||||
.sp
|
||||
Causes all undefined symbols in the assembly to be treated as
|
||||
global references.
|
||||
.in 0
|
||||
.ll 65
|
||||
.bp
|
||||
.ce
|
||||
.sh
|
||||
Table 5-1. (continued)
|
||||
.sp
|
||||
.in 5
|
||||
.ll 60
|
||||
.nf
|
||||
Option Meaning
|
||||
.fi
|
||||
.sp
|
||||
.in 14
|
||||
.ti -9
|
||||
-L
|
||||
.sp
|
||||
Ensures all address constants are generated as
|
||||
longwords. Use the -L option for programs that require more than
|
||||
64K for execution or if the TPA is not contained in the first 64K bytes of
|
||||
memory. If -L is not specified, the program is assembled to
|
||||
run in the first 64K bytes of memory. If an address in the assembly
|
||||
does not fit within one word an error occurs. Appendix E describes
|
||||
all AS68 errors.
|
||||
.sp 2
|
||||
.ti -9
|
||||
-N
|
||||
.sp
|
||||
Disables optimization of branches on forward references. Normally,
|
||||
wherever possible, AS68 uses the 2-byte form of the conditional branch and
|
||||
the 4-byte BSR instruction to speed program execution and reduce the
|
||||
instruction size instead of the 6-byte JSR instruction.
|
||||
.sp 2
|
||||
.ti -9
|
||||
source filename
|
||||
.sp
|
||||
This is the only required parameter. It is the file specification
|
||||
of the assembly language source program to be assembled.
|
||||
.sp 2
|
||||
.ti -9
|
||||
>listing filename
|
||||
.sp
|
||||
If specified, the listing requested with the -P option is directed
|
||||
to the specified file rather than to your console terminal, the standard
|
||||
output
|
||||
device. The error messages are produced in the listing file. Note that if
|
||||
you do not request a listing file, you can still redirect the error messages
|
||||
to a file by specifying the greater than symbol (>) immediately followed by a
|
||||
file specification.
|
||||
.ll 65
|
||||
.bp
|
||||
.in 0
|
||||
.he CP/M Programmer's Guide 5.4 Assembly Language Directives
|
||||
.tc 5.4 Assembly Language Directives
|
||||
.sh
|
||||
5.4 Assembly Language Directives
|
||||
.qs
|
||||
.ix assembly language directives
|
||||
.pp
|
||||
This section alphabetically lists and briefly describes the directives AS68
|
||||
supports.
|
||||
.sp 2
|
||||
.ce
|
||||
.sh
|
||||
Table 5-2. Assembly Language Directives
|
||||
.qs
|
||||
.sp
|
||||
.in 5
|
||||
.ll 60
|
||||
.nf
|
||||
Directive Meaning
|
||||
.fi
|
||||
.sp
|
||||
.in 17
|
||||
.ti -12
|
||||
comm label, expression
|
||||
.ix common directive (comm)
|
||||
.sp
|
||||
The common directive (comm) specifies the label and size of a common area,
|
||||
which can be shared by separately assembled programs.
|
||||
The linker, LO68, links all common areas with the same label to the same
|
||||
address. The size of the common area is determined by the value of the
|
||||
largest expression when more than one common area with the same label
|
||||
exists.
|
||||
.sp 2
|
||||
.ti -12
|
||||
data
|
||||
.sp
|
||||
.ix data directive
|
||||
The data directive instructs AS68 to change the assembler base segment to the
|
||||
data segment.
|
||||
.sp 2
|
||||
.ti -12
|
||||
bss
|
||||
.sp
|
||||
.ix bss directive
|
||||
The bss directive instructs AS68 to change the assembler base segment to the
|
||||
block storage segment (bss).
|
||||
Instructions and data cannot be assembled in the bss.
|
||||
However, symbols can be defined and storage can be reserved
|
||||
with the .ds directive in the bss.
|
||||
.sp 2
|
||||
.ti -12
|
||||
dc operand [,operand, ...]
|
||||
.sp
|
||||
.mb 5
|
||||
.fm 1
|
||||
.ix define constant directive (dc)
|
||||
The define constant directive (dc) defines one or more constants in memory.
|
||||
When you specify more than one operand, separate each with a comma.
|
||||
The operand can contain a symbol or an expression that is
|
||||
assigned a numeric value by AS68, or the value of the constant in decimal,
|
||||
hexadecimal, or ASCII notation. If you specify an ASCII value, you must
|
||||
enclose the string in single quotes ('). Although an ASCII character is
|
||||
only seven bits in length, each character is assigned a byte of memory. The
|
||||
eighth bit always equals zero.
|
||||
.in 0
|
||||
.ll 65
|
||||
.bp
|
||||
.ce
|
||||
.sh
|
||||
Table 5-2. (continued)
|
||||
.qs
|
||||
.sp
|
||||
.in 5
|
||||
.ll 60
|
||||
.nf
|
||||
Directive Meaning
|
||||
.fi
|
||||
.sp
|
||||
.in 17
|
||||
.pp
|
||||
You can specify the constants to be bytes, words, or longwords.
|
||||
The list below illustrates the notation for each of these size
|
||||
specifications and describes the rules that apply to them.
|
||||
.mb 6
|
||||
.fm 2
|
||||
.sp 2
|
||||
.in 23
|
||||
.ti -6
|
||||
dc.b The constants are byte constants. If you specify an odd number of
|
||||
bytes, AS68 fills the odd byte on the right with zeroes unless the next
|
||||
statement is another dc.b directive. When the next statement is
|
||||
a dc.b directive, the dc.b uses the odd byte. Byte constants are not
|
||||
relocatable.
|
||||
.sp
|
||||
.ti -6
|
||||
dc.w The constants are word constants. If you specify an odd
|
||||
number of bytes, AS68 fills the last word on the right with zeroes to
|
||||
force an even byte count. The only way to specify an odd number of bytes
|
||||
is with an ASCII constant. Word constants can be relocated.
|
||||
.sp
|
||||
.ti -6
|
||||
dc.l The constants are longword constants. If less than a
|
||||
multiple of four bytes is entered, AS68 fills the last longword on the
|
||||
right with zeroes to force a multiple of four bytes. Longword constants
|
||||
can be relocated.
|
||||
.sp 2
|
||||
.in 17
|
||||
.ti -12
|
||||
ds operand
|
||||
.sp
|
||||
The define storage directive (ds) reserves memory locations. The contents of
|
||||
the memory that it reserves is not initialized. The operand specifies the
|
||||
number of bytes, words, or longwords that this directive reserves.
|
||||
The notation for these size specifications is shown below.
|
||||
.ix define storage directive (ds)
|
||||
.sp
|
||||
.nf
|
||||
ds.b reserves memory locations in bytes
|
||||
.sp
|
||||
ds reserves memory locations in words
|
||||
.sp
|
||||
ds.l reserves memory locations in
|
||||
longwords
|
||||
.fi
|
||||
.in 0
|
||||
.ll 65
|
||||
.bp
|
||||
.ce
|
||||
.sh
|
||||
Table 5-2. (continued)
|
||||
.qs
|
||||
.sp
|
||||
.in 5
|
||||
.ll 60
|
||||
.nf
|
||||
Directive Meaning
|
||||
.fi
|
||||
.sp
|
||||
.in 17
|
||||
.ti -12
|
||||
end
|
||||
.sp
|
||||
The end directive informs AS68 that no more source code follows this
|
||||
directive. Code, comments, or multiple carriage returns cannot follow this
|
||||
directive.
|
||||
.ix end directive
|
||||
.sp 2
|
||||
.ti -12
|
||||
endc
|
||||
.sp
|
||||
The endc directive denotes the end of the code that is conditionally
|
||||
assembled. It is used with other directives that conditionally assemble
|
||||
code.
|
||||
.ix endc directive
|
||||
.sp 2
|
||||
.ti -12
|
||||
equ expression
|
||||
.sp
|
||||
.ix equate directive (equ)
|
||||
The equate directive (equ) assigns the value of the expression in the
|
||||
operand field to the symbol in the label field that precedes the
|
||||
directive. The syntax for
|
||||
the equate directive is below.
|
||||
.sp
|
||||
label EQU expression
|
||||
.sp
|
||||
The label and operand fields are required. The label must be unique;
|
||||
it cannot be defined anywhere else in the program. The expression cannot
|
||||
include an undefined symbol or one that is defined following the
|
||||
expression. Forward references to symbols are not allowed for this
|
||||
directive.
|
||||
.sp 2
|
||||
.ti -12
|
||||
even
|
||||
.sp
|
||||
.ix even directive
|
||||
The even directive increments the location counter to force an even
|
||||
boundary. For
|
||||
example, if specified when the location counter is odd, the location
|
||||
counter is incremented by one so that the next instruction or data field
|
||||
begins on an even boundary in memory.
|
||||
.in 0
|
||||
.ll 65
|
||||
.bp
|
||||
.ce
|
||||
.sh
|
||||
Table 5-2. (continued)
|
||||
.qs
|
||||
.sp
|
||||
.in 5
|
||||
.ll 60
|
||||
.nf
|
||||
Directive Meaning
|
||||
.fi
|
||||
.sp
|
||||
.in 17
|
||||
.nf
|
||||
.ti -12
|
||||
globl label[,label...]
|
||||
.ti -12
|
||||
xdef label[,label...]
|
||||
.ti -12
|
||||
xref label[,label...]
|
||||
.fi
|
||||
.sp
|
||||
These directives make the label(s) external. If the labels are defined
|
||||
in the current assembly, this statement makes them available
|
||||
to other routines during a load by LO68. If the labels are not
|
||||
defined in the current assembly, they become undefined external
|
||||
references, which LO68 links to external values with the same label
|
||||
in other routines. If you specify the -U option, the assembler
|
||||
makes all undefined labels external.
|
||||
.sp 2
|
||||
.nf
|
||||
.ti -12
|
||||
ifeq expression
|
||||
.ti -12
|
||||
ifne expression
|
||||
.ti -12
|
||||
ifle expression
|
||||
.ti -12
|
||||
iflt expression
|
||||
.ti -12
|
||||
ifge expression
|
||||
.ti -12
|
||||
ifgt expression
|
||||
.fi
|
||||
.sp
|
||||
.ix conditional directives
|
||||
All of the directives listed above are conditional directives in which the
|
||||
expression is tested against zero for the condition specified by
|
||||
the directive. If the expression is true, the code following is
|
||||
assembled; otherwise, the code is ignored until an end conditional
|
||||
directive (endc) is found. The directives and the conditions they test are
|
||||
listed below.
|
||||
.sp
|
||||
.nf
|
||||
ifeq equal to zero
|
||||
ifne not equal to zero
|
||||
ifle less than or equal to zero
|
||||
iflt less than zero
|
||||
ifge greater or equal to zero
|
||||
ifgt greater than zero
|
||||
.fi
|
||||
.sp 2
|
||||
.ti -12
|
||||
ifc 'string1', 'string2'
|
||||
.sp 0
|
||||
.ti -12
|
||||
ifnc 'string1', 'string2'
|
||||
.sp
|
||||
.ix conditional string directive
|
||||
The conditional string directive compares two strings.
|
||||
The 'c' condition is true if the strings are
|
||||
exactly the same. The 'nc' condition is true if they do not match.
|
||||
.in 0
|
||||
.ll 65
|
||||
.bp
|
||||
.ce
|
||||
.sh
|
||||
Table 5-2. (continued)
|
||||
.qs
|
||||
.sp
|
||||
.in 5
|
||||
.ll 60
|
||||
.nf
|
||||
Directive Meaning
|
||||
.fi
|
||||
.sp
|
||||
.in 17
|
||||
.ti -12
|
||||
offset expression
|
||||
.sp
|
||||
.ix offset directive
|
||||
The offset directive creates a dummy storage section by defining a table of
|
||||
offsets with the define storage directive (ds). The storage definitions
|
||||
are not passed to the linker. The offset table begins at the address
|
||||
specified in the expression. Symbols defined in the offset table are
|
||||
internally maintained. No instructions or code-generating directives,
|
||||
except the equate (equ) and register mask (reg) directives, can be used in
|
||||
the table. The offset directive is terminated by one of the following
|
||||
directives:
|
||||
.sp
|
||||
.nf
|
||||
bss
|
||||
data
|
||||
end
|
||||
section
|
||||
text
|
||||
.fi
|
||||
.sp 2
|
||||
.ti -12
|
||||
org expression
|
||||
.sp
|
||||
.ix absolute origin directive (org)
|
||||
The absolute origin directive (org) sets the location counter to the
|
||||
value of the expression. Subsequent statements are assigned absolute
|
||||
memory locations with the new value of the location counter. The
|
||||
expression cannot contain any forward, undefined, or external references.
|
||||
.sp 2
|
||||
.ti -12
|
||||
page
|
||||
.sp
|
||||
.ix page directive
|
||||
The page directive causes a page break which forces text to print on the top
|
||||
of the next page. It does not require an operand or a label and
|
||||
it does not generate machine code.
|
||||
.pp
|
||||
The page directive allows you to set the page length for a listing of code.
|
||||
If you use this directive and print the source code by specifying the -P
|
||||
option in the AS68 command line, pages break at predefined rather than
|
||||
random places. The page directive does not appear on the printed program
|
||||
listing.
|
||||
.in 0
|
||||
.ll 65
|
||||
.bp
|
||||
.ce
|
||||
.sh
|
||||
Table 5-2. (continued)
|
||||
.qs
|
||||
.sp
|
||||
.in 5
|
||||
.ll 60
|
||||
.nf
|
||||
Directive Meaning
|
||||
.fi
|
||||
.sp
|
||||
.in 17
|
||||
.ti -12
|
||||
reg reglist
|
||||
.sp
|
||||
.ix register mask directive
|
||||
The register mask directive
|
||||
builds a register mask that can be used by movem instruction. One
|
||||
or more registers can be listed in ascending order in the format:
|
||||
.sp
|
||||
R?[-R[/R?[-R?...]...]]
|
||||
.sp
|
||||
Replace the R in the above format with a register reference.
|
||||
Any of the following mnemonics are valid:
|
||||
.sp
|
||||
.nf
|
||||
A0-A7
|
||||
D0-D7
|
||||
R0-R15
|
||||
.fi
|
||||
.sp
|
||||
The example below illustrates a sample register list.
|
||||
.sp
|
||||
A2-A4/A7/D1/D3-D5
|
||||
.sp
|
||||
You can also use commas to separate registers as shown
|
||||
below.
|
||||
.sp
|
||||
A1,A2,D5,D7
|
||||
.sp 2
|
||||
.ti -12
|
||||
section #
|
||||
.sp
|
||||
.ix section directive
|
||||
The section directive defines a base segment. The sections can be numbered
|
||||
from 0 to 15 inclusive. Section 14 always maps to data. Section 15 is
|
||||
bss. All other section numbers denote text sections.
|
||||
.sp 2
|
||||
.ti -12
|
||||
text
|
||||
.sp
|
||||
.ix text directive
|
||||
The text directive instructs AS68 to change the assembler base segment to
|
||||
the text segment. Each assembly of a program begins with the first word in
|
||||
the text segment.
|
||||
.bp
|
||||
.in 0
|
||||
.fi
|
||||
.ll 65
|
||||
.tc 5.5 Sample Commands Invoking AS68
|
||||
.sh
|
||||
5.5 Sample Commands Invoking AS68
|
||||
.qs
|
||||
.he CP/M-8000 Programmer's Guide 5.5 Sample Commands Invoking AS68
|
||||
.sp 2
|
||||
.ti 8
|
||||
A>\c
|
||||
.sh
|
||||
AS68 -U -L TEST.S
|
||||
.qs
|
||||
.ix invoking AS68
|
||||
.ix AS68, invoking
|
||||
.sp
|
||||
.pp
|
||||
This command assembles the source file TEST.S and produces the object file
|
||||
TEST.O. Error messages appear on the screen. Any undefined symbols are
|
||||
treated as global.
|
||||
.sp 2
|
||||
.ti 8
|
||||
A>\c
|
||||
.sh
|
||||
AS68 -P SMPL.S >SMPL.L
|
||||
.qs
|
||||
.sp
|
||||
.pp
|
||||
This command assembles the source file SMPL.S and produces the object file
|
||||
SMPL.O. The program must run in the first 64K of memory; that is,
|
||||
no address can be larger than 16 bits. Error messages and the listing are
|
||||
directed to the file SMPL.L.
|
||||
.sp 2
|
||||
.tc 5.6 Assembly Language Differences
|
||||
.sh
|
||||
5.6 Assembly Language Differences
|
||||
.qs
|
||||
.he CP/M-8000 Programmer's Guide 5.6 Assembly Language Differences
|
||||
.pp
|
||||
.ix AS68 assembly language
|
||||
The syntax differences between the AS68 assembly language and Zilog's
|
||||
assembly language are listed below.
|
||||
.in 8
|
||||
.sp
|
||||
.ti -3
|
||||
1) All assembler directives are optionally preceded by a period (.). For
|
||||
example,
|
||||
.sp
|
||||
.nf
|
||||
.ti -1
|
||||
.equ or equ
|
||||
.ti -1
|
||||
.ds or ds
|
||||
.sp
|
||||
.ti -3
|
||||
2) AS68 does not support the following Zilog directives:
|
||||
.sp
|
||||
.nf
|
||||
comline
|
||||
mask2
|
||||
idnt
|
||||
opt
|
||||
.fi
|
||||
.sp
|
||||
.ti -3
|
||||
3) The Zilog .set directive is implemented as the equate
|
||||
directive (equ).
|
||||
.sp
|
||||
.ti -3
|
||||
4) AS68 accepts upper- and lower-case characters. You can specify
|
||||
instructions and directives in either case. However, labels and variables
|
||||
are case sensitive. For example, the label START and Start are not
|
||||
equivalent.
|
||||
.sp
|
||||
.ti -3
|
||||
5) For AS68, all labels must terminate with a colon (:). For example,
|
||||
.sp
|
||||
.nf
|
||||
A:
|
||||
FOO:
|
||||
.fi
|
||||
.sp
|
||||
However, if a label begins in column one, it need not terminate with a
|
||||
colon (:).
|
||||
.sp
|
||||
.ti -3
|
||||
6) For AS68, ASCII string constants can be enclosed in either single or
|
||||
double quotes. For example,
|
||||
.sp
|
||||
.nf
|
||||
'ABCD'
|
||||
"ac14"
|
||||
.fi
|
||||
.sp
|
||||
.ti -3
|
||||
7) For AS68, registers can be referenced with the following mnemonics:
|
||||
.sp
|
||||
.nf
|
||||
r0-r15
|
||||
R0-R15
|
||||
d0-d7
|
||||
D0-D7
|
||||
a0-a7
|
||||
A0-A7
|
||||
.fi
|
||||
.sp
|
||||
Upper- and lower-case references are equivalent.
|
||||
Registers R0-R7 are the same as D0-D7 and R8-R15 are the same as
|
||||
A0-A7.
|
||||
.ne 10
|
||||
.sp
|
||||
.ti -3
|
||||
8) For AS68, comment lines cannot begin with an asterisk that is immediately
|
||||
followed
|
||||
by an equals sign (*=), since the location counter can be
|
||||
manipulated with a statement of the form:
|
||||
.sp
|
||||
.nf
|
||||
*=expr
|
||||
.fi
|
||||
.sp
|
||||
.ti -3
|
||||
9) Use caution when manipulating the location counter forward. An expression
|
||||
can move the counter forward only.
|
||||
The unused space is filled with zeros in the text or data
|
||||
segments.
|
||||
.sp
|
||||
.ti -4
|
||||
10) For AS68, comment lines can begin with an asterisk followed by an equals
|
||||
sign (* =)
|
||||
but only if one or more spaces exist between the asterisk and the
|
||||
equals sign as shown below.
|
||||
.sp
|
||||
.nf
|
||||
* = This command loads R1 with zeros.
|
||||
.sp
|
||||
* = Branch to subroutine XYZ
|
||||
.fi
|
||||
.sp
|
||||
.ti -4
|
||||
11) For AS68, the syntax for short form branches is bxx.b rather
|
||||
than bxx.s
|
||||
.sp
|
||||
.ti -4
|
||||
12) The Zilog assembler supports a programming model in which
|
||||
a program consists of a maximum of 16 separately relocatable
|
||||
sections and an optional absolute section. AS68 distributed
|
||||
with CP/M-8000 does not support this model. Instead, AS68
|
||||
supports a model in which a program contains three segments,
|
||||
text, data, and bss as described in Sections 2 and 3 of this
|
||||
guide.
|
||||
.in 0
|
||||
.fi
|
||||
.ll 65
|
||||
.bp
|
||||
.tc 5.7 Assembly Language Extensions
|
||||
.sh
|
||||
5.7 Assembly Language Extensions
|
||||
.qs
|
||||
.he CP/M-8000 Programmer's Guide 5.7 Assembly Language Extensions
|
||||
.sp
|
||||
.ix assembly language extensions
|
||||
.pp
|
||||
The enhancements listed below have been added to AS68 to aid the assembly
|
||||
language programmer by making the assembly language more efficient:
|
||||
.sp 2
|
||||
.in 8
|
||||
.ti -3
|
||||
1) When the instructions add, sub, cmp are used with an address register
|
||||
in the source or destination, they generate adda, suba, and cmpa.
|
||||
When the clr instruction is used with an address register (Ax),
|
||||
it generates sub Ax, Ax.
|
||||
.sp
|
||||
.ti -3
|
||||
2) add, and, cmp, eor,
|
||||
or, sub are allowed with immediate first operands and actually generate addi,
|
||||
andi, cmpi, eori, ori, subi, instructions if the second operand is not
|
||||
register direct.
|
||||
.sp
|
||||
.ti -3
|
||||
3) All branch instructions generate short relative branches where possible,
|
||||
including forward references.
|
||||
.ix branch instructions
|
||||
.sp
|
||||
.ti -3
|
||||
4) Any shift instruction with no shift count specified assumes a shift count
|
||||
of one. For example, "asl rl" is equivalent to "asl #1,rl".
|
||||
.ix shift instruction
|
||||
.sp
|
||||
.ti -3
|
||||
5) A jsr instruction is changed to a bsr instruction if the
|
||||
resulting bsr is shorter than the jsr instruction.
|
||||
.ix jsr instruction
|
||||
.ix bsr instruction
|
||||
.sp
|
||||
.ti -3
|
||||
6) The .text directive causes the assembler to begin assembling instructions
|
||||
in the text segment.
|
||||
.ix .text directive
|
||||
.sp
|
||||
.ti -3
|
||||
7) The .data directive causes the assembler to begin assembling initialized
|
||||
data in the data segment.
|
||||
.ix .data directive
|
||||
.sp
|
||||
.ti -3
|
||||
8) The .bss directive instructs the assembler to begin defining storage
|
||||
in the bss. No instructions or constants can be place in the bss because
|
||||
it is for uninitialized data only. However, the .ds directives can be
|
||||
used to define storage locations, and the location counter (*) can be
|
||||
incremented.
|
||||
.ix .bass directive
|
||||
.sp
|
||||
.ti -3
|
||||
9) The .globl directive in the form:
|
||||
.ix .globl directive
|
||||
.sp
|
||||
.ti -1
|
||||
.globl label[,label] ...
|
||||
.sp
|
||||
makes the labels external. If they are otherwise defined (by assignment or
|
||||
appearance as a label) they act within the assembly exactly as if the .globl
|
||||
directive was not given. However, when linking this program with
|
||||
other programs, these symbols are available to other programs. Conversely,
|
||||
if the given symbols are not defined within the current assembly, the
|
||||
linker can combine the output of this assembly with that of others which
|
||||
define the symbols.
|
||||
.bp
|
||||
.ti -4
|
||||
10) The common directive (comm) defines a common region, which can be accessed
|
||||
by programs that are assembled separately. The syntax for the common
|
||||
directive is below.
|
||||
.ix common directive (comm)
|
||||
.sp
|
||||
.ti -1
|
||||
.comm label, expression
|
||||
.pp
|
||||
The expression specifies the number of bytes that is allocated in the common
|
||||
region. If several programs specify the same label for a common region,
|
||||
the size of the region is determined by the value of the largest
|
||||
expression.
|
||||
.pp
|
||||
The common directive assumes the label is an undefined external symbol
|
||||
in the current assembly. However, the linker, LO68, is special-cased, so
|
||||
all external symbols, which are not otherwise defined, and which have a
|
||||
nonzero value, are defined to be in the bss, and enough space is left after
|
||||
the symbol to hold expression bytes. All symbols which become defined in
|
||||
this way are located before all the explicitly defined bss locations.
|
||||
.sp
|
||||
.ix .even directive
|
||||
.ti -4
|
||||
11) The .even directive causes the location counter (*), if positioned
|
||||
at an odd address, to be advanced by one byte so the next statement is
|
||||
assembled at an even address.
|
||||
.sp
|
||||
.ti -4
|
||||
12) The instructions, move, add, and sub, specified with an immediate first
|
||||
operand and a data (D) register as the destination, generate Quick
|
||||
instructions, where possible.
|
||||
.in 0
|
||||
.ll 65
|
||||
.sp 2
|
||||
.tc 5.8 Error Messages
|
||||
.sh
|
||||
5.8 Error Messages
|
||||
.qs
|
||||
.he CP/M-8000 Programmer's Guide 5.8 AS68 Error Messages
|
||||
.pp
|
||||
Appendix E lists the error messages generated by AS68.
|
||||
.sp 2
|
||||
.ce
|
||||
End of Section 5
|
||||
.bp
|
||||
.he CP/M-8000 Programmer's Guide End of Section 5
|
||||
.sp 50
|
||||
.nx six
|
||||
|
||||
|
||||
Reference in New Issue
Block a user