123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384 |
- @c Copyright (C) 1991-2015 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.
|