384 lines
12 KiB
Plaintext
384 lines
12 KiB
Plaintext
@c Copyright (C) 1991-2014 Free Software Foundation, Inc.
|
|
@c This is part of the GAS manual.
|
|
@c For copying conditions, see the file as.texinfo.
|
|
@c VAX/VMS description enhanced and corrected by Klaus K"aempf, kkaempf@progis.de
|
|
@ifset GENERIC
|
|
@node Vax-Dependent
|
|
@chapter VAX Dependent Features
|
|
@cindex VAX support
|
|
|
|
@end ifset
|
|
@ifclear GENERIC
|
|
@node Machine Dependencies
|
|
@chapter VAX Dependent Features
|
|
@cindex VAX support
|
|
|
|
@end ifclear
|
|
|
|
@menu
|
|
* VAX-Opts:: VAX Command-Line Options
|
|
* VAX-float:: VAX Floating Point
|
|
* VAX-directives:: Vax Machine Directives
|
|
* VAX-opcodes:: VAX Opcodes
|
|
* VAX-branch:: VAX Branch Improvement
|
|
* VAX-operands:: VAX Operands
|
|
* VAX-no:: Not Supported on VAX
|
|
* VAX-Syntax:: VAX Syntax
|
|
@end menu
|
|
|
|
|
|
@node VAX-Opts
|
|
@section VAX Command-Line Options
|
|
|
|
@cindex command-line options ignored, VAX
|
|
@cindex VAX command-line options ignored
|
|
The Vax version of @code{@value{AS}} accepts any of the following options,
|
|
gives a warning message that the option was ignored and proceeds.
|
|
These options are for compatibility with scripts designed for other
|
|
people's assemblers.
|
|
|
|
@table @code
|
|
@cindex @code{-D}, ignored on VAX
|
|
@cindex @code{-S}, ignored on VAX
|
|
@cindex @code{-T}, ignored on VAX
|
|
@item @code{-D} (Debug)
|
|
@itemx @code{-S} (Symbol Table)
|
|
@itemx @code{-T} (Token Trace)
|
|
These are obsolete options used to debug old assemblers.
|
|
|
|
@cindex @code{-d}, VAX option
|
|
@item @code{-d} (Displacement size for JUMPs)
|
|
This option expects a number following the @samp{-d}. Like options
|
|
that expect filenames, the number may immediately follow the
|
|
@samp{-d} (old standard) or constitute the whole of the command line
|
|
argument that follows @samp{-d} (@sc{gnu} standard).
|
|
|
|
@cindex @code{-V}, redundant on VAX
|
|
@item @code{-V} (Virtualize Interpass Temporary File)
|
|
Some other assemblers use a temporary file. This option
|
|
commanded them to keep the information in active memory rather
|
|
than in a disk file. @code{@value{AS}} always does this, so this
|
|
option is redundant.
|
|
|
|
@cindex @code{-J}, ignored on VAX
|
|
@item @code{-J} (JUMPify Longer Branches)
|
|
Many 32-bit computers permit a variety of branch instructions
|
|
to do the same job. Some of these instructions are short (and
|
|
fast) but have a limited range; others are long (and slow) but
|
|
can branch anywhere in virtual memory. Often there are 3
|
|
flavors of branch: short, medium and long. Some other
|
|
assemblers would emit short and medium branches, unless told by
|
|
this option to emit short and long branches.
|
|
|
|
@cindex @code{-t}, ignored on VAX
|
|
@item @code{-t} (Temporary File Directory)
|
|
Some other assemblers may use a temporary file, and this option
|
|
takes a filename being the directory to site the temporary
|
|
file. Since @code{@value{AS}} does not use a temporary disk file, this
|
|
option makes no difference. @samp{-t} needs exactly one
|
|
filename.
|
|
@end table
|
|
|
|
@cindex VMS (VAX) options
|
|
@cindex options for VAX/VMS
|
|
@cindex VAX/VMS options
|
|
@cindex Vax-11 C compatibility
|
|
@cindex symbols with uppercase, VAX/VMS
|
|
The Vax version of the assembler accepts additional options when
|
|
compiled for VMS:
|
|
|
|
@table @samp
|
|
@cindex @samp{-h} option, VAX/VMS
|
|
@item -h @var{n}
|
|
External symbol or section (used for global variables) names are not
|
|
case sensitive on VAX/VMS and always mapped to upper case. This is
|
|
contrary to the C language definition which explicitly distinguishes
|
|
upper and lower case. To implement a standard conforming C compiler,
|
|
names must be changed (mapped) to preserve the case information. The
|
|
default mapping is to convert all lower case characters to uppercase and
|
|
adding an underscore followed by a 6 digit hex value, representing a 24
|
|
digit binary value. The one digits in the binary value represent which
|
|
characters are uppercase in the original symbol name.
|
|
|
|
The @samp{-h @var{n}} option determines how we map names. This takes
|
|
several values. No @samp{-h} switch at all allows case hacking as
|
|
described above. A value of zero (@samp{-h0}) implies names should be
|
|
upper case, and inhibits the case hack. A value of 2 (@samp{-h2})
|
|
implies names should be all lower case, with no case hack. A value of 3
|
|
(@samp{-h3}) implies that case should be preserved. The value 1 is
|
|
unused. The @code{-H} option directs @code{@value{AS}} to display
|
|
every mapped symbol during assembly.
|
|
|
|
Symbols whose names include a dollar sign @samp{$} are exceptions to the
|
|
general name mapping. These symbols are normally only used to reference
|
|
VMS library names. Such symbols are always mapped to upper case.
|
|
|
|
@cindex @samp{-+} option, VAX/VMS
|
|
@item -+
|
|
The @samp{-+} option causes @code{@value{AS}} to truncate any symbol
|
|
name larger than 31 characters. The @samp{-+} option also prevents some
|
|
code following the @samp{_main} symbol normally added to make the object
|
|
file compatible with Vax-11 "C".
|
|
|
|
@cindex @samp{-1} option, VAX/VMS
|
|
@item -1
|
|
This option is ignored for backward compatibility with @code{@value{AS}}
|
|
version 1.x.
|
|
|
|
@cindex @samp{-H} option, VAX/VMS
|
|
@item -H
|
|
The @samp{-H} option causes @code{@value{AS}} to print every symbol
|
|
which was changed by case mapping.
|
|
@end table
|
|
|
|
@node VAX-float
|
|
@section VAX Floating Point
|
|
|
|
@cindex VAX floating point
|
|
@cindex floating point, VAX
|
|
Conversion of flonums to floating point is correct, and
|
|
compatible with previous assemblers. Rounding is
|
|
towards zero if the remainder is exactly half the least significant bit.
|
|
|
|
@code{D}, @code{F}, @code{G} and @code{H} floating point formats
|
|
are understood.
|
|
|
|
Immediate floating literals (@emph{e.g.} @samp{S`$6.9})
|
|
are rendered correctly. Again, rounding is towards zero in the
|
|
boundary case.
|
|
|
|
@cindex @code{float} directive, VAX
|
|
@cindex @code{double} directive, VAX
|
|
The @code{.float} directive produces @code{f} format numbers.
|
|
The @code{.double} directive produces @code{d} format numbers.
|
|
|
|
@node VAX-directives
|
|
@section Vax Machine Directives
|
|
|
|
@cindex machine directives, VAX
|
|
@cindex VAX machine directives
|
|
The Vax version of the assembler supports four directives for
|
|
generating Vax floating point constants. They are described in the
|
|
table below.
|
|
|
|
@cindex wide floating point directives, VAX
|
|
@table @code
|
|
@cindex @code{dfloat} directive, VAX
|
|
@item .dfloat
|
|
This expects zero or more flonums, separated by commas, and
|
|
assembles Vax @code{d} format 64-bit floating point constants.
|
|
|
|
@cindex @code{ffloat} directive, VAX
|
|
@item .ffloat
|
|
This expects zero or more flonums, separated by commas, and
|
|
assembles Vax @code{f} format 32-bit floating point constants.
|
|
|
|
@cindex @code{gfloat} directive, VAX
|
|
@item .gfloat
|
|
This expects zero or more flonums, separated by commas, and
|
|
assembles Vax @code{g} format 64-bit floating point constants.
|
|
|
|
@cindex @code{hfloat} directive, VAX
|
|
@item .hfloat
|
|
This expects zero or more flonums, separated by commas, and
|
|
assembles Vax @code{h} format 128-bit floating point constants.
|
|
|
|
@end table
|
|
|
|
@node VAX-opcodes
|
|
@section VAX Opcodes
|
|
|
|
@cindex VAX opcode mnemonics
|
|
@cindex opcode mnemonics, VAX
|
|
@cindex mnemonics for opcodes, VAX
|
|
All DEC mnemonics are supported. Beware that @code{case@dots{}}
|
|
instructions have exactly 3 operands. The dispatch table that
|
|
follows the @code{case@dots{}} instruction should be made with
|
|
@code{.word} statements. This is compatible with all unix
|
|
assemblers we know of.
|
|
|
|
@node VAX-branch
|
|
@section VAX Branch Improvement
|
|
|
|
@cindex VAX branch improvement
|
|
@cindex branch improvement, VAX
|
|
@cindex pseudo-ops for branch, VAX
|
|
Certain pseudo opcodes are permitted. They are for branch
|
|
instructions. They expand to the shortest branch instruction that
|
|
reaches the target. Generally these mnemonics are made by
|
|
substituting @samp{j} for @samp{b} at the start of a DEC mnemonic.
|
|
This feature is included both for compatibility and to help
|
|
compilers. If you do not need this feature, avoid these
|
|
opcodes. Here are the mnemonics, and the code they can expand into.
|
|
|
|
@table @code
|
|
@item jbsb
|
|
@samp{Jsb} is already an instruction mnemonic, so we chose @samp{jbsb}.
|
|
@table @asis
|
|
@item (byte displacement)
|
|
@kbd{bsbb @dots{}}
|
|
@item (word displacement)
|
|
@kbd{bsbw @dots{}}
|
|
@item (long displacement)
|
|
@kbd{jsb @dots{}}
|
|
@end table
|
|
@item jbr
|
|
@itemx jr
|
|
Unconditional branch.
|
|
@table @asis
|
|
@item (byte displacement)
|
|
@kbd{brb @dots{}}
|
|
@item (word displacement)
|
|
@kbd{brw @dots{}}
|
|
@item (long displacement)
|
|
@kbd{jmp @dots{}}
|
|
@end table
|
|
@item j@var{COND}
|
|
@var{COND} may be any one of the conditional branches
|
|
@code{neq}, @code{nequ}, @code{eql}, @code{eqlu}, @code{gtr},
|
|
@code{geq}, @code{lss}, @code{gtru}, @code{lequ}, @code{vc}, @code{vs},
|
|
@code{gequ}, @code{cc}, @code{lssu}, @code{cs}.
|
|
@var{COND} may also be one of the bit tests
|
|
@code{bs}, @code{bc}, @code{bss}, @code{bcs}, @code{bsc}, @code{bcc},
|
|
@code{bssi}, @code{bcci}, @code{lbs}, @code{lbc}.
|
|
@var{NOTCOND} is the opposite condition to @var{COND}.
|
|
@table @asis
|
|
@item (byte displacement)
|
|
@kbd{b@var{COND} @dots{}}
|
|
@item (word displacement)
|
|
@kbd{b@var{NOTCOND} foo ; brw @dots{} ; foo:}
|
|
@item (long displacement)
|
|
@kbd{b@var{NOTCOND} foo ; jmp @dots{} ; foo:}
|
|
@end table
|
|
@item jacb@var{X}
|
|
@var{X} may be one of @code{b d f g h l w}.
|
|
@table @asis
|
|
@item (word displacement)
|
|
@kbd{@var{OPCODE} @dots{}}
|
|
@item (long displacement)
|
|
@example
|
|
@var{OPCODE} @dots{}, foo ;
|
|
brb bar ;
|
|
foo: jmp @dots{} ;
|
|
bar:
|
|
@end example
|
|
@end table
|
|
@item jaob@var{YYY}
|
|
@var{YYY} may be one of @code{lss leq}.
|
|
@item jsob@var{ZZZ}
|
|
@var{ZZZ} may be one of @code{geq gtr}.
|
|
@table @asis
|
|
@item (byte displacement)
|
|
@kbd{@var{OPCODE} @dots{}}
|
|
@item (word displacement)
|
|
@example
|
|
@var{OPCODE} @dots{}, foo ;
|
|
brb bar ;
|
|
foo: brw @var{destination} ;
|
|
bar:
|
|
@end example
|
|
@item (long displacement)
|
|
@example
|
|
@var{OPCODE} @dots{}, foo ;
|
|
brb bar ;
|
|
foo: jmp @var{destination} ;
|
|
bar:
|
|
@end example
|
|
@end table
|
|
@item aobleq
|
|
@itemx aoblss
|
|
@itemx sobgeq
|
|
@itemx sobgtr
|
|
@table @asis
|
|
@item (byte displacement)
|
|
@kbd{@var{OPCODE} @dots{}}
|
|
@item (word displacement)
|
|
@example
|
|
@var{OPCODE} @dots{}, foo ;
|
|
brb bar ;
|
|
foo: brw @var{destination} ;
|
|
bar:
|
|
@end example
|
|
@item (long displacement)
|
|
@example
|
|
@var{OPCODE} @dots{}, foo ;
|
|
brb bar ;
|
|
foo: jmp @var{destination} ;
|
|
bar:
|
|
@end example
|
|
@end table
|
|
@end table
|
|
|
|
@node VAX-operands
|
|
@section VAX Operands
|
|
|
|
@cindex VAX operand notation
|
|
@cindex operand notation, VAX
|
|
@cindex immediate character, VAX
|
|
@cindex VAX immediate character
|
|
The immediate character is @samp{$} for Unix compatibility, not
|
|
@samp{#} as DEC writes it.
|
|
|
|
@cindex indirect character, VAX
|
|
@cindex VAX indirect character
|
|
The indirect character is @samp{*} for Unix compatibility, not
|
|
@samp{@@} as DEC writes it.
|
|
|
|
@cindex displacement sizing character, VAX
|
|
@cindex VAX displacement sizing character
|
|
The displacement sizing character is @samp{`} (an accent grave) for
|
|
Unix compatibility, not @samp{^} as DEC writes it. The letter
|
|
preceding @samp{`} may have either case. @samp{G} is not
|
|
understood, but all other letters (@code{b i l s w}) are understood.
|
|
|
|
@cindex register names, VAX
|
|
@cindex VAX register names
|
|
Register names understood are @code{r0 r1 r2 @dots{} r15 ap fp sp
|
|
pc}. Upper and lower case letters are equivalent.
|
|
|
|
For instance
|
|
@smallexample
|
|
tstb *w`$4(r5)
|
|
@end smallexample
|
|
|
|
Any expression is permitted in an operand. Operands are comma
|
|
separated.
|
|
|
|
@c There is some bug to do with recognizing expressions
|
|
@c in operands, but I forget what it is. It is
|
|
@c a syntax clash because () is used as an address mode
|
|
@c and to encapsulate sub-expressions.
|
|
|
|
@node VAX-no
|
|
@section Not Supported on VAX
|
|
|
|
@cindex VAX bitfields not supported
|
|
@cindex bitfields, not supported on VAX
|
|
Vax bit fields can not be assembled with @code{@value{AS}}. Someone
|
|
can add the required code if they really need it.
|
|
|
|
@node VAX-Syntax
|
|
@section VAX Syntax
|
|
@menu
|
|
* VAX-Chars:: Special Characters
|
|
@end menu
|
|
|
|
@node VAX-Chars
|
|
@subsection Special Characters
|
|
|
|
@cindex line comment character, VAX
|
|
@cindex VAX line comment character
|
|
The presence of a @samp{#} appearing anywhere on a line indicates the
|
|
start of a comment that extends to the end of that line.
|
|
|
|
If a @samp{#} appears as the first character of a line then the whole
|
|
line is treated as a comment, but in this case the line can also be a
|
|
logical line number directive (@pxref{Comments}) or a preprocessor
|
|
control command (@pxref{Preprocessing}).
|
|
|
|
@cindex line separator, VAX
|
|
@cindex statement separator, VAX
|
|
@cindex VAX line separator
|
|
The @samp{;} character can be used to separate statements on the same
|
|
line.
|