home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD2.mdf / gnu / djgpp / docs / gas / as.inf < prev    next >
Encoding:
GNU Info File  |  1993-11-13  |  243.0 KB  |  6,346 lines

  1. This is Info file as.inf, produced by Makeinfo-1.55 from the input file
  2. as.tex.
  3.  
  4. START-INFO-DIR-ENTRY
  5. * As::                          The GNU assembler.
  6. END-INFO-DIR-ENTRY
  7.  
  8.    This file documents the GNU Assembler "as".
  9.  
  10.    Copyright (C) 1991, 1992, 1993 Free Software Foundation, Inc.
  11.  
  12.    Permission is granted to make and distribute verbatim copies of this
  13. manual provided the copyright notice and this permission notice are
  14. preserved on all copies.
  15.  
  16.    Permission is granted to copy and distribute modified versions of
  17. this manual under the conditions for verbatim copying, provided also
  18. that the section entitled "GNU General Public License" is included
  19. exactly as in the original, and provided that the entire resulting
  20. derived work is distributed under the terms of a permission notice
  21. identical to this one.
  22.  
  23.    Permission is granted to copy and distribute translations of this
  24. manual into another language, under the above conditions for modified
  25. versions, except that the section entitled "GNU General Public License"
  26. may be included in a translation approved by the Free Software
  27. Foundation instead of in the original English.
  28.  
  29. 
  30. File: as,  Node: Top,  Next: Overview,  Prev: (DIR),  Up: (DIR)
  31.  
  32. Using as
  33. ********
  34.  
  35.    This file is a user guide to the GNU assembler `as'.
  36.  
  37. * Menu:
  38.  
  39. * Overview::                    Overview
  40. * Invoking::                    Command-Line Options
  41. * Syntax::                      Syntax
  42. * Sections::                    Sections and Relocation
  43. * Symbols::                     Symbols
  44. * Expressions::                 Expressions
  45. * Pseudo Ops::                  Assembler Directives
  46. * Machine Dependencies::        Machine Dependent Features
  47.  
  48. * Copying::                     GNU GENERAL PUBLIC LICENSE
  49.  
  50. * Acknowledgements::            Who Did What
  51.  
  52. * Index::                       Index
  53.  
  54. 
  55. File: as,  Node: Overview,  Next: Invoking,  Prev: Top,  Up: Top
  56.  
  57. Overview
  58. ********
  59.  
  60.    Here is a brief summary of how to invoke `as'.  For details, *note
  61. Comand-Line Options: Invoking..
  62.  
  63.        as [ -a[dhlns] ] [ -D ] [ -f ]
  64.         [ -I PATH ] [ -K ] [ -L ]
  65.         [ -o OBJFILE ] [ -R ] [ -v ] [ -w ]
  66.         [ -Av6 | -Av7 | -Av8 | -Asparclite | -bump ]
  67.         [ -ACA | -ACA_A | -ACB | -ACC | -AKA | -AKB | -AKC | -AMC ]
  68.         [ -b ] [ -norelax ]
  69.         [ -l ] [ -m68000 | -m68010 | -m68020 | ... ]
  70.         [ -- | FILES ... ]
  71.  
  72. `-a[dhlns]'
  73.      Turn on listings; `-ad', omit debugging pseudo-ops from listing,
  74.      `-ah', include high-level source, `-al', assembly listing, `-an',
  75.      no forms processing, `-as', symbols.  These options may be
  76.      combined; *e.g.*, `-aln' for assembly listing without forms
  77.      processing.  By itself, `-a' defaults to `-ahls' -- that is, all
  78.      listings turned on.
  79.  
  80. `-D'
  81.      This option is accepted only for script compatibility with calls to
  82.      other assemblers; it has no effect on `as'.
  83.  
  84. `-f'
  85.      "fast"--skip whitespace and comment preprocessing (assume source is
  86.      compiler output)
  87.  
  88. `-I PATH'
  89.      Add PATH to the search list for `.include' directives
  90.  
  91. `-K'
  92.      Issue warnings when difference tables altered for long
  93.      displacements.
  94.  
  95. `-L'
  96.      Keep (in symbol table) local symbols, starting with `L'
  97.  
  98. `-o OBJFILE'
  99.      Name the object-file output from `as'
  100.  
  101. `-R'
  102.      Fold data section into text section
  103.  
  104. `-v'
  105.      Announce `as' version
  106.  
  107. `-W'
  108.      Suppress warning messages
  109.  
  110. `-- | FILES ...'
  111.      Standard input, or source files to assemble.
  112.  
  113.    The following options are available when as is configured for the
  114. Intel 80960 processor.
  115.  
  116. `-ACA | -ACA_A | -ACB | -ACC | -AKA | -AKB | -AKC | -AMC'
  117.      Specify which variant of the 960 architecture is the target.
  118.  
  119. `-b'
  120.      Add code to collect statistics about branches taken.
  121.  
  122. `-norelax'
  123.      Do not alter compare-and-branch instructions for long
  124.      displacements; error if necessary.
  125.  
  126.    The following options are available when as is configured for the
  127. Motorola 68000 series.
  128.  
  129. `-l'
  130.      Shorten references to undefined symbols, to one word instead of
  131.      two.
  132.  
  133. `-m68000 | -m68008 | -m68010 | -m68020 | -m68030 | -m68040'
  134. `| -m68302 | -m68331 | -m68332 | -m68333 | -m68340 | -mcpu32'
  135.      Specify what processor in the 68000 family is the target.  The
  136.      default is normally the 68020, but this can be changed at
  137.      configuration time.
  138.  
  139. `-m68881 | -m68882 | -mno-68881 | -mno-68882'
  140.      The target machine does (or does not) have a floating-point
  141.      coprocessor.  The default is to assume a coprocessor for 68020,
  142.      68030, and cpu32.  Although the basic 68000 is not compatible with
  143.      the 68881, a combination of the two can be specified, since it's
  144.      possible to do emulation of the coprocessor instructions with the
  145.      main processor.
  146.  
  147. `-m68851 | -mno-68851'
  148.      The target machine does (or does not) have a memory-management
  149.      unit coprocessor.  The default is to assume an MMU for 68020 and
  150.      up.
  151.  
  152.    The following options are available when `as' is configured for the
  153. SPARC architecture:
  154.  
  155. `-Av6 | -Av7 | -Av8 | -Asparclite'
  156.      Explicitly select a variant of the SPARC architecture.
  157.  
  158. `-bump'
  159.      Warn when the assembler switches to another architecture.
  160.  
  161. * Menu:
  162.  
  163. * Manual::                      Structure of this Manual
  164. * GNU Assembler::               as, the GNU Assembler
  165. * Object Formats::              Object File Formats
  166. * Command Line::                Command Line
  167. * Input Files::                 Input Files
  168. * Object::                      Output (Object) File
  169. * Errors::                      Error and Warning Messages
  170.  
  171. 
  172. File: as,  Node: Manual,  Next: GNU Assembler,  Up: Overview
  173.  
  174. Structure of this Manual
  175. ========================
  176.  
  177.    This manual is intended to describe what you need to know to use GNU
  178. `as'.  We cover the syntax expected in source files, including notation
  179. for symbols, constants, and expressions; the directives that `as'
  180. understands; and of course how to invoke `as'.
  181.  
  182.    This manual also describes some of the machine-dependent features of
  183. various flavors of the assembler.
  184.  
  185.    On the other hand, this manual is *not* intended as an introduction
  186. to programming in assembly language--let alone programming in general!
  187. In a similar vein, we make no attempt to introduce the machine
  188. architecture; we do *not* describe the instruction set, standard
  189. mnemonics, registers or addressing modes that are standard to a
  190. particular architecture.  You may want to consult the manufacturer's
  191. machine architecture manual for this information.
  192.  
  193. 
  194. File: as,  Node: GNU Assembler,  Next: Object Formats,  Prev: Manual,  Up: Overview
  195.  
  196. as, the GNU Assembler
  197. =====================
  198.  
  199.    GNU `as' is really a family of assemblers.  If you use (or have
  200. used) the GNU assembler on one architecture, you should find a fairly
  201. similar environment when you use it on another architecture.  Each
  202. version has much in common with the others, including object file
  203. formats, most assembler directives (often called "pseudo-ops") and
  204. assembler syntax.
  205.  
  206.    `as' is primarily intended to assemble the output of the GNU C
  207. compiler `gcc' for use by the linker `ld'.  Nevertheless, we've tried
  208. to make `as' assemble correctly everything that other assemblers for
  209. the same machine would assemble.  Any exceptions are documented
  210. explicitly (*note Machine Dependencies::.).  This doesn't mean `as'
  211. always uses the same syntax as another assembler for the same
  212. architecture; for example, we know of several incompatible versions of
  213. 680x0 assembly language syntax.
  214.  
  215.    Unlike older assemblers, `as' is designed to assemble a source
  216. program in one pass of the source file.  This has a subtle impact on the
  217. `.org' directive (*note `.org': Org.).
  218.  
  219. 
  220. File: as,  Node: Object Formats,  Next: Command Line,  Prev: GNU Assembler,  Up: Overview
  221.  
  222. Object File Formats
  223. ===================
  224.  
  225.    The GNU assembler can be configured to produce several alternative
  226. object file formats.  For the most part, this does not affect how you
  227. write assembly language programs; but directives for debugging symbols
  228. are typically different in different file formats.  *Note Symbol
  229. Attributes: Symbol Attributes.
  230.  
  231. 
  232. File: as,  Node: Command Line,  Next: Input Files,  Prev: Object Formats,  Up: Overview
  233.  
  234. Command Line
  235. ============
  236.  
  237.    After the program name `as', the command line may contain options
  238. and file names.  Options may appear in any order, and may be before,
  239. after, or between file names.  The order of file names is significant.
  240.  
  241.    `--' (two hyphens) by itself names the standard input file
  242. explicitly, as one of the files for `as' to assemble.
  243.  
  244.    Except for `--' any command line argument that begins with a hyphen
  245. (`-') is an option.  Each option changes the behavior of `as'.  No
  246. option changes the way another option works.  An option is a `-'
  247. followed by one or more letters; the case of the letter is important.
  248. All options are optional.
  249.  
  250.    Some options expect exactly one file name to follow them.  The file
  251. name may either immediately follow the option's letter (compatible with
  252. older assemblers) or it may be the next command argument (GNU
  253. standard).  These two command lines are equivalent:
  254.  
  255.      as -o my-object-file.o mumble.s
  256.      as -omy-object-file.o mumble.s
  257.  
  258. 
  259. File: as,  Node: Input Files,  Next: Object,  Prev: Command Line,  Up: Overview
  260.  
  261. Input Files
  262. ===========
  263.  
  264.    We use the phrase "source program", abbreviated "source", to
  265. describe the program input to one run of `as'.  The program may be in
  266. one or more files; how the source is partitioned into files doesn't
  267. change the meaning of the source.
  268.  
  269.    The source program is a concatenation of the text in all the files,
  270. in the order specified.
  271.  
  272.    Each time you run `as' it assembles exactly one source program.  The
  273. source program is made up of one or more files.  (The standard input is
  274. also a file.)
  275.  
  276.    You give `as' a command line that has zero or more input file names.
  277. The input files are read (from left file name to right).  A command
  278. line argument (in any position) that has no special meaning is taken to
  279. be an input file name.
  280.  
  281.    If you give `as' no file names it attempts to read one input file
  282. from the `as' standard input, which is normally your terminal.  You may
  283. have to type ctl-D to tell `as' there is no more program to assemble.
  284.  
  285.    Use `--' if you need to explicitly name the standard input file in
  286. your command line.
  287.  
  288.    If the source is empty, `as' will produce a small, empty object file.
  289.  
  290. Filenames and Line-numbers
  291. --------------------------
  292.  
  293.    There are two ways of locating a line in the input file (or files)
  294. and either may be used in reporting error messages.  One way refers to
  295. a line number in a physical file; the other refers to a line number in a
  296. "logical" file.  *Note Error and Warning Messages: Errors.
  297.  
  298.    "Physical files" are those files named in the command line given to
  299. `as'.
  300.  
  301.    "Logical files" are simply names declared explicitly by assembler
  302. directives; they bear no relation to physical files.  Logical file names
  303. help error messages reflect the original source file, when `as' source
  304. is itself synthesized from other files.  *Note `.app-file': App-File.
  305.  
  306. 
  307. File: as,  Node: Object,  Next: Errors,  Prev: Input Files,  Up: Overview
  308.  
  309. Output (Object) File
  310. ====================
  311.  
  312.    Every time you run `as' it produces an output file, which is your
  313. assembly language program translated into numbers.  This file is the
  314. object file, named `b.out', if `as' is configured for the Intel 80960,
  315. or unless you tell `as' to give it another name by using the `-o'
  316. option.  Conventionally, object file names end with `.o'.  The default
  317. name of `a.out' is used for historical reasons:  older assemblers were
  318. capable of assembling self-contained programs directly into a runnable
  319. program.  (For some formats, this isn't currently possible, but it can
  320. be done for `a.out' format.)
  321.  
  322.    The object file is meant for input to the linker `ld'.  It contains
  323. assembled program code, information to help `ld' integrate the
  324. assembled program into a runnable file, and (optionally) symbolic
  325. information for the debugger.
  326.  
  327. 
  328. File: as,  Node: Errors,  Prev: Object,  Up: Overview
  329.  
  330. Error and Warning Messages
  331. ==========================
  332.  
  333.    `as' may write warnings and error messages to the standard error
  334. file (usually your terminal).  This should not happen when  a compiler
  335. runs `as' automatically.  Warnings report an assumption made so that
  336. `as' could keep assembling a flawed program; errors report a grave
  337. problem that stops the assembly.
  338.  
  339.    Warning messages have the format
  340.  
  341.      file_name:NNN:Warning Message Text
  342.  
  343. (where NNN is a line number).  If a logical file name has been given
  344. (*note `.app-file': App-File.) it is used for the filename, otherwise
  345. the name of the current input file is used.  If a logical line number
  346. was given (*note `.line': Line.) then it is used to calculate the
  347. number printed, otherwise the actual line in the current source file is
  348. printed.  The message text is intended to be self explanatory (in the
  349. grand Unix tradition).
  350.  
  351.    Error messages have the format
  352.      file_name:NNN:FATAL:Error Message Text
  353.    The file name and line number are derived as for warning messages.
  354. The actual message text may be rather less explanatory because many of
  355. them aren't supposed to happen.
  356.  
  357. 
  358. File: as,  Node: Invoking,  Next: Syntax,  Prev: Overview,  Up: Top
  359.  
  360. Command-Line Options
  361. ********************
  362.  
  363.    This chapter describes command-line options available in *all*
  364. versions of the GNU assembler; *note Machine Dependencies::., for
  365. options specific to particular machine architectures.
  366.  
  367.    If you are invoking `as' via the GNU C compiler (version 2), you can
  368. use the `-Wa' option to pass arguments through to the assembler.  The
  369. assembler arguments must be separated from each other (and the `-Wa')
  370. by commas.  For example:
  371.  
  372.      gcc -c -g -O -Wa,-alh,-L file.c
  373.  
  374.    will cause a listing to be emitted to standard output with high-level
  375. and assembly source.
  376.  
  377.    Many compiler command-line options, such as `-R' and many
  378. machine-specific options, will be automatically be passed to the
  379. assembler by the compiler, so usually you do not need to use this `-Wa'
  380. mechanism.
  381.  
  382. * Menu:
  383.  
  384. * a::             -a[dhlns] enable listings
  385. * D::             -D for compatibility
  386. * f::             -f to work faster
  387. * I::             -I for .include search path
  388.  
  389. * K::             -K for difference tables
  390.  
  391. * L::             -L to retain local labels
  392. * o::             -o to name the object file
  393. * R::             -R to join data and text sections
  394. * v::             -v to announce version
  395. * W::             -W to suppress warnings
  396.  
  397. 
  398. File: as,  Node: a,  Next: D,  Up: Invoking
  399.  
  400. Enable Listings: `-a[dhlns]'
  401. ============================
  402.  
  403.    These options enable listing output from the assembler.  By itself,
  404. `-a' requests high-level, assembly, and symbols listing.  Other letters
  405. may be used to select specific options for the list: `-ah' requests a
  406. high-level language listing, `-al' requests an output-program assembly
  407. listing, and `-as' requests a symbol table listing.  High-level
  408. listings require that a compiler debugging option like `-g' be used,
  409. and that assembly listings (`-al') be requested also.
  410.  
  411.    The `-ad' option may be used to omit debugging pseudo-ops from the
  412. listing.
  413.  
  414.    Once you have specified one of these options, you can further control
  415. listing output and its appearance using the directives `.list',
  416. `.nolist', `.psize', `.eject', `.title', and `.sbttl'.  The `-an'
  417. option turns off all forms processing.  If you do not request listing
  418. output with one of the `-a' options, the listing-control directives
  419. have no effect.
  420.  
  421.    The letters after `-a' may be combined into one option, *e.g.*,
  422. `-aln'.
  423.  
  424. 
  425. File: as,  Node: D,  Next: f,  Prev: a,  Up: Invoking
  426.  
  427. `-D'
  428. ====
  429.  
  430.    This option has no effect whatsoever, but it is accepted to make it
  431. more likely that scripts written for other assemblers will also work
  432. with `as'.
  433.  
  434. 
  435. File: as,  Node: f,  Next: I,  Prev: D,  Up: Invoking
  436.  
  437. Work Faster: `-f'
  438. =================
  439.  
  440.    `-f' should only be used when assembling programs written by a
  441. (trusted) compiler.  `-f' stops the assembler from doing whitespace and
  442. comment pre-processing on the input file(s) before assembling them.
  443. *Note Pre-processing: Pre-processing.
  444.  
  445.      *Warning:* if the files actually need to be pre-processed (if they
  446.      contain comments, for example), `as' will not work correctly if
  447.      `-f' is used.
  448.  
  449. 
  450. File: as,  Node: I,  Next: K,  Prev: f,  Up: Invoking
  451.  
  452. `.include' search path: `-I' PATH
  453. =================================
  454.  
  455.    Use this option to add a PATH to the list of directories `as' will
  456. search for files specified in `.include' directives (*note `.include':
  457. Include.).  You may use `-I' as many times as necessary to include a
  458. variety of paths.  The current working directory is always searched
  459. first; after that, `as' searches any `-I' directories in the same order
  460. as they were specified (left to right) on the command line.
  461.  
  462. 
  463. File: as,  Node: K,  Next: L,  Prev: I,  Up: Invoking
  464.  
  465. Difference Tables: `-K'
  466. =======================
  467.  
  468.    `as' sometimes alters the code emitted for directives of the form
  469. `.word SYM1-SYM2'; *note `.word': Word..  You can use the `-K' option
  470. if you want a warning issued when this is done.
  471.  
  472. 
  473. File: as,  Node: L,  Next: o,  Prev: K,  Up: Invoking
  474.  
  475. Include Local Labels: `-L'
  476. ==========================
  477.  
  478.    Labels beginning with `L' (upper case only) are called "local
  479. labels". *Note Symbol Names::.  Normally you don't see such labels when
  480. debugging, because they are intended for the use of programs (like
  481. compilers) that compose assembler programs, not for your notice.
  482. Normally both `as' and `ld' discard such labels, so you don't normally
  483. debug with them.
  484.  
  485.    This option tells `as' to retain those `L...' symbols in the object
  486. file.  Usually if you do this you also tell the linker `ld' to preserve
  487. symbols whose names begin with `L'.
  488.  
  489. 
  490. File: as,  Node: o,  Next: R,  Prev: L,  Up: Invoking
  491.  
  492. Name the Object File: `-o'
  493. ==========================
  494.  
  495.    There is always one object file output when you run `as'.  By
  496. default it has the name `a.out' (or `b.out', for Intel 960 targets
  497. only).  You use this option (which takes exactly one filename) to give
  498. the object file a different name.
  499.  
  500.    Whatever the object file is called, `as' will overwrite any existing
  501. file of the same name.
  502.  
  503. 
  504. File: as,  Node: R,  Next: v,  Prev: o,  Up: Invoking
  505.  
  506. Join Data and Text Sections: `-R'
  507. =================================
  508.  
  509.    `-R' tells `as' to write the object file as if all data-section data
  510. lives in the text section.  This is only done at the very last moment:
  511. your binary data are the same, but data section parts are relocated
  512. differently.  The data section part of your object file is zero bytes
  513. long because all its bytes are appended to the text section.  (*Note
  514. Sections and Relocation: Sections.)
  515.  
  516.    When you specify `-R' it would be possible to generate shorter
  517. address displacements (because we don't have to cross between text and
  518. data section).  We refrain from doing this simply for compatibility with
  519. older versions of `as'.  In future, `-R' may work this way.
  520.  
  521.    When `as' is configured for COFF output, this option is only useful
  522. if you use sections named `.text' and `.data'.
  523.  
  524. 
  525. File: as,  Node: v,  Next: W,  Prev: R,  Up: Invoking
  526.  
  527. Announce Version: `-v'
  528. ======================
  529.  
  530.    You can find out what version of as is running by including the
  531. option `-v' (which you can also spell as `-version') on the command
  532. line.
  533.  
  534. 
  535. File: as,  Node: W,  Prev: v,  Up: Invoking
  536.  
  537. Suppress Warnings: `-W'
  538. =======================
  539.  
  540.    `as' should never give a warning or error message when assembling
  541. compiler output.  But programs written by people often cause `as' to
  542. give a warning that a particular assumption was made.  All such
  543. warnings are directed to the standard error file.  If you use this
  544. option, no warnings are issued.  This option only affects the warning
  545. messages: it does not change any particular of how `as' assembles your
  546. file.  Errors, which stop the assembly, are still reported.
  547.  
  548. 
  549. File: as,  Node: Syntax,  Next: Sections,  Prev: Invoking,  Up: Top
  550.  
  551. Syntax
  552. ******
  553.  
  554.    This chapter describes the machine-independent syntax allowed in a
  555. source file.  `as' syntax is similar to what many other assemblers use;
  556. it is inspired by the BSD 4.2 assembler, except that `as' does not
  557. assemble Vax bit-fields.
  558.  
  559. * Menu:
  560.  
  561. * Pre-processing::              Pre-processing
  562. * Whitespace::                  Whitespace
  563. * Comments::                    Comments
  564. * Symbol Intro::                Symbols
  565. * Statements::                  Statements
  566. * Constants::                   Constants
  567.  
  568. 
  569. File: as,  Node: Pre-processing,  Next: Whitespace,  Up: Syntax
  570.  
  571. Pre-Processing
  572. ==============
  573.  
  574.    The `as' internal pre-processor:
  575.    * adjusts and removes extra whitespace.  It leaves one space or tab
  576.      before the keywords on a line, and turns any other whitespace on
  577.      the line into a single space.
  578.  
  579.    * removes all comments, replacing them with a single space, or an
  580.      appropriate number of newlines.
  581.  
  582.    * converts character constants into the appropriate numeric values.
  583.  
  584.    Note that it does not do macro processing, include file handling, or
  585. anything else you may get from your C compiler's pre-processor.  You can
  586. do include file processing with the `.include' directive (*note
  587. `.include': Include.).  Other "CPP" style pre-processing can be done
  588. with the GNU C compiler, by giving the input file a `.S' suffix; see
  589. the compiler documentation for details.
  590.  
  591.    Excess whitespace, comments, and character constants cannot be used
  592. in the portions of the input text that are not pre-processed.
  593.  
  594.    If the first line of an input file is `#NO_APP' or the `-f' option
  595. is given, the input file will not be pre-processed.  Within such an
  596. input file, parts of the file can be pre-processed by putting a line
  597. that says `#APP' before the text that should be pre-processed, and
  598. putting a line that says `#NO_APP' after them.  This feature is mainly
  599. intend to support `asm' statements in compilers whose output normally
  600. does not need to be pre-processed.
  601.  
  602. 
  603. File: as,  Node: Whitespace,  Next: Comments,  Prev: Pre-processing,  Up: Syntax
  604.  
  605. Whitespace
  606. ==========
  607.  
  608.    "Whitespace" is one or more blanks or tabs, in any order.
  609. Whitespace is used to separate symbols, and to make programs neater for
  610. people to read.  Unless within character constants (*note Character
  611. Constants: Characters.), any whitespace means the same as exactly one
  612. space.
  613.  
  614. 
  615. File: as,  Node: Comments,  Next: Symbol Intro,  Prev: Whitespace,  Up: Syntax
  616.  
  617. Comments
  618. ========
  619.  
  620.    There are two ways of rendering comments to `as'.  In both cases the
  621. comment is equivalent to one space.
  622.  
  623.    Anything from `/*' through the next `*/' is a comment.  This means
  624. you may not nest these comments.
  625.  
  626.      /*
  627.        The only way to include a newline ('\n') in a comment
  628.        is to use this sort of comment.
  629.      */
  630.      
  631.      /* This sort of comment does not nest. */
  632.  
  633.    Anything from the "line comment" character to the next newline is
  634. considered a comment and is ignored.  The line comment character is `#'
  635. on the Vax; `#' on the i960; `!' on the SPARC; `|' on the 680x0; `;'
  636. for the AMD 29K family; `;' for the H8/300 family; `!' for the H8/500
  637. family; `!' for the Hitachi SH; `!' for the Z8000; see *Note Machine
  638. Dependencies::.
  639.  
  640.    On some machines there are two different line comment characters.
  641. One will only begin a comment if it is the first non-whitespace
  642. character on a line, while the other will always begin a comment.
  643.  
  644.    To be compatible with past assemblers, a special interpretation is
  645. given to lines that begin with `#'.  Following the `#' an absolute
  646. expression (*note Expressions::.) is expected:  this will be the
  647. logical line number of the next line.  Then a string (*Note Strings::.)
  648. is allowed: if present it is a new logical file name.  The rest of the
  649. line, if any, should be whitespace.
  650.  
  651.    If the first non-whitespace characters on the line are not numeric,
  652. the line is ignored.  (Just like a comment.)
  653.                                # This is an ordinary comment.
  654.      # 42-6 "new_file_name"    # New logical file name
  655.                                # This is logical line # 36.
  656.    This feature is deprecated, and may disappear from future versions
  657. of `as'.
  658.  
  659. 
  660. File: as,  Node: Symbol Intro,  Next: Statements,  Prev: Comments,  Up: Syntax
  661.  
  662. Symbols
  663. =======
  664.  
  665.    A "symbol" is one or more characters chosen from the set of all
  666. letters (both upper and lower case), digits and the three characters
  667. `_.$'.  On most machines, you can also use `$' in symbol names;
  668. exceptions are noted in *Note Machine Dependencies::.  No symbol may
  669. begin with a digit.  Case is significant.  There is no length limit:
  670. all characters are significant.  Symbols are delimited by characters
  671. not in that set, or by the beginning of a file (since the source
  672. program must end with a newline, the end of a file is not a possible
  673. symbol delimiter).  *Note Symbols::.
  674.  
  675. 
  676. File: as,  Node: Statements,  Next: Constants,  Prev: Symbol Intro,  Up: Syntax
  677.  
  678. Statements
  679. ==========
  680.  
  681.    A "statement" ends at a newline character (`\n') or line separator
  682. character.  (The line separator is usually `;', unless this conflicts
  683. with the comment character; *note Machine Dependencies::..)  The
  684. newline or separator character is considered part of the preceding
  685. statement.  Newlines and separators within character constants are an
  686. exception: they don't end statements.
  687.  
  688.    It is an error to end any statement with end-of-file:  the last
  689. character of any input file should be a newline.
  690.  
  691.    You may write a statement on more than one line if you put a
  692. backslash (`\') immediately in front of any newlines within the
  693. statement.  When `as' reads a backslashed newline both characters are
  694. ignored.  You can even put backslashed newlines in the middle of symbol
  695. names without changing the meaning of your source program.
  696.  
  697.    An empty statement is allowed, and may include whitespace.  It is
  698. ignored.
  699.  
  700.    A statement begins with zero or more labels, optionally followed by a
  701. key symbol which determines what kind of statement it is.  The key
  702. symbol determines the syntax of the rest of the statement.  If the
  703. symbol begins with a dot `.' then the statement is an assembler
  704. directive: typically valid for any computer.  If the symbol begins with
  705. a letter the statement is an assembly language "instruction": it will
  706. assemble into a machine language instruction.  Different versions of
  707. `as' for different computers will recognize different instructions.  In
  708. fact, the same symbol may represent a different instruction in a
  709. different computer's assembly language.
  710.  
  711.    A label is a symbol immediately followed by a colon (`:').
  712. Whitespace before a label or after a colon is permitted, but you may not
  713. have whitespace between a label's symbol and its colon. *Note Labels::.
  714.  
  715.      label:     .directive    followed by something
  716.      another_label:           # This is an empty statement.
  717.                 instruction   operand_1, operand_2, ...
  718.  
  719. 
  720. File: as,  Node: Constants,  Prev: Statements,  Up: Syntax
  721.  
  722. Constants
  723. =========
  724.  
  725.    A constant is a number, written so that its value is known by
  726. inspection, without knowing any context.  Like this:
  727.      .byte  74, 0112, 092, 0x4A, 0X4a, 'J, '\J # All the same value.
  728.      .ascii "Ring the bell\7"                  # A string constant.
  729.      .octa  0x123456789abcdef0123456789ABCDEF0 # A bignum.
  730.      .float 0f-314159265358979323846264338327\
  731.      95028841971.693993751E-40                 # - pi, a flonum.
  732.  
  733. * Menu:
  734.  
  735. * Characters::                  Character Constants
  736. * Numbers::                     Number Constants
  737.  
  738. 
  739. File: as,  Node: Characters,  Next: Numbers,  Up: Constants
  740.  
  741. Character Constants
  742. -------------------
  743.  
  744.    There are two kinds of character constants.  A "character" stands
  745. for one character in one byte and its value may be used in numeric
  746. expressions.  String constants (properly called string *literals*) are
  747. potentially many bytes and their values may not be used in arithmetic
  748. expressions.
  749.  
  750. * Menu:
  751.  
  752. * Strings::                     Strings
  753. * Chars::                       Characters
  754.  
  755. 
  756. File: as,  Node: Strings,  Next: Chars,  Up: Characters
  757.  
  758. Strings
  759. .......
  760.  
  761.    A "string" is written between double-quotes.  It may contain
  762. double-quotes or null characters.  The way to get special characters
  763. into a string is to "escape" these characters: precede them with a
  764. backslash `\' character.  For example `\\' represents one backslash:
  765. the first `\' is an escape which tells `as' to interpret the second
  766. character literally as a backslash (which prevents `as' from
  767. recognizing the second `\' as an escape character).  The complete list
  768. of escapes follows.
  769.  
  770. `\b'
  771.      Mnemonic for backspace; for ASCII this is octal code 010.
  772.  
  773. `\f'
  774.      Mnemonic for FormFeed; for ASCII this is octal code 014.
  775.  
  776. `\n'
  777.      Mnemonic for newline; for ASCII this is octal code 012.
  778.  
  779. `\r'
  780.      Mnemonic for carriage-Return; for ASCII this is octal code 015.
  781.  
  782. `\t'
  783.      Mnemonic for horizontal Tab; for ASCII this is octal code 011.
  784.  
  785. `\ DIGIT DIGIT DIGIT'
  786.      An octal character code.  The numeric code is 3 octal digits.  For
  787.      compatibility with other Unix systems, 8 and 9 are accepted as
  788.      digits: for example, `\008' has the value 010, and `\009' the
  789.      value 011.
  790.  
  791. `\\'
  792.      Represents one `\' character.
  793.  
  794. `\"'
  795.      Represents one `"' character.  Needed in strings to represent this
  796.      character, because an unescaped `"' would end the string.
  797.  
  798. `\ ANYTHING-ELSE'
  799.      Any other character when escaped by `\' will give a warning, but
  800.      assemble as if the `\' was not present.  The idea is that if you
  801.      used an escape sequence you clearly didn't want the literal
  802.      interpretation of the following character.  However `as' has no
  803.      other interpretation, so `as' knows it is giving you the wrong
  804.      code and warns you of the fact.
  805.  
  806.    Which characters are escapable, and what those escapes represent,
  807. varies widely among assemblers.  The current set is what we think the
  808. BSD 4.2 assembler recognizes, and is a subset of what most C compilers
  809. recognize.  If you are in doubt, don't use an escape sequence.
  810.  
  811. 
  812. File: as,  Node: Chars,  Prev: Strings,  Up: Characters
  813.  
  814. Characters
  815. ..........
  816.  
  817.    A single character may be written as a single quote immediately
  818. followed by that character.  The same escapes apply to characters as to
  819. strings.  So if you want to write the character backslash, you must
  820. write `'\\' where the first `\' escapes the second `\'.  As you can
  821. see, the quote is an acute accent, not a grave accent.  A newline
  822. immediately following an acute accent is taken as a literal character
  823. and does not count as the end of a statement.  The value of a character
  824. constant in a numeric expression is the machine's byte-wide code for
  825. that character.  `as' assumes your character code is ASCII: `'A' means
  826. 65, `'B' means 66, and so on.
  827.  
  828. 
  829. File: as,  Node: Numbers,  Prev: Characters,  Up: Constants
  830.  
  831. Number Constants
  832. ----------------
  833.  
  834.    `as' distinguishes three kinds of numbers according to how they are
  835. stored in the target machine.  *Integers* are numbers that would fit
  836. into an `int' in the C language.  *Bignums* are integers, but they are
  837. stored in more than 32 bits.  *Flonums* are floating point numbers,
  838. described below.
  839.  
  840. * Menu:
  841.  
  842. * Integers::                    Integers
  843. * Bignums::                     Bignums
  844. * Flonums::                     Flonums
  845.  
  846. 
  847. File: as,  Node: Integers,  Next: Bignums,  Up: Numbers
  848.  
  849. Integers
  850. ........
  851.  
  852.    A binary integer is `0b' or `0B' followed by zero or more of the
  853. binary digits `01'.
  854.  
  855.    An octal integer is `0' followed by zero or more of the octal digits
  856. (`01234567').
  857.  
  858.    A decimal integer starts with a non-zero digit followed by zero or
  859. more digits (`0123456789').
  860.  
  861.    A hexadecimal integer is `0x' or `0X' followed by one or more
  862. hexadecimal digits chosen from `0123456789abcdefABCDEF'.
  863.  
  864.    Integers have the usual values.  To denote a negative integer, use
  865. the prefix operator `-' discussed under expressions (*note Prefix
  866. Operators: Prefix Ops.).
  867.  
  868. 
  869. File: as,  Node: Bignums,  Next: Flonums,  Prev: Integers,  Up: Numbers
  870.  
  871. Bignums
  872. .......
  873.  
  874.    A "bignum" has the same syntax and semantics as an integer except
  875. that the number (or its negative) takes more than 32 bits to represent
  876. in binary.  The distinction is made because in some places integers are
  877. permitted while bignums are not.
  878.  
  879. 
  880. File: as,  Node: Flonums,  Prev: Bignums,  Up: Numbers
  881.  
  882. Flonums
  883. .......
  884.  
  885.    A "flonum" represents a floating point number.  The translation is
  886. indirect: a decimal floating point number from the text is converted by
  887. `as' to a generic binary floating point number of more than sufficient
  888. precision.  This generic floating point number is converted to a
  889. particular computer's floating point format (or formats) by a portion
  890. of `as' specialized to that computer.
  891.  
  892.    A flonum is written by writing (in order)
  893.    * The digit `0'.
  894.  
  895.    * A letter, to tell `as' the rest of the number is a flonum.  `e' is
  896.      recommended.  Case is not important.
  897.  
  898.      On the H8/300, H8/500, Hitachi SH, and AMD 29K architectures, the
  899.      letter must be one of the letters `DFPRSX' (in upper or lower
  900.      case).
  901.  
  902.      On the Intel 960 architecture, the letter must be one of the
  903.      letters `DFT' (in upper or lower case).
  904.  
  905.    * An optional sign: either `+' or `-'.
  906.  
  907.    * An optional "integer part": zero or more decimal digits.
  908.  
  909.    * An optional "fractional part": `.' followed by zero or more
  910.      decimal digits.
  911.  
  912.    * An optional exponent, consisting of:
  913.  
  914.         * An `E' or `e'.
  915.  
  916.         * Optional sign: either `+' or `-'.
  917.  
  918.         * One or more decimal digits.
  919.  
  920.    At least one of the integer part or the fractional part must be
  921. present.  The floating point number has the usual base-10 value.
  922.  
  923.    `as' does all processing using integers.  Flonums are computed
  924. independently of any floating point hardware in the computer running
  925. `as'.
  926.  
  927. 
  928. File: as,  Node: Sections,  Next: Symbols,  Prev: Syntax,  Up: Top
  929.  
  930. Sections and Relocation
  931. ***********************
  932.  
  933. * Menu:
  934.  
  935. * Secs Background::             Background
  936. * Ld Sections::                 ld Sections
  937. * As Sections::                 as Internal Sections
  938. * Sub-Sections::                Sub-Sections
  939. * bss::                         bss Section
  940.  
  941. 
  942. File: as,  Node: Secs Background,  Next: Ld Sections,  Up: Sections
  943.  
  944. Background
  945. ==========
  946.  
  947.    Roughly, a section is a range of addresses, with no gaps; all data
  948. "in" those addresses is treated the same for some particular purpose.
  949. For example there may be a "read only" section.
  950.  
  951.    The linker `ld' reads many object files (partial programs) and
  952. combines their contents to form a runnable program.  When `as' emits an
  953. object file, the partial program is assumed to start at address 0.
  954. `ld' will assign the final addresses the partial program occupies, so
  955. that different partial programs don't overlap.  This is actually an
  956. over-simplification, but it will suffice to explain how `as' uses
  957. sections.
  958.  
  959.    `ld' moves blocks of bytes of your program to their run-time
  960. addresses.  These blocks slide to their run-time addresses as rigid
  961. units; their length does not change and neither does the order of bytes
  962. within them.  Such a rigid unit is called a *section*.  Assigning
  963. run-time addresses to sections is called "relocation".  It includes the
  964. task of adjusting mentions of object-file addresses so they refer to
  965. the proper run-time addresses.  For the H8/300 and H8/500, and for the
  966. Hitachi SH, `as' pads sections if needed to ensure they end on a word
  967. (sixteen bit) boundary.
  968.  
  969.    An object file written by `as' has at least three sections, any of
  970. which may be empty.  These are named "text", "data" and "bss" sections.
  971.  
  972.    When it generates COFF output, `as' can also generate whatever other
  973. named sections you specify using the `.section' directive (*note
  974. `.section': Section.).  If you don't use any directives that place
  975. output in the `.text' or `.data' sections, these sections will still
  976. exist, but will be empty.
  977.  
  978.    Within the object file, the text section starts at address `0', the
  979. data section follows, and the bss section follows the data section.
  980.  
  981.    To let `ld' know which data will change when the sections are
  982. relocated, and how to change that data, `as' also writes to the object
  983. file details of the relocation needed.  To perform relocation `ld' must
  984. know, each time an address in the object file is mentioned:
  985.    * Where in the object file is the beginning of this reference to an
  986.      address?
  987.  
  988.    * How long (in bytes) is this reference?
  989.  
  990.    * Which section does the address refer to?  What is the numeric
  991.      value of
  992.           (ADDRESS) - (START-ADDRESS OF SECTION)?
  993.  
  994.    * Is the reference to an address "Program-Counter relative"?
  995.  
  996.    In fact, every address `as' ever uses is expressed as
  997.      (SECTION) + (OFFSET INTO SECTION)
  998.  
  999. Further, every expression `as' computes is of this section-relative
  1000. nature.  "Absolute expression" means an expression with section
  1001. "absolute" (*note Ld Sections::.).  A "pass1 expression" means an
  1002. expression with section "pass1" (*note as Internal Sections: As
  1003. Sections.).  In this manual we use the notation {SECNAME N} to mean
  1004. "offset N into section SECNAME".
  1005.  
  1006.    Apart from text, data and bss sections you need to know about the
  1007. "absolute" section.  When `ld' mixes partial programs, addresses in the
  1008. absolute section remain unchanged.  For example, address `{absolute 0}'
  1009. is "relocated" to run-time address 0 by `ld'.  Although two partial
  1010. programs' data sections will not overlap addresses after linking, *by
  1011. definition* their absolute sections will overlap.  Address `{absolute
  1012. 239}' in one partial program will always be the same address when the
  1013. program is running as address `{absolute 239}' in any other partial
  1014. program.
  1015.  
  1016.    The idea of sections is extended to the "undefined" section.  Any
  1017. address whose section is unknown at assembly time is by definition
  1018. rendered {undefined U}--where U will be filled in later.  Since numbers
  1019. are always defined, the only way to generate an undefined address is to
  1020. mention an undefined symbol.  A reference to a named common block would
  1021. be such a symbol: its value is unknown at assembly time so it has
  1022. section *undefined*.
  1023.  
  1024.    By analogy the word *section* is used to describe groups of sections
  1025. in the linked program.  `ld' puts all partial programs' text sections
  1026. in contiguous addresses in the linked program.  It is customary to
  1027. refer to the *text section* of a program, meaning all the addresses of
  1028. all partial program's text sections.  Likewise for data and bss
  1029. sections.
  1030.  
  1031.    Some sections are manipulated by `ld'; others are invented for use
  1032. of `as' and have no meaning except during assembly.
  1033.  
  1034. 
  1035. File: as,  Node: Ld Sections,  Next: As Sections,  Prev: Secs Background,  Up: Sections
  1036.  
  1037. ld Sections
  1038. ===========
  1039.  
  1040.    `ld' deals with just four kinds of sections, summarized below.
  1041.  
  1042. *named sections*
  1043. *text section*
  1044. *data section*
  1045.      These sections hold your program.  `as' and `ld' treat them as
  1046.      separate but equal sections.  Anything you can say of one section
  1047.      is true another.  When the program is running, however, it is
  1048.      customary for the text section to be unalterable.  The text
  1049.      section is often shared among processes: it will contain
  1050.      instructions, constants and the like.  The data section of a
  1051.      running program is usually alterable: for example, C variables
  1052.      would be stored in the data section.
  1053.  
  1054. *bss section*
  1055.      This section contains zeroed bytes when your program begins
  1056.      running.  It is used to hold unitialized variables or common
  1057.      storage.  The length of each partial program's bss section is
  1058.      important, but because it starts out containing zeroed bytes there
  1059.      is no need to store explicit zero bytes in the object file.  The
  1060.      bss section was invented to eliminate those explicit zeros from
  1061.      object files.
  1062.  
  1063. *absolute section*
  1064.      Address 0 of this section is always "relocated" to runtime address
  1065.      0.  This is useful if you want to refer to an address that `ld'
  1066.      must not change when relocating.  In this sense we speak of
  1067.      absolute addresses being "unrelocatable": they don't change during
  1068.      relocation.
  1069.  
  1070. *undefined section*
  1071.      This "section" is a catch-all for address references to objects
  1072.      not in the preceding sections.
  1073.  
  1074.    An idealized example of three relocatable sections follows.  The
  1075. example uses the traditional section names `.text' and `.data'.  Memory
  1076. addresses are on the horizontal axis.
  1077.  
  1078.                            +-----+----+--+
  1079.      partial program # 1:  |ttttt|dddd|00|
  1080.                            +-----+----+--+
  1081.      
  1082.                            text   data bss
  1083.                            seg.   seg. seg.
  1084.      
  1085.                            +---+---+---+
  1086.      partial program # 2:  |TTT|DDD|000|
  1087.                            +---+---+---+
  1088.      
  1089.                            +--+---+-----+--+----+---+-----+~~
  1090.      linked program:       |  |TTT|ttttt|  |dddd|DDD|00000|
  1091.                            +--+---+-----+--+----+---+-----+~~
  1092.      
  1093.          addresses:        0 ...
  1094.  
  1095. 
  1096. File: as,  Node: As Sections,  Next: Sub-Sections,  Prev: Ld Sections,  Up: Sections
  1097.  
  1098. as Internal Sections
  1099. ====================
  1100.  
  1101.    These sections are meant only for the internal use of `as'.  They
  1102. have no meaning at run-time.  You don't really need to know about these
  1103. sections for most purposes; but they can be mentioned in `as' warning
  1104. messages, so it might be helpful to have an idea of their meanings to
  1105. `as'.  These sections are used to permit the value of every expression
  1106. in your assembly language program to be a section-relative address.
  1107.  
  1108. ASSEMBLER-INTERNAL-LOGIC-ERROR!
  1109.      An internal assembler logic error has been found.  This means
  1110.      there is a bug in the assembler.
  1111.  
  1112. expr section
  1113.      The assembler stores complex expression internally as combinations
  1114.      of symbols.  When it needs to represent an expression as a symbol,
  1115.      it puts it in the expr section.
  1116.  
  1117. 
  1118. File: as,  Node: Sub-Sections,  Next: bss,  Prev: As Sections,  Up: Sections
  1119.  
  1120. Sub-Sections
  1121. ============
  1122.  
  1123.    Assembled bytes conventionally fall into two sections: text and data.
  1124. You may have separate groups of data in named sections that you want to
  1125. end up near to each other in the object file, even though they are not
  1126. contiguous in the assembler source.  `as' allows you to use
  1127. "subsections" for this purpose.  Within each section, there can be
  1128. numbered subsections with values from 0 to 8192.  Objects assembled
  1129. into the same subsection will be grouped with other objects in the same
  1130. subsection when they are all put into the object file.  For example, a
  1131. compiler might want to store constants in the text section, but might
  1132. not want to have them interspersed with the program being assembled.
  1133. In this case, the compiler could issue a `.text 0' before each section
  1134. of code being output, and a `.text 1' before each group of constants
  1135. being output.
  1136.  
  1137.    Subsections are optional.  If you don't use subsections, everything
  1138. will be stored in subsection number zero.
  1139.  
  1140.    Each subsection is zero-padded up to a multiple of four bytes.
  1141. (Subsections may be padded a different amount on different flavors of
  1142. `as'.)
  1143.  
  1144.    Subsections appear in your object file in numeric order, lowest
  1145. numbered to highest.  (All this to be compatible with other people's
  1146. assemblers.) The object file contains no representation of subsections;
  1147. `ld' and other programs that manipulate object files will see no trace
  1148. of them.  They just see all your text subsections as a text section,
  1149. and all your data subsections as a data section.
  1150.  
  1151.    To specify which subsection you want subsequent statements assembled
  1152. into, use a numeric argument to specify it, in a `.text EXPRESSION' or
  1153. a `.data EXPRESSION' statement.  When generating COFF output, you can
  1154. also use an extra subsection argument with arbitrary named sections:
  1155. `.section NAME, EXPRESSION'.  EXPRESSION should be an absolute
  1156. expression.  (*Note Expressions::.)  If you just say `.text' then
  1157. `.text 0' is assumed.  Likewise `.data' means `.data 0'.  Assembly
  1158. begins in `text 0'.  For instance:
  1159.      .text 0     # The default subsection is text 0 anyway.
  1160.      .ascii "This lives in the first text subsection. *"
  1161.      .text 1
  1162.      .ascii "But this lives in the second text subsection."
  1163.      .data 0
  1164.      .ascii "This lives in the data section,"
  1165.      .ascii "in the first data subsection."
  1166.      .text 0
  1167.      .ascii "This lives in the first text section,"
  1168.      .ascii "immediately following the asterisk (*)."
  1169.  
  1170.    Each section has a "location counter" incremented by one for every
  1171. byte assembled into that section.  Because subsections are merely a
  1172. convenience restricted to `as' there is no concept of a subsection
  1173. location counter.  There is no way to directly manipulate a location
  1174. counter--but the `.align' directive will change it, and any label
  1175. definition will capture its current value.  The location counter of the
  1176. section that statements are being assembled into is said to be the
  1177. "active" location counter.
  1178.  
  1179. 
  1180. File: as,  Node: bss,  Prev: Sub-Sections,  Up: Sections
  1181.  
  1182. bss Section
  1183. ===========
  1184.  
  1185.    The bss section is used for local common variable storage.  You may
  1186. allocate address space in the bss section, but you may not dictate data
  1187. to load into it before your program executes.  When your program starts
  1188. running, all the contents of the bss section are zeroed bytes.
  1189.  
  1190.    Addresses in the bss section are allocated with special directives;
  1191. you may not assemble anything directly into the bss section.  Hence
  1192. there are no bss subsections. *Note `.comm': Comm, *note `.lcomm':
  1193. Lcomm..
  1194.  
  1195. 
  1196. File: as,  Node: Symbols,  Next: Expressions,  Prev: Sections,  Up: Top
  1197.  
  1198. Symbols
  1199. *******
  1200.  
  1201.    Symbols are a central concept: the programmer uses symbols to name
  1202. things, the linker uses symbols to link, and the debugger uses symbols
  1203. to debug.
  1204.  
  1205.      *Warning:* `as' does not place symbols in the object file in the
  1206.      same order they were declared.  This may break some debuggers.
  1207.  
  1208. * Menu:
  1209.  
  1210. * Labels::                      Labels
  1211. * Setting Symbols::             Giving Symbols Other Values
  1212. * Symbol Names::                Symbol Names
  1213. * Dot::                         The Special Dot Symbol
  1214. * Symbol Attributes::           Symbol Attributes
  1215.  
  1216. 
  1217. File: as,  Node: Labels,  Next: Setting Symbols,  Up: Symbols
  1218.  
  1219. Labels
  1220. ======
  1221.  
  1222.    A "label" is written as a symbol immediately followed by a colon
  1223. `:'.  The symbol then represents the current value of the active
  1224. location counter, and is, for example, a suitable instruction operand.
  1225. You are warned if you use the same symbol to represent two different
  1226. locations: the first definition overrides any other definitions.
  1227.  
  1228. 
  1229. File: as,  Node: Setting Symbols,  Next: Symbol Names,  Prev: Labels,  Up: Symbols
  1230.  
  1231. Giving Symbols Other Values
  1232. ===========================
  1233.  
  1234.    A symbol can be given an arbitrary value by writing a symbol,
  1235. followed by an equals sign `=', followed by an expression (*note
  1236. Expressions::.).  This is equivalent to using the `.set' directive.
  1237. *Note `.set': Set.
  1238.  
  1239. 
  1240. File: as,  Node: Symbol Names,  Next: Dot,  Prev: Setting Symbols,  Up: Symbols
  1241.  
  1242. Symbol Names
  1243. ============
  1244.  
  1245.    Symbol names begin with a letter or with one of `._'.  On most
  1246. machines, you can also use `$' in symbol names; exceptions are noted in
  1247. *Note Machine Dependencies::.  That character may be followed by any
  1248. string of digits, letters, dollar signs (unless otherwise noted in
  1249. *Note Machine Dependencies::), and underscores.  For the AMD 29K
  1250. family, `?' is also allowed in the body of a symbol name, though not at
  1251. its beginning.
  1252.  
  1253.    Case of letters is significant: `foo' is a different symbol name
  1254. than `Foo'.
  1255.  
  1256.    Each symbol has exactly one name. Each name in an assembly language
  1257. program refers to exactly one symbol. You may use that symbol name any
  1258. number of times in a program.
  1259.  
  1260. Local Symbol Names
  1261. ------------------
  1262.  
  1263.    Local symbols help compilers and programmers use names temporarily.
  1264. There are ten local symbol names, which are re-used throughout the
  1265. program.  You may refer to them using the names `0' `1' ... `9'.  To
  1266. define a local symbol, write a label of the form `N:' (where N
  1267. represents any digit).  To refer to the most recent previous definition
  1268. of that symbol write `Nb', using the same digit as when you defined the
  1269. label.  To refer to the next definition of a local label, write
  1270. `Nf'--where N gives you a choice of 10 forward references.  The `b'
  1271. stands for "backwards" and the `f' stands for "forwards".
  1272.  
  1273.    Local symbols are not emitted by the current GNU C compiler.
  1274.  
  1275.    There is no restriction on how you can use these labels, but
  1276. remember that at any point in the assembly you can refer to at most 10
  1277. prior local labels and to at most 10 forward local labels.
  1278.  
  1279.    Local symbol names are only a notation device.  They are immediately
  1280. transformed into more conventional symbol names before the assembler
  1281. uses them.  The symbol names stored in the symbol table, appearing in
  1282. error messages and optionally emitted to the object file have these
  1283. parts:
  1284.  
  1285. `L'
  1286.      All local labels begin with `L'. Normally both `as' and `ld'
  1287.      forget symbols that start with `L'. These labels are used for
  1288.      symbols you are never intended to see.  If you give the `-L'
  1289.      option then `as' will retain these symbols in the object file. If
  1290.      you also instruct `ld' to retain these symbols, you may use them
  1291.      in debugging.
  1292.  
  1293. `DIGIT'
  1294.      If the label is written `0:' then the digit is `0'.  If the label
  1295.      is written `1:' then the digit is `1'.  And so on up through `9:'.
  1296.  
  1297. A'
  1298.      This unusual character is included so you don't accidentally invent
  1299.      a symbol of the same name.  The character has ASCII value `\001'.
  1300.  
  1301. `*ordinal number*'
  1302.      This is a serial number to keep the labels distinct.  The first
  1303.      `0:' gets the number `1'; The 15th `0:' gets the number `15';
  1304.      *etc.*.  Likewise for the other labels `1:' through `9:'.
  1305.  
  1306.    For instance, the first `1:' is named `LA1', the 44th `3:' is named
  1307. `LA44'.
  1308.  
  1309. 
  1310. File: as,  Node: Dot,  Next: Symbol Attributes,  Prev: Symbol Names,  Up: Symbols
  1311.  
  1312. The Special Dot Symbol
  1313. ======================
  1314.  
  1315.    The special symbol `.' refers to the current address that `as' is
  1316. assembling into.  Thus, the expression `melvin: .long .' will cause
  1317. `melvin' to contain its own address.  Assigning a value to `.' is
  1318. treated the same as a `.org' directive.  Thus, the expression `.=.+4'
  1319. is the same as saying `.space 4'.
  1320.  
  1321. 
  1322. File: as,  Node: Symbol Attributes,  Prev: Dot,  Up: Symbols
  1323.  
  1324. Symbol Attributes
  1325. =================
  1326.  
  1327.    Every symbol has, as well as its name, the attributes "Value" and
  1328. "Type".  Depending on output format, symbols can also have auxiliary
  1329. attributes.
  1330.  
  1331.    If you use a symbol without defining it, `as' assumes zero for all
  1332. these attributes, and probably won't warn you.  This makes the symbol
  1333. an externally defined symbol, which is generally what you would want.
  1334.  
  1335. * Menu:
  1336.  
  1337. * Symbol Value::                Value
  1338. * Symbol Type::                 Type
  1339.  
  1340.  
  1341. * a.out Symbols::               Symbol Attributes: `a.out'
  1342.  
  1343. * COFF Symbols::                Symbol Attributes for COFF
  1344.  
  1345. 
  1346. File: as,  Node: Symbol Value,  Next: Symbol Type,  Up: Symbol Attributes
  1347.  
  1348. Value
  1349. -----
  1350.  
  1351.    The value of a symbol is (usually) 32 bits.  For a symbol which
  1352. labels a location in the text, data, bss or absolute sections the value
  1353. is the number of addresses from the start of that section to the label.
  1354. Naturally for text, data and bss sections the value of a symbol changes
  1355. as `ld' changes section base addresses during linking.  Absolute
  1356. symbols' values do not change during linking: that is why they are
  1357. called absolute.
  1358.  
  1359.    The value of an undefined symbol is treated in a special way.  If it
  1360. is 0 then the symbol is not defined in this assembler source program,
  1361. and `ld' will try to determine its value from other programs it is
  1362. linked with.  You make this kind of symbol simply by mentioning a symbol
  1363. name without defining it.  A non-zero value represents a `.comm' common
  1364. declaration.  The value is how much common storage to reserve, in bytes
  1365. (addresses).  The symbol refers to the first address of the allocated
  1366. storage.
  1367.  
  1368. 
  1369. File: as,  Node: Symbol Type,  Next: a.out Symbols,  Prev: Symbol Value,  Up: Symbol Attributes
  1370.  
  1371. Type
  1372. ----
  1373.  
  1374.    The type attribute of a symbol contains relocation (section)
  1375. information, any flag settings indicating that a symbol is external, and
  1376. (optionally), other information for linkers and debuggers.  The exact
  1377. format depends on the object-code output format in use.
  1378.  
  1379. 
  1380. File: as,  Node: a.out Symbols,  Next: COFF Symbols,  Prev: Symbol Type,  Up: Symbol Attributes
  1381.  
  1382. Symbol Attributes: `a.out'
  1383. --------------------------
  1384.  
  1385. * Menu:
  1386.  
  1387. * Symbol Desc::                 Descriptor
  1388. * Symbol Other::                Other
  1389.  
  1390. 
  1391. File: as,  Node: Symbol Desc,  Next: Symbol Other,  Up: a.out Symbols
  1392.  
  1393. Descriptor
  1394. ..........
  1395.  
  1396.    This is an arbitrary 16-bit value.  You may establish a symbol's
  1397. descriptor value by using a `.desc' statement (*note `.desc': Desc.).
  1398. A descriptor value means nothing to `as'.
  1399.  
  1400. 
  1401. File: as,  Node: Symbol Other,  Prev: Symbol Desc,  Up: a.out Symbols
  1402.  
  1403. Other
  1404. .....
  1405.  
  1406.    This is an arbitrary 8-bit value.  It means nothing to `as'.
  1407.  
  1408. 
  1409. File: as,  Node: COFF Symbols,  Prev: a.out Symbols,  Up: Symbol Attributes
  1410.  
  1411. Symbol Attributes for COFF
  1412. --------------------------
  1413.  
  1414.    The COFF format supports a multitude of auxiliary symbol attributes;
  1415. like the primary symbol attributes, they are set between `.def' and
  1416. `.endef' directives.
  1417.  
  1418. Primary Attributes
  1419. ..................
  1420.  
  1421.    The symbol name is set with `.def'; the value and type,
  1422. respectively, with `.val' and `.type'.
  1423.  
  1424. Auxiliary Attributes
  1425. ....................
  1426.  
  1427.    The `as' directives `.dim', `.line', `.scl', `.size', and `.tag' can
  1428. generate auxiliary symbol table information for COFF.
  1429.  
  1430. 
  1431. File: as,  Node: Expressions,  Next: Pseudo Ops,  Prev: Symbols,  Up: Top
  1432.  
  1433. Expressions
  1434. ***********
  1435.  
  1436.    An "expression" specifies an address or numeric value.  Whitespace
  1437. may precede and/or follow an expression.
  1438.  
  1439. * Menu:
  1440.  
  1441. * Empty Exprs::                 Empty Expressions
  1442. * Integer Exprs::               Integer Expressions
  1443.  
  1444. 
  1445. File: as,  Node: Empty Exprs,  Next: Integer Exprs,  Up: Expressions
  1446.  
  1447. Empty Expressions
  1448. =================
  1449.  
  1450.    An empty expression has no value: it is just whitespace or null.
  1451. Wherever an absolute expression is required, you may omit the
  1452. expression and `as' will assume a value of (absolute) 0.  This is
  1453. compatible with other assemblers.
  1454.  
  1455. 
  1456. File: as,  Node: Integer Exprs,  Prev: Empty Exprs,  Up: Expressions
  1457.  
  1458. Integer Expressions
  1459. ===================
  1460.  
  1461.    An "integer expression" is one or more *arguments* delimited by
  1462. *operators*.
  1463.  
  1464. * Menu:
  1465.  
  1466. * Arguments::                   Arguments
  1467. * Operators::                   Operators
  1468. * Prefix Ops::                  Prefix Operators
  1469. * Infix Ops::                   Infix Operators
  1470.  
  1471. 
  1472. File: as,  Node: Arguments,  Next: Operators,  Up: Integer Exprs
  1473.  
  1474. Arguments
  1475. ---------
  1476.  
  1477.    "Arguments" are symbols, numbers or subexpressions.  In other
  1478. contexts arguments are sometimes called "arithmetic operands".  In this
  1479. manual, to avoid confusing them with the "instruction operands" of the
  1480. machine language, we use the term "argument" to refer to parts of
  1481. expressions only, reserving the word "operand" to refer only to machine
  1482. instruction operands.
  1483.  
  1484.    Symbols are evaluated to yield {SECTION NNN} where SECTION is one of
  1485. text, data, bss, absolute, or undefined.  NNN is a signed, 2's
  1486. complement 32 bit integer.
  1487.  
  1488.    Numbers are usually integers.
  1489.  
  1490.    A number can be a flonum or bignum.  In this case, you are warned
  1491. that only the low order 32 bits are used, and `as' pretends these 32
  1492. bits are an integer.  You may write integer-manipulating instructions
  1493. that act on exotic constants, compatible with other assemblers.
  1494.  
  1495.    Subexpressions are a left parenthesis `(' followed by an integer
  1496. expression, followed by a right parenthesis `)'; or a prefix operator
  1497. followed by an argument.
  1498.  
  1499. 
  1500. File: as,  Node: Operators,  Next: Prefix Ops,  Prev: Arguments,  Up: Integer Exprs
  1501.  
  1502. Operators
  1503. ---------
  1504.  
  1505.    "Operators" are arithmetic functions, like `+' or `%'.  Prefix
  1506. operators are followed by an argument.  Infix operators appear between
  1507. their arguments.  Operators may be preceded and/or followed by
  1508. whitespace.
  1509.  
  1510. 
  1511. File: as,  Node: Prefix Ops,  Next: Infix Ops,  Prev: Operators,  Up: Integer Exprs
  1512.  
  1513. Prefix Operator
  1514. ---------------
  1515.  
  1516.    `as' has the following "prefix operators".  They each take one
  1517. argument, which must be absolute.
  1518.  
  1519. `-'
  1520.      "Negation".  Two's complement negation.
  1521.  
  1522. `~'
  1523.      "Complementation".  Bitwise not.
  1524.  
  1525. 
  1526. File: as,  Node: Infix Ops,  Prev: Prefix Ops,  Up: Integer Exprs
  1527.  
  1528. Infix Operators
  1529. ---------------
  1530.  
  1531.    "Infix operators" take two arguments, one on either side.  Operators
  1532. have precedence, but operations with equal precedence are performed left
  1533. to right.  Apart from `+' or `-', both arguments must be absolute, and
  1534. the result is absolute.
  1535.  
  1536.   1. Highest Precedence
  1537.  
  1538.     `*'
  1539.           "Multiplication".
  1540.  
  1541.     `/'
  1542.           "Division".  Truncation is the same as the C operator `/'
  1543.  
  1544.     `%'
  1545.           "Remainder".
  1546.  
  1547.     `<'
  1548.     `<<'
  1549.           "Shift Left".  Same as the C operator `<<'.
  1550.  
  1551.     `>'
  1552.     `>>'
  1553.           "Shift Right".  Same as the C operator `>>'.
  1554.  
  1555.   2. Intermediate precedence
  1556.  
  1557.     `|'
  1558.           "Bitwise Inclusive Or".
  1559.  
  1560.     `&'
  1561.           "Bitwise And".
  1562.  
  1563.     `^'
  1564.           "Bitwise Exclusive Or".
  1565.  
  1566.     `!'
  1567.           "Bitwise Or Not".
  1568.  
  1569.   3. Lowest Precedence
  1570.  
  1571.     `+'
  1572.           "Addition".  If either argument is absolute, the result has
  1573.           the section of the other argument.  If either argument is
  1574.           pass1 or undefined, the result is pass1.  Otherwise `+' is
  1575.           illegal.
  1576.  
  1577.     `-'
  1578.           "Subtraction".  If the right argument is absolute, the result
  1579.           has the section of the left argument.  If either argument is
  1580.           pass1 the result is pass1.  If either argument is undefined
  1581.           the result is difference section.  If both arguments are in
  1582.           the same section, the result is absolute--provided that
  1583.           section is one of text, data or bss.  Otherwise subtraction
  1584.           is illegal.
  1585.  
  1586.    The sense of the rule for addition is that it's only meaningful to
  1587. add the *offsets* in an address; you can only have a defined section in
  1588. one of the two arguments.
  1589.  
  1590.    Similarly, you can't subtract quantities from two different sections.
  1591.  
  1592. 
  1593. File: as,  Node: Pseudo Ops,  Next: Machine Dependencies,  Prev: Expressions,  Up: Top
  1594.  
  1595. Assembler Directives
  1596. ********************
  1597.  
  1598.    All assembler directives have names that begin with a period (`.').
  1599. The rest of the name is letters, usually in lower case.
  1600.  
  1601.    This chapter discusses directives that are available regardless of
  1602. the target machine configuration for the GNU assembler.  Some machine
  1603. configurations provide additional directives.  *Note Machine
  1604. Dependencies::.
  1605.  
  1606. * Menu:
  1607.  
  1608. * Abort::                       `.abort'
  1609.  
  1610. * ABORT::                       `.ABORT'
  1611.  
  1612. * Align::                       `.align ABS-EXPR , ABS-EXPR'
  1613. * App-File::                    `.app-file STRING'
  1614. * Ascii::                       `.ascii "STRING"'...
  1615. * Asciz::                       `.asciz "STRING"'...
  1616. * Byte::                        `.byte EXPRESSIONS'
  1617. * Comm::                        `.comm SYMBOL , LENGTH '
  1618. * Data::                        `.data SUBSECTION'
  1619.  
  1620. * Def::                         `.def NAME'
  1621.  
  1622. * Desc::                        `.desc SYMBOL, ABS-EXPRESSION'
  1623.  
  1624. * Dim::                         `.dim'
  1625.  
  1626. * Double::                      `.double FLONUMS'
  1627. * Eject::                       `.eject'
  1628. * Else::                        `.else'
  1629.  
  1630. * Endef::                       `.endef'
  1631.  
  1632. * Endif::                       `.endif'
  1633. * Equ::                         `.equ SYMBOL, EXPRESSION'
  1634. * Extern::                      `.extern'
  1635.  
  1636. * File::                        `.file STRING'
  1637.  
  1638. * Fill::                        `.fill REPEAT , SIZE , VALUE'
  1639. * Float::                       `.float FLONUMS'
  1640. * Global::                      `.global SYMBOL', `.globl SYMBOL'
  1641. * hword::                       `.hword EXPRESSIONS'
  1642. * Ident::                       `.ident'
  1643. * If::                          `.if ABSOLUTE EXPRESSION'
  1644. * Include::                     `.include "FILE"'
  1645. * Int::                         `.int EXPRESSIONS'
  1646. * Lcomm::                       `.lcomm SYMBOL , LENGTH'
  1647. * Lflags::                      `.lflags'
  1648.  
  1649. * Line::                        `.line LINE-NUMBER'
  1650.  
  1651. * Ln::                          `.ln LINE-NUMBER'
  1652. * List::                        `.list'
  1653. * Long::                        `.long EXPRESSIONS'
  1654.  
  1655. * Nolist::                      `.nolist'
  1656. * Octa::                        `.octa BIGNUMS'
  1657. * Org::                         `.org NEW-LC , FILL'
  1658. * Psize::                       `.psize LINES, COLUMNS'
  1659. * Quad::                        `.quad BIGNUMS'
  1660. * Sbttl::                       `.sbttl "SUBHEADING"'
  1661.  
  1662. * Scl::                         `.scl CLASS'
  1663.  
  1664. * Section::                     `.section NAME, SUBSECTION'
  1665.  
  1666. * Set::                         `.set SYMBOL, EXPRESSION'
  1667. * Short::                       `.short EXPRESSIONS'
  1668. * Single::                      `.single FLONUMS'
  1669.  
  1670. * Size::                        `.size'
  1671.  
  1672. * Space::                       `.space SIZE , FILL'
  1673.  
  1674. * Stab::                        `.stabd, .stabn, .stabs'
  1675.  
  1676. * Tag::                         `.tag STRUCTNAME'
  1677.  
  1678. * Text::                        `.text SUBSECTION'
  1679. * Title::                       `.title "HEADING"'
  1680.  
  1681. * Type::                        `.type INT'
  1682. * Val::                         `.val ADDR'
  1683.  
  1684. * Word::                        `.word EXPRESSIONS'
  1685. * Deprecated::                  Deprecated Directives
  1686.  
  1687. 
  1688. File: as,  Node: Abort,  Next: ABORT,  Up: Pseudo Ops
  1689.  
  1690. `.abort'
  1691. ========
  1692.  
  1693.    This directive stops the assembly immediately.  It is for
  1694. compatibility with other assemblers.  The original idea was that the
  1695. assembly language source would be piped into the assembler.  If the
  1696. sender of the source quit, it could use this directive tells `as' to
  1697. quit also.  One day `.abort' will not be supported.
  1698.  
  1699. 
  1700. File: as,  Node: ABORT,  Next: Align,  Prev: Abort,  Up: Pseudo Ops
  1701.  
  1702. `.ABORT'
  1703. ========
  1704.  
  1705.    When producing COFF output, `as' accepts this directive as a synonym
  1706. for `.abort'.
  1707.  
  1708.    When producing `b.out' output, `as' accepts this directive, but
  1709. ignores it.
  1710.  
  1711. 
  1712. File: as,  Node: Align,  Next: App-File,  Prev: ABORT,  Up: Pseudo Ops
  1713.  
  1714. `.align ABS-EXPR , ABS-EXPR'
  1715. ============================
  1716.  
  1717.    Pad the location counter (in the current subsection) to a particular
  1718. storage boundary.  The first expression (which must be absolute) is the
  1719. number of low-order zero bits the location counter will have after
  1720. advancement.  For example `.align 3' will advance the location counter
  1721. until it a multiple of 8.  If the location counter is already a
  1722. multiple of 8, no change is needed.
  1723.  
  1724.    The second expression (also absolute) gives the value to be stored in
  1725. the padding bytes.  It (and the comma) may be omitted.  If it is
  1726. omitted, the padding bytes are zero.
  1727.  
  1728. 
  1729. File: as,  Node: App-File,  Next: Ascii,  Prev: Align,  Up: Pseudo Ops
  1730.  
  1731. `.app-file STRING'
  1732. ==================
  1733.  
  1734.    `.app-file' (which may also be spelled `.file') tells `as' that we
  1735. are about to start a new logical file.  STRING is the new file name.
  1736. In general, the filename is recognized whether or not it is surrounded
  1737. by quotes `"'; but if you wish to specify an empty file name is
  1738. permitted, you must give the quotes-`""'.  This statement may go away in
  1739. future: it is only recognized to be compatible with old `as' programs.
  1740.  
  1741. 
  1742. File: as,  Node: Ascii,  Next: Asciz,  Prev: App-File,  Up: Pseudo Ops
  1743.  
  1744. `.ascii "STRING"'...
  1745. ====================
  1746.  
  1747.    `.ascii' expects zero or more string literals (*note Strings::.)
  1748. separated by commas.  It assembles each string (with no automatic
  1749. trailing zero byte) into consecutive addresses.
  1750.  
  1751. 
  1752. File: as,  Node: Asciz,  Next: Byte,  Prev: Ascii,  Up: Pseudo Ops
  1753.  
  1754. `.asciz "STRING"'...
  1755. ====================
  1756.  
  1757.    `.asciz' is just like `.ascii', but each string is followed by a
  1758. zero byte.  The "z" in `.asciz' stands for "zero".
  1759.  
  1760. 
  1761. File: as,  Node: Byte,  Next: Comm,  Prev: Asciz,  Up: Pseudo Ops
  1762.  
  1763. `.byte EXPRESSIONS'
  1764. ===================
  1765.  
  1766.    `.byte' expects zero or more expressions, separated by commas.  Each
  1767. expression is assembled into the next byte.
  1768.  
  1769. 
  1770. File: as,  Node: Comm,  Next: Data,  Prev: Byte,  Up: Pseudo Ops
  1771.  
  1772. `.comm SYMBOL , LENGTH '
  1773. ========================
  1774.  
  1775.    `.comm' declares a named common area in the bss section.  Normally
  1776. `ld' reserves memory addresses for it during linking, so no partial
  1777. program defines the location of the symbol.  Use `.comm' to tell `ld'
  1778. that it must be at least LENGTH bytes long.  `ld' will allocate space
  1779. for each `.comm' symbol that is at least as long as the longest `.comm'
  1780. request in any of the partial programs linked.  LENGTH is an absolute
  1781. expression.
  1782.  
  1783. 
  1784. File: as,  Node: Data,  Next: Def,  Prev: Comm,  Up: Pseudo Ops
  1785.  
  1786. `.data SUBSECTION'
  1787. ==================
  1788.  
  1789.    `.data' tells `as' to assemble the following statements onto the end
  1790. of the data subsection numbered SUBSECTION (which is an absolute
  1791. expression).  If SUBSECTION is omitted, it defaults to zero.
  1792.  
  1793. 
  1794. File: as,  Node: Def,  Next: Desc,  Prev: Data,  Up: Pseudo Ops
  1795.  
  1796. `.def NAME'
  1797. ===========
  1798.  
  1799.    Begin defining debugging information for a symbol NAME; the
  1800. definition extends until the `.endef' directive is encountered.
  1801.  
  1802.    This directive is only observed when `as' is configured for COFF
  1803. format output; when producing `b.out', `.def' is recognized, but
  1804. ignored.
  1805.  
  1806. 
  1807. File: as,  Node: Desc,  Next: Dim,  Prev: Def,  Up: Pseudo Ops
  1808.  
  1809. `.desc SYMBOL, ABS-EXPRESSION'
  1810. ==============================
  1811.  
  1812.    This directive sets the descriptor of the symbol (*note Symbol
  1813. Attributes::.) to the low 16 bits of an absolute expression.
  1814.  
  1815.    The `.desc' directive is not available when `as' is configured for
  1816. COFF output; it is only for `a.out' or `b.out' object format.  For the
  1817. sake of compatibility, `as' will accept it, but produce no output, when
  1818. configured for COFF.
  1819.  
  1820. 
  1821. File: as,  Node: Dim,  Next: Double,  Prev: Desc,  Up: Pseudo Ops
  1822.  
  1823. `.dim'
  1824. ======
  1825.  
  1826.    This directive is generated by compilers to include auxiliary
  1827. debugging information in the symbol table.  It is only permitted inside
  1828. `.def'/`.endef' pairs.
  1829.  
  1830.    `.dim' is only meaningful when generating COFF format output; when
  1831. `as' is generating `b.out', it accepts this directive but ignores it.
  1832.  
  1833. 
  1834. File: as,  Node: Double,  Next: Eject,  Prev: Dim,  Up: Pseudo Ops
  1835.  
  1836. `.double FLONUMS'
  1837. =================
  1838.  
  1839.    `.double' expects zero or more flonums, separated by commas.  It
  1840. assembles floating point numbers.  The exact kind of floating point
  1841. numbers emitted depends on how `as' is configured.  *Note Machine
  1842. Dependencies::.
  1843.  
  1844. 
  1845. File: as,  Node: Eject,  Next: Else,  Prev: Double,  Up: Pseudo Ops
  1846.  
  1847. `.eject'
  1848. ========
  1849.  
  1850.    Force a page break at this point, when generating assembly listings.
  1851.  
  1852. 
  1853. File: as,  Node: Else,  Next: Endef,  Prev: Eject,  Up: Pseudo Ops
  1854.  
  1855. `.else'
  1856. =======
  1857.  
  1858.    `.else' is part of the `as' support for conditional assembly; *note
  1859. `.if': If..  It marks the beginning of a section of code to be
  1860. assembled if the condition for the preceding `.if' was false.
  1861.  
  1862. 
  1863. File: as,  Node: Endef,  Next: Endif,  Prev: Else,  Up: Pseudo Ops
  1864.  
  1865. `.endef'
  1866. ========
  1867.  
  1868.    This directive flags the end of a symbol definition begun with
  1869. `.def'.
  1870.  
  1871.    `.endef' is only meaningful when generating COFF format output; if
  1872. `as' is configured to generate `b.out', it accepts this directive but
  1873. ignores it.
  1874.  
  1875. 
  1876. File: as,  Node: Endif,  Next: Equ,  Prev: Endef,  Up: Pseudo Ops
  1877.  
  1878. `.endif'
  1879. ========
  1880.  
  1881.    `.endif' is part of the `as' support for conditional assembly; it
  1882. marks the end of a block of code that is only assembled conditionally.
  1883. *Note `.if': If.
  1884.  
  1885. 
  1886. File: as,  Node: Equ,  Next: Extern,  Prev: Endif,  Up: Pseudo Ops
  1887.  
  1888. `.equ SYMBOL, EXPRESSION'
  1889. =========================
  1890.  
  1891.    This directive sets the value of SYMBOL to EXPRESSION.  It is
  1892. synonymous with `.set'; *note `.set': Set..
  1893.  
  1894. 
  1895. File: as,  Node: Extern,  Next: File,  Prev: Equ,  Up: Pseudo Ops
  1896.  
  1897. `.extern'
  1898. =========
  1899.  
  1900.    `.extern' is accepted in the source program--for compatibility with
  1901. other assemblers--but it is ignored.  `as' treats all undefined symbols
  1902. as external.
  1903.  
  1904. 
  1905. File: as,  Node: File,  Next: Fill,  Prev: Extern,  Up: Pseudo Ops
  1906.  
  1907. `.file STRING'
  1908. ==============
  1909.  
  1910.    `.file' (which may also be spelled `.app-file') tells `as' that we
  1911. are about to start a new logical file.  STRING is the new file name.
  1912. In general, the filename is recognized whether or not it is surrounded
  1913. by quotes `"'; but if you wish to specify an empty file name, you must
  1914. give the quotes-`""'.  This statement may go away in future: it is only
  1915. recognized to be compatible with old `as' programs.  In some
  1916. configurations of `as', `.file' has already been removed to avoid
  1917. conflicts with other assemblers.  *Note Machine Dependencies::.
  1918.  
  1919. 
  1920. File: as,  Node: Fill,  Next: Float,  Prev: File,  Up: Pseudo Ops
  1921.  
  1922. `.fill REPEAT , SIZE , VALUE'
  1923. =============================
  1924.  
  1925.    RESULT, SIZE and VALUE are absolute expressions.  This emits REPEAT
  1926. copies of SIZE bytes.  REPEAT may be zero or more.  SIZE may be zero or
  1927. more, but if it is more than 8, then it is deemed to have the value 8,
  1928. compatible with other people's assemblers.  The contents of each REPEAT
  1929. bytes is taken from an 8-byte number.  The highest order 4 bytes are
  1930. zero.  The lowest order 4 bytes are VALUE rendered in the byte-order of
  1931. an integer on the computer `as' is assembling for.  Each SIZE bytes in
  1932. a repetition is taken from the lowest order SIZE bytes of this number.
  1933. Again, this bizarre behavior is compatible with other people's
  1934. assemblers.
  1935.  
  1936.    SIZE and VALUE are optional.  If the second comma and VALUE are
  1937. absent, VALUE is assumed zero.  If the first comma and following tokens
  1938. are absent, SIZE is assumed to be 1.
  1939.  
  1940. 
  1941. File: as,  Node: Float,  Next: Global,  Prev: Fill,  Up: Pseudo Ops
  1942.  
  1943. `.float FLONUMS'
  1944. ================
  1945.  
  1946.    This directive assembles zero or more flonums, separated by commas.
  1947. It has the same effect as `.single'.  The exact kind of floating point
  1948. numbers emitted depends on how `as' is configured.  *Note Machine
  1949. Dependencies::.
  1950.  
  1951. 
  1952. File: as,  Node: Global,  Next: hword,  Prev: Float,  Up: Pseudo Ops
  1953.  
  1954. `.global SYMBOL', `.globl SYMBOL'
  1955. =================================
  1956.  
  1957.    `.global' makes the symbol visible to `ld'.  If you define SYMBOL in
  1958. your partial program, its value is made available to other partial
  1959. programs that are linked with it.  Otherwise, SYMBOL will take its
  1960. attributes from a symbol of the same name from another partial program
  1961. it is linked with.
  1962.  
  1963.    Both spellings (`.globl' and `.global') are accepted, for
  1964. compatibility with other assemblers.
  1965.  
  1966. 
  1967. File: as,  Node: hword,  Next: Ident,  Prev: Global,  Up: Pseudo Ops
  1968.  
  1969. `.hword EXPRESSIONS'
  1970. ====================
  1971.  
  1972.    This expects zero or more EXPRESSIONS, and emits a 16 bit number for
  1973. each.
  1974.  
  1975.    This directive is a synonym for `.short'; depending on the target
  1976. architecture, it may also be a synonym for `.word'.
  1977.  
  1978. 
  1979. File: as,  Node: Ident,  Next: If,  Prev: hword,  Up: Pseudo Ops
  1980.  
  1981. `.ident'
  1982. ========
  1983.  
  1984.    This directive is used by some assemblers to place tags in object
  1985. files.  `as' simply accepts the directive for source-file compatibility
  1986. with such assemblers, but does not actually emit anything for it.
  1987.  
  1988. 
  1989. File: as,  Node: If,  Next: Include,  Prev: Ident,  Up: Pseudo Ops
  1990.  
  1991. `.if ABSOLUTE EXPRESSION'
  1992. =========================
  1993.  
  1994.    `.if' marks the beginning of a section of code which is only
  1995. considered part of the source program being assembled if the argument
  1996. (which must be an ABSOLUTE EXPRESSION) is non-zero.  The end of the
  1997. conditional section of code must be marked by `.endif' (*note `.endif':
  1998. Endif.); optionally, you may include code for the alternative
  1999. condition, flagged by `.else' (*note `.else': Else..
  2000.  
  2001.    The following variants of `.if' are also supported:
  2002. `.ifdef SYMBOL'
  2003.      Assembles the following section of code if the specified SYMBOL
  2004.      has been defined.
  2005.  
  2006. `.ifndef SYMBOL'
  2007. `ifnotdef SYMBOL'
  2008.      Assembles the following section of code if the specified SYMBOL
  2009.      has not been defined.  Both spelling variants are equivalent.
  2010.  
  2011. 
  2012. File: as,  Node: Include,  Next: Int,  Prev: If,  Up: Pseudo Ops
  2013.  
  2014. `.include "FILE"'
  2015. =================
  2016.  
  2017.    This directive provides a way to include supporting files at
  2018. specified points in your source program.  The code from FILE is
  2019. assembled as if it followed the point of the `.include'; when the end
  2020. of the included file is reached, assembly of the original file
  2021. continues.  You can control the search paths used with the `-I'
  2022. command-line option (*note Command-Line Options: Invoking.).  Quotation
  2023. marks are required around FILE.
  2024.  
  2025. 
  2026. File: as,  Node: Int,  Next: Lcomm,  Prev: Include,  Up: Pseudo Ops
  2027.  
  2028. `.int EXPRESSIONS'
  2029. ==================
  2030.  
  2031.    Expect zero or more EXPRESSIONS, of any section, separated by
  2032. commas.  For each expression, emit a 32-bit number that will, at run
  2033. time, be the value of that expression.  The byte order of the
  2034. expression depends on what kind of computer will run the program.
  2035.  
  2036. 
  2037. File: as,  Node: Lcomm,  Next: Lflags,  Prev: Int,  Up: Pseudo Ops
  2038.  
  2039. `.lcomm SYMBOL , LENGTH'
  2040. ========================
  2041.  
  2042.    Reserve LENGTH (an absolute expression) bytes for a local common
  2043. denoted by SYMBOL.  The section and value of SYMBOL are those of the
  2044. new local common.  The addresses are allocated in the bss section, so
  2045. at run-time the bytes will start off zeroed.  SYMBOL is not declared
  2046. global (*note `.global': Global.), so is normally not visible to `ld'.
  2047.  
  2048. 
  2049. File: as,  Node: Lflags,  Next: Line,  Prev: Lcomm,  Up: Pseudo Ops
  2050.  
  2051. `.lflags'
  2052. =========
  2053.  
  2054.    `as' accepts this directive, for compatibility with other
  2055. assemblers, but ignores it.
  2056.  
  2057. 
  2058. File: as,  Node: Line,  Next: Ln,  Prev: Lflags,  Up: Pseudo Ops
  2059.  
  2060. `.line LINE-NUMBER'
  2061. ===================
  2062.  
  2063.    Tell `as' to change the logical line number.  LINE-NUMBER must be an
  2064. absolute expression.  The next line will have that logical line number.
  2065. So any other statements on the current line (after a statement
  2066. separator character) will be reported as on logical line number
  2067. LINE-NUMBER - 1.  One day this directive will be unsupported: it is
  2068. used only for compatibility with existing assembler programs.
  2069.  
  2070.    *Warning:* In the AMD29K configuration of as, this command is only
  2071. available with the name `.ln', rather than as either `.line' or `.ln'.
  2072.  
  2073.    Even though this is a directive associated with the `a.out' or
  2074. `b.out' object-code formats, `as' will still recognize it when
  2075. producing COFF output, and will treat `.line' as though it were the
  2076. COFF `.ln' *if* it is found outside a `.def'/`.endef' pair.
  2077.  
  2078.    Inside a `.def', `.line' is, instead, one of the directives used by
  2079. compilers to generate auxiliary symbol information for debugging.
  2080.  
  2081. 
  2082. File: as,  Node: Ln,  Next: List,  Prev: Line,  Up: Pseudo Ops
  2083.  
  2084. `.ln LINE-NUMBER'
  2085. =================
  2086.  
  2087.    `.ln' is a synonym for `.line'.
  2088.  
  2089. 
  2090. File: as,  Node: List,  Next: Long,  Prev: Ln,  Up: Pseudo Ops
  2091.  
  2092. `.list'
  2093. =======
  2094.  
  2095.    Control (in conjunction with the `.nolist' directive) whether or not
  2096. assembly listings are generated.  These two directives maintain an
  2097. internal counter (which is zero initially).   `.list' increments the
  2098. counter, and `.nolist' decrements it.  Assembly listings are generated
  2099. whenever the counter is greater than zero.
  2100.  
  2101.    By default, listings are disabled.  When you enable them (with the
  2102. `-a' command line option; *note Command-Line Options: Invoking.), the
  2103. initial value of the listing counter is one.
  2104.  
  2105. 
  2106. File: as,  Node: Long,  Next: Nolist,  Prev: List,  Up: Pseudo Ops
  2107.  
  2108. `.long EXPRESSIONS'
  2109. ===================
  2110.  
  2111.    `.long' is the same as `.int', *note `.int': Int..
  2112.  
  2113. 
  2114. File: as,  Node: Nolist,  Next: Octa,  Prev: Long,  Up: Pseudo Ops
  2115.  
  2116. `.nolist'
  2117. =========
  2118.  
  2119.    Control (in conjunction with the `.list' directive) whether or not
  2120. assembly listings are generated.  These two directives maintain an
  2121. internal counter (which is zero initially).   `.list' increments the
  2122. counter, and `.nolist' decrements it.  Assembly listings are generated
  2123. whenever the counter is greater than zero.
  2124.  
  2125. 
  2126. File: as,  Node: Octa,  Next: Org,  Prev: Nolist,  Up: Pseudo Ops
  2127.  
  2128. `.octa BIGNUMS'
  2129. ===============
  2130.  
  2131.    This directive expects zero or more bignums, separated by commas.
  2132. For each bignum, it emits a 16-byte integer.
  2133.  
  2134.    The term "octa" comes from contexts in which a "word" is two bytes;
  2135. hence *octa*-word for 16 bytes.
  2136.  
  2137. 
  2138. File: as,  Node: Org,  Next: Psize,  Prev: Octa,  Up: Pseudo Ops
  2139.  
  2140. `.org NEW-LC , FILL'
  2141. ====================
  2142.  
  2143.    `.org' will advance the location counter of the current section to
  2144. NEW-LC.  NEW-LC is either an absolute expression or an expression with
  2145. the same section as the current subsection.  That is, you can't use
  2146. `.org' to cross sections: if NEW-LC has the wrong section, the `.org'
  2147. directive is ignored.  To be compatible with former assemblers, if the
  2148. section of NEW-LC is absolute, `as' will issue a warning, then pretend
  2149. the section of NEW-LC is the same as the current subsection.
  2150.  
  2151.    `.org' may only increase the location counter, or leave it
  2152. unchanged; you cannot use `.org' to move the location counter backwards.
  2153.  
  2154.    Because `as' tries to assemble programs in one pass NEW-LC may not
  2155. be undefined.  If you really detest this restriction we eagerly await a
  2156. chance to share your improved assembler.
  2157.  
  2158.    Beware that the origin is relative to the start of the section, not
  2159. to the start of the subsection.  This is compatible with other people's
  2160. assemblers.
  2161.  
  2162.    When the location counter (of the current subsection) is advanced,
  2163. the intervening bytes are filled with FILL which should be an absolute
  2164. expression.  If the comma and FILL are omitted, FILL defaults to zero.
  2165.  
  2166. 
  2167. File: as,  Node: Psize,  Next: Quad,  Prev: Org,  Up: Pseudo Ops
  2168.  
  2169. `.psize LINES , COLUMNS'
  2170. ========================
  2171.  
  2172.    Use this directive to declare the number of lines--and, optionally,
  2173. the number of columns--to use for each page, when generating listings.
  2174.  
  2175.    If you don't use `.psize', listings will use a default line-count of
  2176. 60.  You may omit the comma and COLUMNS specification; the default
  2177. width is 200 columns.
  2178.  
  2179.    `as' will generate formfeeds whenever the specified number of lines
  2180. is exceeded (or whenever you explicitly request one, using `.eject').
  2181.  
  2182.    If you specify LINES as `0', no formfeeds are generated save those
  2183. explicitly specified with `.eject'.
  2184.  
  2185. 
  2186. File: as,  Node: Quad,  Next: Sbttl,  Prev: Psize,  Up: Pseudo Ops
  2187.  
  2188. `.quad BIGNUMS'
  2189. ===============
  2190.  
  2191.    `.quad' expects zero or more bignums, separated by commas.  For each
  2192. bignum, it emits an 8-byte integer.  If the bignum won't fit in 8
  2193. bytes, it prints a warning message; and just takes the lowest order 8
  2194. bytes of the bignum.
  2195.  
  2196.    The term "quad" comes from contexts in which a "word" is two bytes;
  2197. hence *quad*-word for 8 bytes.
  2198.  
  2199. 
  2200. File: as,  Node: Sbttl,  Next: Scl,  Prev: Quad,  Up: Pseudo Ops
  2201.  
  2202. `.sbttl "SUBHEADING"'
  2203. =====================
  2204.  
  2205.    Use SUBHEADING as the title (third line, immediately after the title
  2206. line) when generating assembly listings.
  2207.  
  2208.    This directive affects subsequent pages, as well as the current page
  2209. if it appears within ten lines of the top of a page.
  2210.  
  2211. 
  2212. File: as,  Node: Scl,  Next: Section,  Prev: Sbttl,  Up: Pseudo Ops
  2213.  
  2214. `.scl CLASS'
  2215. ============
  2216.  
  2217.    Set the storage-class value for a symbol.  This directive may only be
  2218. used inside a `.def'/`.endef' pair.  Storage class may flag whether a
  2219. symbol is static or external, or it may record further symbolic
  2220. debugging information.
  2221.  
  2222.    The `.scl' directive is primarily associated with COFF output; when
  2223. configured to generate `b.out' output format, `as' will accept this
  2224. directive but ignore it.
  2225.  
  2226. 
  2227. File: as,  Node: Section,  Next: Set,  Prev: Scl,  Up: Pseudo Ops
  2228.  
  2229. `.section NAME, SUBSECTION'
  2230. ===========================
  2231.  
  2232.    Assemble the following code into end of subsection numbered
  2233. SUBSECTION in the COFF named section NAME.  If you omit SUBSECTION,
  2234. `as' uses subsection number zero.  `.section .text' is equivalent to
  2235. the `.text' directive; `.section .data' is equivalent to the `.data'
  2236. directive.
  2237.  
  2238. 
  2239. File: as,  Node: Set,  Next: Short,  Prev: Section,  Up: Pseudo Ops
  2240.  
  2241. `.set SYMBOL, EXPRESSION'
  2242. =========================
  2243.  
  2244.    This directive sets the value of SYMBOL to EXPRESSION.  This will
  2245. change SYMBOL's value and type to conform to EXPRESSION.  If SYMBOL was
  2246. flagged as external, it remains flagged. (*Note Symbol Attributes::.)
  2247.  
  2248.    You may `.set' a symbol many times in the same assembly.  If the
  2249. expression's section is unknowable during pass 1, a second pass over
  2250. the source program will be forced.  The second pass is currently not
  2251. implemented.  `as' will abort with an error message if one is required.
  2252.  
  2253.    If you `.set' a global symbol, the value stored in the object file
  2254. is the last value stored into it.
  2255.  
  2256. 
  2257. File: as,  Node: Short,  Next: Single,  Prev: Set,  Up: Pseudo Ops
  2258.  
  2259. `.short EXPRESSIONS'
  2260. ====================
  2261.  
  2262.    `.short' is normally the same as `.word'.  *Note `.word': Word.
  2263.  
  2264.    In some configurations, however, `.short' and `.word' generate
  2265. numbers of different lengths; *note Machine Dependencies::..
  2266.  
  2267. 
  2268. File: as,  Node: Single,  Next: Size,  Prev: Short,  Up: Pseudo Ops
  2269.  
  2270. `.single FLONUMS'
  2271. =================
  2272.  
  2273.    This directive assembles zero or more flonums, separated by commas.
  2274. It has the same effect as `.float'.  The exact kind of floating point
  2275. numbers emitted depends on how `as' is configured.  *Note Machine
  2276. Dependencies::.
  2277.  
  2278. 
  2279. File: as,  Node: Size,  Next: Space,  Prev: Single,  Up: Pseudo Ops
  2280.  
  2281. `.size'
  2282. =======
  2283.  
  2284.    This directive is generated by compilers to include auxiliary
  2285. debugging information in the symbol table.  It is only permitted inside
  2286. `.def'/`.endef' pairs.
  2287.  
  2288.    `.size' is only meaningful when generating COFF format output; when
  2289. `as' is generating `b.out', it accepts this directive but ignores it.
  2290.  
  2291. 
  2292. File: as,  Node: Space,  Next: Stab,  Prev: Size,  Up: Pseudo Ops
  2293.  
  2294. `.space SIZE , FILL'
  2295. ====================
  2296.  
  2297.    This directive emits SIZE bytes, each of value FILL.  Both SIZE and
  2298. FILL are absolute expressions.  If the comma and FILL are omitted, FILL
  2299. is assumed to be zero.
  2300.  
  2301.    On the AMD 29K, this directive is ignored; it is accepted for
  2302. compatibility with other AMD 29K assemblers.
  2303.  
  2304.      *Warning:* In most versions of the GNU assembler, the directive
  2305.      `.space' has the effect of `.block'  *Note Machine Dependencies::.
  2306.  
  2307. 
  2308. File: as,  Node: Stab,  Next: Tag,  Prev: Space,  Up: Pseudo Ops
  2309.  
  2310. `.stabd, .stabn, .stabs'
  2311. ========================
  2312.  
  2313.    There are three directives that begin `.stab'.  All emit symbols
  2314. (*note Symbols::.), for use by symbolic debuggers.  The symbols are not
  2315. entered in the `as' hash table: they cannot be referenced elsewhere in
  2316. the source file.  Up to five fields are required:
  2317.  
  2318. STRING
  2319.      This is the symbol's name.  It may contain any character except
  2320.      `\000', so is more general than ordinary symbol names.  Some
  2321.      debuggers used to code arbitrarily complex structures into symbol
  2322.      names using this field.
  2323.  
  2324. TYPE
  2325.      An absolute expression.  The symbol's type is set to the low 8
  2326.      bits of this expression.  Any bit pattern is permitted, but `ld'
  2327.      and debuggers will choke on silly bit patterns.
  2328.  
  2329. OTHER
  2330.      An absolute expression.  The symbol's "other" attribute is set to
  2331.      the low 8 bits of this expression.
  2332.  
  2333. DESC
  2334.      An absolute expression.  The symbol's descriptor is set to the low
  2335.      16 bits of this expression.
  2336.  
  2337. VALUE
  2338.      An absolute expression which becomes the symbol's value.
  2339.  
  2340.    If a warning is detected while reading a `.stabd', `.stabn', or
  2341. `.stabs' statement, the symbol has probably already been created and
  2342. you will get a half-formed symbol in your object file.  This is
  2343. compatible with earlier assemblers!
  2344.  
  2345. `.stabd TYPE , OTHER , DESC'
  2346.      The "name" of the symbol generated is not even an empty string.
  2347.      It is a null pointer, for compatibility.  Older assemblers used a
  2348.      null pointer so they didn't waste space in object files with empty
  2349.      strings.
  2350.  
  2351.      The symbol's value is set to the location counter, relocatably.
  2352.      When your program is linked, the value of this symbol will be
  2353.      where the location counter was when the `.stabd' was assembled.
  2354.  
  2355. `.stabn TYPE , OTHER , DESC , VALUE'
  2356.      The name of the symbol is set to the empty string `""'.
  2357.  
  2358. `.stabs STRING ,  TYPE , OTHER , DESC , VALUE'
  2359.      All five fields are specified.
  2360.  
  2361. 
  2362. File: as,  Node: Tag,  Next: Text,  Prev: Stab,  Up: Pseudo Ops
  2363.  
  2364. `.tag STRUCTNAME'
  2365. =================
  2366.  
  2367.    This directive is generated by compilers to include auxiliary
  2368. debugging information in the symbol table.  It is only permitted inside
  2369. `.def'/`.endef' pairs.  Tags are used to link structure definitions in
  2370. the symbol table with instances of those structures.
  2371.  
  2372.    `.tag' is only used when generating COFF format output; when `as' is
  2373. generating `b.out', it accepts this directive but ignores it.
  2374.  
  2375. 
  2376. File: as,  Node: Text,  Next: Title,  Prev: Tag,  Up: Pseudo Ops
  2377.  
  2378. `.text SUBSECTION'
  2379. ==================
  2380.  
  2381.    Tells `as' to assemble the following statements onto the end of the
  2382. text subsection numbered SUBSECTION, which is an absolute expression.
  2383. If SUBSECTION is omitted, subsection number zero is used.
  2384.  
  2385. 
  2386. File: as,  Node: Title,  Next: Type,  Prev: Text,  Up: Pseudo Ops
  2387.  
  2388. `.title "HEADING"'
  2389. ==================
  2390.  
  2391.    Use HEADING as the title (second line, immediately after the source
  2392. file name and pagenumber) when generating assembly listings.
  2393.  
  2394.    This directive affects subsequent pages, as well as the current page
  2395. if it appears within ten lines of the top of a page.
  2396.  
  2397. 
  2398. File: as,  Node: Type,  Next: Val,  Prev: Title,  Up: Pseudo Ops
  2399.  
  2400. `.type INT'
  2401. ===========
  2402.  
  2403.    This directive, permitted only within `.def'/`.endef' pairs, records
  2404. the integer INT as the type attribute of a symbol table entry.
  2405.  
  2406.    `.type' is associated only with COFF format output; when `as' is
  2407. configured for `b.out' output, it accepts this directive but ignores it.
  2408.  
  2409. 
  2410. File: as,  Node: Val,  Next: Word,  Prev: Type,  Up: Pseudo Ops
  2411.  
  2412. `.val ADDR'
  2413. ===========
  2414.  
  2415.    This directive, permitted only within `.def'/`.endef' pairs, records
  2416. the address ADDR as the value attribute of a symbol table entry.
  2417.  
  2418.    `.val' is used only for COFF output; when `as' is configured for
  2419. `b.out', it accepts this directive but ignores it.
  2420.  
  2421. 
  2422. File: as,  Node: Word,  Next: Deprecated,  Prev: Val,  Up: Pseudo Ops
  2423.  
  2424. `.word EXPRESSIONS'
  2425. ===================
  2426.  
  2427.    This directive expects zero or more EXPRESSIONS, of any section,
  2428. separated by commas.
  2429.  
  2430.    The size of the number emitted, and its byte order, depends on what
  2431. kind of computer will run the program.
  2432.  
  2433.      *Warning: Special Treatment to support Compilers*
  2434.  
  2435.    Machines with a 32-bit address space, but that do less than 32-bit
  2436. addressing, require the following special treatment.  If the machine of
  2437. interest to you does 32-bit addressing (or doesn't require it; *note
  2438. Machine Dependencies::.), you can ignore this issue.
  2439.  
  2440.    In order to assemble compiler output into something that will work,
  2441. `as' will occasionlly do strange things to `.word' directives.
  2442. Directives of the form `.word sym1-sym2' are often emitted by compilers
  2443. as part of jump tables.  Therefore, when `as' assembles a directive of
  2444. the form `.word sym1-sym2', and the difference between `sym1' and
  2445. `sym2' does not fit in 16 bits, `as' will create a "secondary jump
  2446. table", immediately before the next label.  This secondary jump table
  2447. will be preceded by a short-jump to the first byte after the secondary
  2448. table.  This short-jump prevents the flow of control from accidentally
  2449. falling into the new table.  Inside the table will be a long-jump to
  2450. `sym2'.  The original `.word' will contain `sym1' minus the address of
  2451. the long-jump to `sym2'.
  2452.  
  2453.    If there were several occurrences of `.word sym1-sym2' before the
  2454. secondary jump table, all of them will be adjusted.  If there was a
  2455. `.word sym3-sym4', that also did not fit in sixteen bits, a long-jump
  2456. to `sym4' will be included in the secondary jump table, and the `.word'
  2457. directives will be adjusted to contain `sym3' minus the address of the
  2458. long-jump to `sym4'; and so on, for as many entries in the original
  2459. jump table as necessary.
  2460.  
  2461. 
  2462. File: as,  Node: Deprecated,  Prev: Word,  Up: Pseudo Ops
  2463.  
  2464. Deprecated Directives
  2465. =====================
  2466.  
  2467.    One day these directives won't work.  They are included for
  2468. compatibility with older assemblers.
  2469. .abort
  2470. .app-file
  2471. .line
  2472. 
  2473. File: as,  Node: Machine Dependencies,  Next: Copying,  Prev: Pseudo Ops,  Up: Top
  2474.  
  2475. Machine Dependent Features
  2476. **************************
  2477.  
  2478.    The machine instruction sets are (almost by definition) different on
  2479. each machine where `as' runs.  Floating point representations vary as
  2480. well, and `as' often supports a few additional directives or
  2481. command-line options for compatibility with other assemblers on a
  2482. particular platform.  Finally, some versions of `as' support special
  2483. pseudo-instructions for branch optimization.
  2484.  
  2485.    This chapter discusses most of these differences, though it does not
  2486. include details on any machine's instruction set.  For details on that
  2487. subject, see the hardware manufacturer's manual.
  2488.  
  2489. * Menu:
  2490.  
  2491.  
  2492. * Vax-Dependent::               VAX Dependent Features
  2493.  
  2494. * AMD29K-Dependent::            AMD 29K Dependent Features
  2495.  
  2496. * H8/300-Dependent::            Hitachi H8/300 Dependent Features
  2497.  
  2498. * H8/500-Dependent::            Hitachi H8/500 Dependent Features
  2499.  
  2500. * SH-Dependent::                Hitachi SH Dependent Features
  2501.  
  2502. * i960-Dependent::              Intel 80960 Dependent Features
  2503.  
  2504. * M68K-Dependent::              M680x0 Dependent Features
  2505.  
  2506. * Sparc-Dependent::             SPARC Dependent Features
  2507.  
  2508. * Z8000-Dependent::             Z8000 Dependent Features
  2509.  
  2510. * i386-Dependent::              80386 Dependent Features
  2511.  
  2512. 
  2513. File: as,  Node: Vax-Dependent,  Next: AMD29K-Dependent,  Up: Machine Dependencies
  2514.  
  2515. VAX Dependent Features
  2516. ======================
  2517.  
  2518. * Menu:
  2519.  
  2520. * Vax-Opts::                    VAX Command-Line Options
  2521. * VAX-float::                   VAX Floating Point
  2522. * VAX-directives::              Vax Machine Directives
  2523. * VAX-opcodes::                 VAX Opcodes
  2524. * VAX-branch::                  VAX Branch Improvement
  2525. * VAX-operands::                VAX Operands
  2526. * VAX-no::                      Not Supported on VAX
  2527.  
  2528. 
  2529. File: as,  Node: Vax-Opts,  Next: VAX-float,  Up: Vax-Dependent
  2530.  
  2531. VAX Command-Line Options
  2532. ------------------------
  2533.  
  2534.    The Vax version of `as' accepts any of the following options, gives
  2535. a warning message that the option was ignored and proceeds.  These
  2536. options are for compatibility with scripts designed for other people's
  2537. assemblers.
  2538.  
  2539. `-D' (Debug)
  2540. `-S' (Symbol Table)
  2541. `-T' (Token Trace)
  2542.      These are obsolete options used to debug old assemblers.
  2543.  
  2544. `-d' (Displacement size for JUMPs)
  2545.      This option expects a number following the `-d'.  Like options
  2546.      that expect filenames, the number may immediately follow the `-d'
  2547.      (old standard) or constitute the whole of the command line
  2548.      argument that follows `-d' (GNU standard).
  2549.  
  2550. `-V' (Virtualize Interpass Temporary File)
  2551.      Some other assemblers use a temporary file.  This option commanded
  2552.      them to keep the information in active memory rather than in a
  2553.      disk file.  `as' always does this, so this option is redundant.
  2554.  
  2555. `-J' (JUMPify Longer Branches)
  2556.      Many 32-bit computers permit a variety of branch instructions to
  2557.      do the same job.  Some of these instructions are short (and fast)
  2558.      but have a limited range; others are long (and slow) but can
  2559.      branch anywhere in virtual memory.  Often there are 3 flavors of
  2560.      branch: short, medium and long.  Some other assemblers would emit
  2561.      short and medium branches, unless told by this option to emit
  2562.      short and long branches.
  2563.  
  2564. `-t' (Temporary File Directory)
  2565.      Some other assemblers may use a temporary file, and this option
  2566.      takes a filename being the directory to site the temporary file.
  2567.      Since `as' does not use a temporary disk file, this option makes
  2568.      no difference.  `-t' needs exactly one filename.
  2569.  
  2570.    The Vax version of the assembler accepts two options when compiled
  2571. for VMS.  They are `-h', and `-+'.  The `-h' option prevents `as' from
  2572. modifying the symbol-table entries for symbols that contain lowercase
  2573. characters (I think).  The `-+' option causes `as' to print warning
  2574. messages if the FILENAME part of the object file, or any symbol name is
  2575. larger than 31 characters.  The `-+' option also insertes some code
  2576. following the `_main' symbol so that the object file will be compatible
  2577. with Vax-11 "C".
  2578.  
  2579. 
  2580. File: as,  Node: VAX-float,  Next: VAX-directives,  Prev: Vax-Opts,  Up: Vax-Dependent
  2581.  
  2582. VAX Floating Point
  2583. ------------------
  2584.  
  2585.    Conversion of flonums to floating point is correct, and compatible
  2586. with previous assemblers.  Rounding is towards zero if the remainder is
  2587. exactly half the least significant bit.
  2588.  
  2589.    `D', `F', `G' and `H' floating point formats are understood.
  2590.  
  2591.    Immediate floating literals (*e.g.* `S`$6.9') are rendered
  2592. correctly.  Again, rounding is towards zero in the boundary case.
  2593.  
  2594.    The `.float' directive produces `f' format numbers.  The `.double'
  2595. directive produces `d' format numbers.
  2596.  
  2597. 
  2598. File: as,  Node: VAX-directives,  Next: VAX-opcodes,  Prev: VAX-float,  Up: Vax-Dependent
  2599.  
  2600. Vax Machine Directives
  2601. ----------------------
  2602.  
  2603.    The Vax version of the assembler supports four directives for
  2604. generating Vax floating point constants.  They are described in the
  2605. table below.
  2606.  
  2607. `.dfloat'
  2608.      This expects zero or more flonums, separated by commas, and
  2609.      assembles Vax `d' format 64-bit floating point constants.
  2610.  
  2611. `.ffloat'
  2612.      This expects zero or more flonums, separated by commas, and
  2613.      assembles Vax `f' format 32-bit floating point constants.
  2614.  
  2615. `.gfloat'
  2616.      This expects zero or more flonums, separated by commas, and
  2617.      assembles Vax `g' format 64-bit floating point constants.
  2618.  
  2619. `.hfloat'
  2620.      This expects zero or more flonums, separated by commas, and
  2621.      assembles Vax `h' format 128-bit floating point constants.
  2622.  
  2623. 
  2624. File: as,  Node: VAX-opcodes,  Next: VAX-branch,  Prev: VAX-directives,  Up: Vax-Dependent
  2625.  
  2626. VAX Opcodes
  2627. -----------
  2628.  
  2629.    All DEC mnemonics are supported.  Beware that `case...' instructions
  2630. have exactly 3 operands.  The dispatch table that follows the `case...'
  2631. instruction should be made with `.word' statements.  This is compatible
  2632. with all unix assemblers we know of.
  2633.  
  2634. 
  2635. File: as,  Node: VAX-branch,  Next: VAX-operands,  Prev: VAX-opcodes,  Up: Vax-Dependent
  2636.  
  2637. VAX Branch Improvement
  2638. ----------------------
  2639.  
  2640.    Certain pseudo opcodes are permitted.  They are for branch
  2641. instructions.  They expand to the shortest branch instruction that will
  2642. reach the target.  Generally these mnemonics are made by substituting
  2643. `j' for `b' at the start of a DEC mnemonic.  This feature is included
  2644. both for compatibility and to help compilers.  If you don't need this
  2645. feature, don't use these opcodes.  Here are the mnemonics, and the code
  2646. they can expand into.
  2647.  
  2648. `jbsb'
  2649.      `Jsb' is already an instruction mnemonic, so we chose `jbsb'.
  2650.     (byte displacement)
  2651.           `bsbb ...'
  2652.  
  2653.     (word displacement)
  2654.           `bsbw ...'
  2655.  
  2656.     (long displacement)
  2657.           `jsb ...'
  2658.  
  2659. `jbr'
  2660. `jr'
  2661.      Unconditional branch.
  2662.     (byte displacement)
  2663.           `brb ...'
  2664.  
  2665.     (word displacement)
  2666.           `brw ...'
  2667.  
  2668.     (long displacement)
  2669.           `jmp ...'
  2670.  
  2671. `jCOND'
  2672.      COND may be any one of the conditional branches `neq', `nequ',
  2673.      `eql', `eqlu', `gtr', `geq', `lss', `gtru', `lequ', `vc', `vs',
  2674.      `gequ', `cc', `lssu', `cs'.  COND may also be one of the bit tests
  2675.      `bs', `bc', `bss', `bcs', `bsc', `bcc', `bssi', `bcci', `lbs',
  2676.      `lbc'.  NOTCOND is the opposite condition to COND.
  2677.     (byte displacement)
  2678.           `bCOND ...'
  2679.  
  2680.     (word displacement)
  2681.           `bNOTCOND foo ; brw ... ; foo:'
  2682.  
  2683.     (long displacement)
  2684.           `bNOTCOND foo ; jmp ... ; foo:'
  2685.  
  2686. `jacbX'
  2687.      X may be one of `b d f g h l w'.
  2688.     (word displacement)
  2689.           `OPCODE ...'
  2690.  
  2691.     (long displacement)
  2692.                OPCODE ..., foo ;
  2693.                brb bar ;
  2694.                foo: jmp ... ;
  2695.                bar:
  2696.  
  2697. `jaobYYY'
  2698.      YYY may be one of `lss leq'.
  2699.  
  2700. `jsobZZZ'
  2701.      ZZZ may be one of `geq gtr'.
  2702.     (byte displacement)
  2703.           `OPCODE ...'
  2704.  
  2705.     (word displacement)
  2706.                OPCODE ..., foo ;
  2707.                brb bar ;
  2708.                foo: brw DESTINATION ;
  2709.                bar:
  2710.  
  2711.     (long displacement)
  2712.                OPCODE ..., foo ;
  2713.                brb bar ;
  2714.                foo: jmp DESTINATION ;
  2715.                bar:
  2716.  
  2717. `aobleq'
  2718. `aoblss'
  2719. `sobgeq'
  2720. `sobgtr'
  2721.     (byte displacement)
  2722.           `OPCODE ...'
  2723.  
  2724.     (word displacement)
  2725.                OPCODE ..., foo ;
  2726.                brb bar ;
  2727.                foo: brw DESTINATION ;
  2728.                bar:
  2729.  
  2730.     (long displacement)
  2731.                OPCODE ..., foo ;
  2732.                brb bar ;
  2733.                foo: jmp DESTINATION ;
  2734.                bar:
  2735.  
  2736. 
  2737. File: as,  Node: VAX-operands,  Next: VAX-no,  Prev: VAX-branch,  Up: Vax-Dependent
  2738.  
  2739. VAX Operands
  2740. ------------
  2741.  
  2742.    The immediate character is `$' for Unix compatibility, not `#' as
  2743. DEC writes it.
  2744.  
  2745.    The indirect character is `*' for Unix compatibility, not `@' as DEC
  2746. writes it.
  2747.  
  2748.    The displacement sizing character is ``' (an accent grave) for Unix
  2749. compatibility, not `^' as DEC writes it.  The letter preceding ``' may
  2750. have either case.  `G' is not understood, but all other letters (`b i l
  2751. s w') are understood.
  2752.  
  2753.    Register names understood are `r0 r1 r2 ... r15 ap fp sp pc'.  Any
  2754. case of letters will do.
  2755.  
  2756.    For instance
  2757.      tstb *w`$4(r5)
  2758.  
  2759.    Any expression is permitted in an operand.  Operands are comma
  2760. separated.
  2761.  
  2762. 
  2763. File: as,  Node: VAX-no,  Prev: VAX-operands,  Up: Vax-Dependent
  2764.  
  2765. Not Supported on VAX
  2766. --------------------
  2767.  
  2768.    Vax bit fields can not be assembled with `as'.  Someone can add the
  2769. required code if they really need it.
  2770.  
  2771. 
  2772. File: as,  Node: AMD29K-Dependent,  Next: H8/300-Dependent,  Prev: Vax-Dependent,  Up: Machine Dependencies
  2773.  
  2774. AMD 29K Dependent Features
  2775. ==========================
  2776.  
  2777. * Menu:
  2778.  
  2779. * AMD29K Options::              Options
  2780. * AMD29K Syntax::               Syntax
  2781. * AMD29K Floating Point::       Floating Point
  2782. * AMD29K Directives::           AMD 29K Machine Directives
  2783. * AMD29K Opcodes::              Opcodes
  2784.  
  2785. 
  2786. File: as,  Node: AMD29K Options,  Next: AMD29K Syntax,  Up: AMD29K-Dependent
  2787.  
  2788. Options
  2789. -------
  2790.  
  2791.    `as' has no additional command-line options for the AMD 29K family.
  2792.  
  2793. 
  2794. File: as,  Node: AMD29K Syntax,  Next: AMD29K Floating Point,  Prev: AMD29K Options,  Up: AMD29K-Dependent
  2795.  
  2796. Syntax
  2797. ------
  2798.  
  2799. * Menu:
  2800.  
  2801. * AMD29K-Chars::                Special Characters
  2802. * AMD29K-Regs::                 Register Names
  2803.  
  2804. 
  2805. File: as,  Node: AMD29K-Chars,  Next: AMD29K-Regs,  Up: AMD29K Syntax
  2806.  
  2807. Special Characters
  2808. ..................
  2809.  
  2810.    `;' is the line comment character.
  2811.  
  2812.    `@' can be used instead of a newline to separate statements.
  2813.  
  2814.    The character `?' is permitted in identifiers (but may not begin an
  2815. identifier).
  2816.  
  2817. 
  2818. File: as,  Node: AMD29K-Regs,  Prev: AMD29K-Chars,  Up: AMD29K Syntax
  2819.  
  2820. Register Names
  2821. ..............
  2822.  
  2823.    General-purpose registers are represented by predefined symbols of
  2824. the form `GRNNN' (for global registers) or `LRNNN' (for local
  2825. registers), where NNN represents a number between `0' and `127',
  2826. written with no leading zeros.  The leading letters may be in either
  2827. upper or lower case; for example, `gr13' and `LR7' are both valid
  2828. register names.
  2829.  
  2830.    You may also refer to general-purpose registers by specifying the
  2831. register number as the result of an expression (prefixed with `%%' to
  2832. flag the expression as a register number):
  2833.      %%EXPRESSION
  2834.  
  2835. --where EXPRESSION must be an absolute expression evaluating to a
  2836. number between `0' and `255'.  The range [0, 127] refers to global
  2837. registers, and the range [128, 255] to local registers.
  2838.  
  2839.    In addition, `as' understands the following protected
  2840. special-purpose register names for the AMD 29K family:
  2841.  
  2842.        vab    chd    pc0
  2843.        ops    chc    pc1
  2844.        cps    rbp    pc2
  2845.        cfg    tmc    mmu
  2846.        cha    tmr    lru
  2847.  
  2848.    These unprotected special-purpose register names are also recognized:
  2849.        ipc    alu    fpe
  2850.        ipa    bp     inte
  2851.        ipb    fc     fps
  2852.        q      cr     exop
  2853.  
  2854. 
  2855. File: as,  Node: AMD29K Floating Point,  Next: AMD29K Directives,  Prev: AMD29K Syntax,  Up: AMD29K-Dependent
  2856.  
  2857. Floating Point
  2858. --------------
  2859.  
  2860.    The AMD 29K family uses IEEE floating-point numbers.
  2861.  
  2862. 
  2863. File: as,  Node: AMD29K Directives,  Next: AMD29K Opcodes,  Prev: AMD29K Floating Point,  Up: AMD29K-Dependent
  2864.  
  2865. AMD 29K Machine Directives
  2866. --------------------------
  2867.  
  2868. `.block SIZE , FILL'
  2869.      This directive emits SIZE bytes, each of value FILL.  Both SIZE
  2870.      and FILL are absolute expressions.  If the comma and FILL are
  2871.      omitted, FILL is assumed to be zero.
  2872.  
  2873.      In other versions of the GNU assembler, this directive is called
  2874.      `.space'.
  2875.  
  2876. `.cputype'
  2877.      This directive is ignored; it is accepted for compatibility with
  2878.      other AMD 29K assemblers.
  2879.  
  2880. `.file'
  2881.      This directive is ignored; it is accepted for compatibility with
  2882.      other AMD 29K assemblers.
  2883.  
  2884.           *Warning:* in other versions of the GNU assembler, `.file' is
  2885.           used for the directive called `.app-file' in the AMD 29K
  2886.           support.
  2887.  
  2888. `.line'
  2889.      This directive is ignored; it is accepted for compatibility with
  2890.      other AMD 29K assemblers.
  2891.  
  2892. `.sect'
  2893.      This directive is ignored; it is accepted for compatibility with
  2894.      other AMD 29K assemblers.
  2895.  
  2896. `.use SECTION NAME'
  2897.      Establishes the section and subsection for the following code;
  2898.      SECTION NAME may be one of `.text', `.data', `.data1', or `.lit'.
  2899.      With one of the first three SECTION NAME options, `.use' is
  2900.      equivalent to the machine directive SECTION NAME; the remaining
  2901.      case, `.use .lit', is the same as `.data 200'.
  2902.  
  2903. 
  2904. File: as,  Node: AMD29K Opcodes,  Prev: AMD29K Directives,  Up: AMD29K-Dependent
  2905.  
  2906. Opcodes
  2907. -------
  2908.  
  2909.    `as' implements all the standard AMD 29K opcodes.  No additional
  2910. pseudo-instructions are needed on this family.
  2911.  
  2912.    For information on the 29K machine instruction set, see `Am29000
  2913. User's Manual', Advanced Micro Devices, Inc.
  2914.  
  2915. 
  2916. File: as,  Node: H8/300-Dependent,  Next: H8/500-Dependent,  Prev: AMD29K-Dependent,  Up: Machine Dependencies
  2917.  
  2918. H8/300 Dependent Features
  2919. =========================
  2920.  
  2921. * Menu:
  2922.  
  2923. * H8/300 Options::              Options
  2924. * H8/300 Syntax::               Syntax
  2925. * H8/300 Floating Point::       Floating Point
  2926. * H8/300 Directives::           H8/300 Machine Directives
  2927. * H8/300 Opcodes::              Opcodes
  2928.  
  2929. 
  2930. File: as,  Node: H8/300 Options,  Next: H8/300 Syntax,  Up: H8/300-Dependent
  2931.  
  2932. Options
  2933. -------
  2934.  
  2935.    `as' has no additional command-line options for the Hitachi H8/300
  2936. family.
  2937.  
  2938. 
  2939. File: as,  Node: H8/300 Syntax,  Next: H8/300 Floating Point,  Prev: H8/300 Options,  Up: H8/300-Dependent
  2940.  
  2941. Syntax
  2942. ------
  2943.  
  2944. * Menu:
  2945.  
  2946. * H8/300-Chars::                Special Characters
  2947. * H8/300-Regs::                 Register Names
  2948. * H8/300-Addressing::           Addressing Modes
  2949.  
  2950. 
  2951. File: as,  Node: H8/300-Chars,  Next: H8/300-Regs,  Up: H8/300 Syntax
  2952.  
  2953. Special Characters
  2954. ..................
  2955.  
  2956.    `;' is the line comment character.
  2957.  
  2958.    `$' can be used instead of a newline to separate statements.
  2959. Therefore *you may not use `$' in symbol names* on the H8/300.
  2960.  
  2961. 
  2962. File: as,  Node: H8/300-Regs,  Next: H8/300-Addressing,  Prev: H8/300-Chars,  Up: H8/300 Syntax
  2963.  
  2964. Register Names
  2965. ..............
  2966.  
  2967.    You can use predefined symbols of the form `rNh' and `rNl' to refer
  2968. to the H8/300 registers as sixteen 8-bit general-purpose registers.  N
  2969. is a digit from `0' to `7'); for instance, both `r0h' and `r7l' are
  2970. valid register names.
  2971.  
  2972.    You can also use the eight predefined symbols `rN' to refer to the
  2973. H8/300 registers as 16-bit registers (you must use this form for
  2974. addressing).
  2975.  
  2976.    On the H8/300H, you can also use the eight predefined symbols `erN'
  2977. (`er0' ... `er7') to refer to the 32-bit general purpose registers.
  2978.  
  2979.    The two control registers are called `pc' (program counter; a 16-bit
  2980. register, except on the H8/300H where it is 24 bits) and `ccr'
  2981. (condition code register; an 8-bit register).  `r7' is used as the
  2982. stack pointer, and can also be called `sp'.
  2983.  
  2984. 
  2985. File: as,  Node: H8/300-Addressing,  Prev: H8/300-Regs,  Up: H8/300 Syntax
  2986.  
  2987. Addressing Modes
  2988. ................
  2989.  
  2990.    as understands the following addressing modes for the H8/300:
  2991. `rN'
  2992.      Register direct
  2993.  
  2994. `@rN'
  2995.      Register indirect
  2996.  
  2997. `@(D, rN)'
  2998. `@(D:16, rN)'
  2999. `@(D:24, rN)'
  3000.      Register indirect: 16-bit or 24-bit displacement D from register
  3001.      N.  (24-bit displacements are only meaningful on the H8/300H.)
  3002.  
  3003. `@rN+'
  3004.      Register indirect with post-increment
  3005.  
  3006. `@-rN'
  3007.      Register indirect with pre-decrement
  3008.  
  3009. ``@'AA'
  3010. ``@'AA:8'
  3011. ``@'AA:16'
  3012. ``@'AA:24'
  3013.      Absolute address `aa'.  (The address size `:24' only makes sense
  3014.      on the H8/300H.)
  3015.  
  3016. `#XX'
  3017. `#XX:8'
  3018. `#XX:16'
  3019. `#XX:32'
  3020.      Immediate data XX.  You may specify the `:8', `:16', or `:32' for
  3021.      clarity, if you wish; but `as' neither requires this nor uses
  3022.      it--the data size required is taken from context.
  3023.  
  3024. ``@'`@'AA'
  3025. ``@'`@'AA:8'
  3026.      Memory indirect.  You may specify the `:8' for clarity, if you
  3027.      wish; but `as' neither requires this nor uses it.
  3028.  
  3029. 
  3030. File: as,  Node: H8/300 Floating Point,  Next: H8/300 Directives,  Prev: H8/300 Syntax,  Up: H8/300-Dependent
  3031.  
  3032. Floating Point
  3033. --------------
  3034.  
  3035.    The H8/300 family has no hardware floating point, but the `.float'
  3036. directive generates IEEE floating-point numbers for compatibility with
  3037. other development tools.
  3038.  
  3039. 
  3040. File: as,  Node: H8/300 Directives,  Next: H8/300 Opcodes,  Prev: H8/300 Floating Point,  Up: H8/300-Dependent
  3041.  
  3042. H8/300 Machine Directives
  3043. -------------------------
  3044.  
  3045.    `as' has only one machine-dependent directive for the H8/300:
  3046.  
  3047. `.h300h'
  3048.      Recognize and emit additional instructions for the H8/300H
  3049.      variant, and also make `.int' emit 32-bit numbers rather than the
  3050.      usual (16-bit) for the H8/300 family.
  3051.  
  3052.    On the H8/300 family (including the H8/300H) `.word' directives
  3053. generate 16-bit numbers.
  3054.  
  3055. 
  3056. File: as,  Node: H8/300 Opcodes,  Prev: H8/300 Directives,  Up: H8/300-Dependent
  3057.  
  3058. Opcodes
  3059. -------
  3060.  
  3061.    For detailed information on the H8/300 machine instruction set, see
  3062. `H8/300 Series Programming Manual' (Hitachi ADE-602-025).  For
  3063. information specific to the H8/300H, see `H8/300H Series Programming
  3064. Manual' (Hitachi).
  3065.  
  3066.    `as' implements all the standard H8/300 opcodes.  No additional
  3067. pseudo-instructions are needed on this family.
  3068.  
  3069.    The following table summarizes the H8/300 opcodes, and their
  3070. arguments.  Entries marked `*' are opcodes used only on the H8/300H.
  3071.  
  3072.               Legend:
  3073.                  Rs   source register
  3074.                  Rd   destination register
  3075.                  abs  absolute address
  3076.                  imm  immediate data
  3077.               disp:N  N-bit displacement from a register
  3078.              pcrel:N  N-bit displacement relative to program counter
  3079.      
  3080.         add.b #imm,rd              *  andc #imm,ccr
  3081.         add.b rs,rd                   band #imm,rd
  3082.         add.w rs,rd                   band #imm,@rd
  3083.      *  add.w #imm,rd                 band #imm,@abs:8
  3084.      *  add.l rs,rd                   bra  pcrel:8
  3085.      *  add.l #imm,rd              *  bra  pcrel:16
  3086.         adds #imm,rd                  bt   pcrel:8
  3087.         addx #imm,rd               *  bt   pcrel:16
  3088.         addx rs,rd                    brn  pcrel:8
  3089.         and.b #imm,rd              *  brn  pcrel:16
  3090.         and.b rs,rd                   bf   pcrel:8
  3091.      *  and.w rs,rd                *  bf   pcrel:16
  3092.      *  and.w #imm,rd                 bhi  pcrel:8
  3093.      *  and.l #imm,rd              *  bhi  pcrel:16
  3094.      *  and.l rs,rd                   bls  pcrel:8
  3095.      
  3096.      *  bls  pcrel:16                 bld  #imm,rd
  3097.         bcc  pcrel:8                  bld  #imm,@rd
  3098.      *  bcc  pcrel:16                 bld  #imm,@abs:8
  3099.         bhs  pcrel:8                  bnot #imm,rd
  3100.      *  bhs  pcrel:16                 bnot #imm,@rd
  3101.         bcs  pcrel:8                  bnot #imm,@abs:8
  3102.      *  bcs  pcrel:16                 bnot rs,rd
  3103.         blo  pcrel:8                  bnot rs,@rd
  3104.      *  blo  pcrel:16                 bnot rs,@abs:8
  3105.         bne  pcrel:8                  bor  #imm,rd
  3106.      *  bne  pcrel:16                 bor  #imm,@rd
  3107.         beq  pcrel:8                  bor  #imm,@abs:8
  3108.      *  beq  pcrel:16                 bset #imm,rd
  3109.         bvc  pcrel:8                  bset #imm,@rd
  3110.      *  bvc  pcrel:16                 bset #imm,@abs:8
  3111.         bvs  pcrel:8                  bset rs,rd
  3112.      *  bvs  pcrel:16                 bset rs,@rd
  3113.         bpl  pcrel:8                  bset rs,@abs:8
  3114.      *  bpl  pcrel:16                 bsr  pcrel:8
  3115.         bmi  pcrel:8                  bsr  pcrel:16
  3116.      *  bmi  pcrel:16                 bst  #imm,rd
  3117.         bge  pcrel:8                  bst  #imm,@rd
  3118.      *  bge  pcrel:16                 bst  #imm,@abs:8
  3119.         blt  pcrel:8                  btst #imm,rd
  3120.      *  blt  pcrel:16                 btst #imm,@rd
  3121.         bgt  pcrel:8                  btst #imm,@abs:8
  3122.      *  bgt  pcrel:16                 btst rs,rd
  3123.         ble  pcrel:8                  btst rs,@rd
  3124.      *  ble  pcrel:16                 btst rs,@abs:8
  3125.         bclr #imm,rd                  bxor #imm,rd
  3126.         bclr #imm,@rd                 bxor #imm,@rd
  3127.         bclr #imm,@abs:8              bxor #imm,@abs:8
  3128.         bclr rs,rd                    cmp.b #imm,rd
  3129.         bclr rs,@rd                   cmp.b rs,rd
  3130.         bclr rs,@abs:8                cmp.w rs,rd
  3131.         biand #imm,rd                 cmp.w rs,rd
  3132.         biand #imm,@rd             *  cmp.w #imm,rd
  3133.         biand #imm,@abs:8          *  cmp.l #imm,rd
  3134.         bild #imm,rd               *  cmp.l rs,rd
  3135.         bild #imm,@rd                 daa  rs
  3136.         bild #imm,@abs:8              das  rs
  3137.         bior #imm,rd                  dec.b rs
  3138.         bior #imm,@rd              *  dec.w #imm,rd
  3139.         bior #imm,@abs:8           *  dec.l #imm,rd
  3140.         bist #imm,rd                  divxu.b rs,rd
  3141.         bist #imm,@rd              *  divxu.w rs,rd
  3142.         bist #imm,@abs:8           *  divxs.b rs,rd
  3143.         bixor #imm,rd              *  divxs.w rs,rd
  3144.         bixor #imm,@rd                eepmov
  3145.         bixor #imm,@abs:8          *  eepmovw
  3146.      
  3147.      *  exts.w rd                     mov.w rs,@abs:16
  3148.      *  exts.l rd                  *  mov.l #imm,rd
  3149.      *  extu.w rd                  *  mov.l rs,rd
  3150.      *  extu.l rd                  *  mov.l @rs,rd
  3151.         inc  rs                    *  mov.l @(disp:16,rs),rd
  3152.      *  inc.w #imm,rd              *  mov.l @(disp:24,rs),rd
  3153.      *  inc.l #imm,rd              *  mov.l @rs+,rd
  3154.         jmp  @rs                   *  mov.l @abs:16,rd
  3155.         jmp  abs                   *  mov.l @abs:24,rd
  3156.         jmp  @@abs:8               *  mov.l rs,@rd
  3157.         jsr  @rs                   *  mov.l rs,@(disp:16,rd)
  3158.         jsr  abs                   *  mov.l rs,@(disp:24,rd)
  3159.         jsr  @@abs:8               *  mov.l rs,@-rd
  3160.         ldc  #imm,ccr              *  mov.l rs,@abs:16
  3161.         ldc  rs,ccr                *  mov.l rs,@abs:24
  3162.      *  ldc  @abs:16,ccr              movfpe @abs:16,rd
  3163.      *  ldc  @abs:24,ccr              movtpe rs,@abs:16
  3164.      *  ldc  @(disp:16,rs),ccr        mulxu.b rs,rd
  3165.      *  ldc  @(disp:24,rs),ccr     *  mulxu.w rs,rd
  3166.      *  ldc  @rs+,ccr              *  mulxs.b rs,rd
  3167.      *  ldc  @rs,ccr               *  mulxs.w rs,rd
  3168.      *  mov.b @(disp:24,rs),rd        neg.b rs
  3169.      *  mov.b rs,@(disp:24,rd)     *  neg.w rs
  3170.         mov.b @abs:16,rd           *  neg.l rs
  3171.         mov.b rs,rd                   nop
  3172.         mov.b @abs:8,rd               not.b rs
  3173.         mov.b rs,@abs:8            *  not.w rs
  3174.         mov.b rs,rd                *  not.l rs
  3175.         mov.b #imm,rd                 or.b #imm,rd
  3176.         mov.b @rs,rd                  or.b rs,rd
  3177.         mov.b @(disp:16,rs),rd     *  or.w #imm,rd
  3178.         mov.b @rs+,rd              *  or.w rs,rd
  3179.         mov.b @abs:8,rd            *  or.l #imm,rd
  3180.         mov.b rs,@rd               *  or.l rs,rd
  3181.         mov.b rs,@(disp:16,rd)        orc  #imm,ccr
  3182.         mov.b rs,@-rd                 pop.w rs
  3183.         mov.b rs,@abs:8            *  pop.l rs
  3184.         mov.w rs,@rd                  push.w rs
  3185.      *  mov.w @(disp:24,rs),rd     *  push.l rs
  3186.      *  mov.w rs,@(disp:24,rd)        rotl.b rs
  3187.      *  mov.w @abs:24,rd           *  rotl.w rs
  3188.      *  mov.w rs,@abs:24           *  rotl.l rs
  3189.         mov.w rs,rd                   rotr.b rs
  3190.         mov.w #imm,rd              *  rotr.w rs
  3191.         mov.w @rs,rd               *  rotr.l rs
  3192.         mov.w @(disp:16,rs),rd        rotxl.b rs
  3193.         mov.w @rs+,rd              *  rotxl.w rs
  3194.         mov.w @abs:16,rd           *  rotxl.l rs
  3195.         mov.w rs,@(disp:16,rd)        rotxr.b rs
  3196.         mov.w rs,@-rd              *  rotxr.w rs
  3197.      
  3198.      *  rotxr.l rs                 *  stc  ccr,@(disp:24,rd)
  3199.         bpt                        *  stc  ccr,@-rd
  3200.         rte                        *  stc  ccr,@abs:16
  3201.         rts                        *  stc  ccr,@abs:24
  3202.         shal.b rs                     sub.b rs,rd
  3203.      *  shal.w rs                     sub.w rs,rd
  3204.      *  shal.l rs                  *  sub.w #imm,rd
  3205.         shar.b rs                  *  sub.l rs,rd
  3206.      *  shar.w rs                  *  sub.l #imm,rd
  3207.      *  shar.l rs                     subs #imm,rd
  3208.         shll.b rs                     subx #imm,rd
  3209.      *  shll.w rs                     subx rs,rd
  3210.      *  shll.l rs                  *  trapa #imm
  3211.         shlr.b rs                     xor  #imm,rd
  3212.      *  shlr.w rs                     xor  rs,rd
  3213.      *  shlr.l rs                  *  xor.w #imm,rd
  3214.         sleep                      *  xor.w rs,rd
  3215.         stc  ccr,rd                *  xor.l #imm,rd
  3216.      *  stc  ccr,@rs               *  xor.l rs,rd
  3217.      *  stc  ccr,@(disp:16,rd)        xorc #imm,ccr
  3218.  
  3219.    Four H8/300 instructions (`add', `cmp', `mov', `sub') are defined
  3220. with variants using the suffixes `.b', `.w', and `.l' to specify the
  3221. size of a memory operand.  `as' supports these suffixes, but does not
  3222. require them; since one of the operands is always a register, `as' can
  3223. deduce the correct size.
  3224.  
  3225.    For example, since `r0' refers to a 16-bit register,
  3226.      mov    r0,@foo
  3227. is equivalent to
  3228.      mov.w  r0,@foo
  3229.  
  3230.    If you use the size suffixes, `as' issues a warning when the suffix
  3231. and the register size do not match.
  3232.  
  3233. 
  3234. File: as,  Node: H8/500-Dependent,  Next: SH-Dependent,  Prev: H8/300-Dependent,  Up: Machine Dependencies
  3235.  
  3236. H8/500 Dependent Features
  3237. =========================
  3238.  
  3239. * Menu:
  3240.  
  3241. * H8/500 Options::              Options
  3242. * H8/500 Syntax::               Syntax
  3243. * H8/500 Floating Point::       Floating Point
  3244. * H8/500 Directives::           H8/500 Machine Directives
  3245. * H8/500 Opcodes::              Opcodes
  3246.  
  3247. 
  3248. File: as,  Node: H8/500 Options,  Next: H8/500 Syntax,  Up: H8/500-Dependent
  3249.  
  3250. Options
  3251. -------
  3252.  
  3253.    `as' has no additional command-line options for the Hitachi H8/500
  3254. family.
  3255.  
  3256. 
  3257. File: as,  Node: H8/500 Syntax,  Next: H8/500 Floating Point,  Prev: H8/500 Options,  Up: H8/500-Dependent
  3258.  
  3259. Syntax
  3260. ------
  3261.  
  3262. * Menu:
  3263.  
  3264. * H8/500-Chars::                Special Characters
  3265. * H8/500-Regs::                 Register Names
  3266. * H8/500-Addressing::           Addressing Modes
  3267.  
  3268. 
  3269. File: as,  Node: H8/500-Chars,  Next: H8/500-Regs,  Up: H8/500 Syntax
  3270.  
  3271. Special Characters
  3272. ..................
  3273.  
  3274.    `!' is the line comment character.
  3275.  
  3276.    `;' can be used instead of a newline to separate statements.
  3277.  
  3278.    Since `$' has no special meaning, you may use it in symbol names.
  3279.  
  3280. 
  3281. File: as,  Node: H8/500-Regs,  Next: H8/500-Addressing,  Prev: H8/500-Chars,  Up: H8/500 Syntax
  3282.  
  3283. Register Names
  3284. ..............
  3285.  
  3286.    You can use the predefined symbols `r0', `r1', `r2', `r3', `r4',
  3287. `r5', `r6', and `r7' to refer to the H8/500 registers.
  3288.  
  3289.    The H8/500 also has these control registers:
  3290.  
  3291. `cp'
  3292.      code pointer
  3293.  
  3294. `dp'
  3295.      data pointer
  3296.  
  3297. `bp'
  3298.      base pointer
  3299.  
  3300. `tp'
  3301.      stack top pointer
  3302.  
  3303. `ep'
  3304.      extra pointer
  3305.  
  3306. `sr'
  3307.      status register
  3308.  
  3309. `ccr'
  3310.      condition code register
  3311.  
  3312.    All registers are 16 bits long.  To represent 32 bit numbers, use two
  3313. adjacent registers; for distant memory addresses, use one of the segment
  3314. pointers (`cp' for the program counter; `dp' for `r0'-`r3'; `ep' for
  3315. `r4' and `r5'; and `tp' for `r6' and `r7'.
  3316.  
  3317. 
  3318. File: as,  Node: H8/500-Addressing,  Prev: H8/500-Regs,  Up: H8/500 Syntax
  3319.  
  3320. Addressing Modes
  3321. ................
  3322.  
  3323.    as understands the following addressing modes for the H8/500:
  3324. `RN'
  3325.      Register direct
  3326.  
  3327. `@RN'
  3328.      Register indirect
  3329.  
  3330. `@(d:8, RN)'
  3331.      Register indirect with 8 bit signed displacement
  3332.  
  3333. `@(d:16, RN)'
  3334.      Register indirect with 16 bit signed displacement
  3335.  
  3336. `@-RN'
  3337.      Register indirect with pre-decrement
  3338.  
  3339. `@RN+'
  3340.      Register indirect with post-increment
  3341.  
  3342. `@AA:8'
  3343.      8 bit absolute address
  3344.  
  3345. `@AA:16'
  3346.      16 bit absolute address
  3347.  
  3348. `#XX:8'
  3349.      8 bit immediate
  3350.  
  3351. `#XX:16'
  3352.      16 bit immediate
  3353.  
  3354. 
  3355. File: as,  Node: H8/500 Floating Point,  Next: H8/500 Directives,  Prev: H8/500 Syntax,  Up: H8/500-Dependent
  3356.  
  3357. Floating Point
  3358. --------------
  3359.  
  3360.    The H8/500 family uses IEEE floating-point numbers.
  3361.  
  3362. 
  3363. File: as,  Node: H8/500 Directives,  Next: H8/500 Opcodes,  Prev: H8/500 Floating Point,  Up: H8/500-Dependent
  3364.  
  3365. H8/500 Machine Directives
  3366. -------------------------
  3367.  
  3368.    `as' has no machine-dependent directives for the H8/500.  However,
  3369. on this platform the `.int' and `.word' directives generate 16-bit
  3370. numbers.
  3371.  
  3372. 
  3373. File: as,  Node: H8/500 Opcodes,  Prev: H8/500 Directives,  Up: H8/500-Dependent
  3374.  
  3375. Opcodes
  3376. -------
  3377.  
  3378.    For detailed information on the H8/500 machine instruction set, see
  3379. `H8/500 Series Programming Manual' (Hitachi M21T001).
  3380.  
  3381.    `as' implements all the standard H8/500 opcodes.  No additional
  3382. pseudo-instructions are needed on this family.
  3383.  
  3384.    The following table summarizes H8/500 opcodes and their operands:
  3385.  
  3386.      Legend:
  3387.      abs8      8-bit absolute address
  3388.      abs16     16-bit absolute address
  3389.      abs24     24-bit absolute address
  3390.      crb       `ccr', `br', `ep', `dp', `tp', `dp'
  3391.      disp8     8-bit displacement
  3392.      ea        `rn', `@rn', `@(d:8, rn)', `@(d:16, rn)',
  3393.                `@-rn', `@rn+', `@aa:8', `@aa:16',
  3394.                `#xx:8', `#xx:16'
  3395.      ea_mem    `@rn', `@(d:8, rn)', `@(d:16, rn)',
  3396.                `@-rn', `@rn+', `@aa:8', `@aa:16'
  3397.      ea_noimm  `rn', `@rn', `@(d:8, rn)', `@(d:16, rn)',
  3398.                `@-rn', `@rn+', `@aa:8', `@aa:16'
  3399.      fp        r6
  3400.      imm4      4-bit immediate data
  3401.      imm8      8-bit immediate data
  3402.      imm16     16-bit immediate data
  3403.      pcrel8    8-bit offset from program counter
  3404.      pcrel16   16-bit offset from program counter
  3405.      qim       `-2', `-1', `1', `2'
  3406.      rd        any register
  3407.      rs        a register distinct from rd
  3408.      rlist     comma-separated list of registers in parentheses;
  3409.                register ranges `rd-rs' are allowed
  3410.      sp        stack pointer (`r7')
  3411.      sr        status register
  3412.      sz        size; `.b' or `.w'.  If omitted, default `.w'
  3413.      
  3414.      ldc[.b] ea,crb                 bcc[.w] pcrel16
  3415.      ldc[.w] ea,sr                  bcc[.b] pcrel8
  3416.      add[:q] sz qim,ea_noimm        bhs[.w] pcrel16
  3417.      add[:g] sz ea,rd               bhs[.b] pcrel8
  3418.      adds sz ea,rd                  bcs[.w] pcrel16
  3419.      addx sz ea,rd                  bcs[.b] pcrel8
  3420.      and sz ea,rd                   blo[.w] pcrel16
  3421.      andc[.b] imm8,crb              blo[.b] pcrel8
  3422.      andc[.w] imm16,sr              bne[.w] pcrel16
  3423.      bpt                            bne[.b] pcrel8
  3424.      bra[.w] pcrel16                beq[.w] pcrel16
  3425.      bra[.b] pcrel8                 beq[.b] pcrel8
  3426.      bt[.w] pcrel16                 bvc[.w] pcrel16
  3427.      bt[.b] pcrel8                  bvc[.b] pcrel8
  3428.      brn[.w] pcrel16                bvs[.w] pcrel16
  3429.      brn[.b] pcrel8                 bvs[.b] pcrel8
  3430.      bf[.w] pcrel16                 bpl[.w] pcrel16
  3431.      bf[.b] pcrel8                  bpl[.b] pcrel8
  3432.      bhi[.w] pcrel16                bmi[.w] pcrel16
  3433.      bhi[.b] pcrel8                 bmi[.b] pcrel8
  3434.      bls[.w] pcrel16                bge[.w] pcrel16
  3435.      bls[.b] pcrel8                 bge[.b] pcrel8
  3436.      
  3437.      blt[.w] pcrel16                mov[:g][.b] imm8,ea_mem
  3438.      blt[.b] pcrel8                 mov[:g][.w] imm16,ea_mem
  3439.      bgt[.w] pcrel16                movfpe[.b] ea,rd
  3440.      bgt[.b] pcrel8                 movtpe[.b] rs,ea_noimm
  3441.      ble[.w] pcrel16                mulxu sz ea,rd
  3442.      ble[.b] pcrel8                 neg sz ea
  3443.      bclr sz imm4,ea_noimm          nop
  3444.      bclr sz rs,ea_noimm            not sz ea
  3445.      bnot sz imm4,ea_noimm          or sz ea,rd
  3446.      bnot sz rs,ea_noimm            orc[.b] imm8,crb
  3447.      bset sz imm4,ea_noimm          orc[.w] imm16,sr
  3448.      bset sz rs,ea_noimm            pjmp abs24
  3449.      bsr[.b] pcrel8                 pjmp @rd
  3450.      bsr[.w] pcrel16                pjsr abs24
  3451.      btst sz imm4,ea_noimm          pjsr @rd
  3452.      btst sz rs,ea_noimm            prtd imm8
  3453.      clr sz ea                      prtd imm16
  3454.      cmp[:e][.b] imm8,rd            prts
  3455.      cmp[:i][.w] imm16,rd           rotl sz ea
  3456.      cmp[:g].b imm8,ea_noimm        rotr sz ea
  3457.      cmp[:g][.w] imm16,ea_noimm     rotxl sz ea
  3458.      Cmp[:g] sz ea,rd               rotxr sz ea
  3459.      dadd rs,rd                     rtd imm8
  3460.      divxu sz ea,rd                 rtd imm16
  3461.      dsub rs,rd                     rts
  3462.      exts[.b] rd                    scb/f rs,pcrel8
  3463.      extu[.b] rd                    scb/ne rs,pcrel8
  3464.      jmp @rd                        scb/eq rs,pcrel8
  3465.      jmp @(imm8,rd)                 shal sz ea
  3466.      jmp @(imm16,rd)                shar sz ea
  3467.      jmp abs16                      shll sz ea
  3468.      jsr @rd                        shlr sz ea
  3469.      jsr @(imm8,rd)                 sleep
  3470.      jsr @(imm16,rd)                stc[.b] crb,ea_noimm
  3471.      jsr abs16                      stc[.w] sr,ea_noimm
  3472.      ldm @sp+,(rlist)               stm (rlist),@-sp
  3473.      link fp,imm8                   sub sz ea,rd
  3474.      link fp,imm16                  subs sz ea,rd
  3475.      mov[:e][.b] imm8,rd            subx sz ea,rd
  3476.      mov[:i][.w] imm16,rd           swap[.b] rd
  3477.      mov[:l][.w] abs8,rd            tas[.b] ea
  3478.      mov[:l].b abs8,rd              trapa imm4
  3479.      mov[:s][.w] rs,abs8            trap/vs
  3480.      mov[:s].b rs,abs8              tst sz ea
  3481.      mov[:f][.w] @(disp8,fp),rd     unlk fp
  3482.      mov[:f][.w] rs,@(disp8,fp)     xch[.w] rs,rd
  3483.      mov[:f].b @(disp8,fp),rd       xor sz ea,rd
  3484.      mov[:f].b rs,@(disp8,fp)       xorc.b imm8,crb
  3485.      mov[:g] sz rs,ea_mem           xorc.w imm16,sr
  3486.      mov[:g] sz ea,rd
  3487.  
  3488. 
  3489. File: as,  Node: SH-Dependent,  Next: i960-Dependent,  Prev: H8/500-Dependent,  Up: Machine Dependencies
  3490.  
  3491. Hitachi SH Dependent Features
  3492. =============================
  3493.  
  3494. * Menu:
  3495.  
  3496. * SH Options::              Options
  3497. * SH Syntax::               Syntax
  3498. * SH Floating Point::       Floating Point
  3499. * SH Directives::           SH Machine Directives
  3500. * SH Opcodes::              Opcodes
  3501.  
  3502. 
  3503. File: as,  Node: SH Options,  Next: SH Syntax,  Up: SH-Dependent
  3504.  
  3505. Options
  3506. -------
  3507.  
  3508.    `as' has no additional command-line options for the Hitachi SH
  3509. family.
  3510.  
  3511. 
  3512. File: as,  Node: SH Syntax,  Next: SH Floating Point,  Prev: SH Options,  Up: SH-Dependent
  3513.  
  3514. Syntax
  3515. ------
  3516.  
  3517. * Menu:
  3518.  
  3519. * SH-Chars::                Special Characters
  3520. * SH-Regs::                 Register Names
  3521. * SH-Addressing::           Addressing Modes
  3522.  
  3523. 
  3524. File: as,  Node: SH-Chars,  Next: SH-Regs,  Up: SH Syntax
  3525.  
  3526. Special Characters
  3527. ..................
  3528.  
  3529.    `!' is the line comment character.
  3530.  
  3531.    You can use `;' instead of a newline to separate statements.
  3532.  
  3533.    Since `$' has no special meaning, you may use it in symbol names.
  3534.  
  3535. 
  3536. File: as,  Node: SH-Regs,  Next: SH-Addressing,  Prev: SH-Chars,  Up: SH Syntax
  3537.  
  3538. Register Names
  3539. ..............
  3540.  
  3541.    You can use the predefined symbols `r0', `r1', `r2', `r3', `r4',
  3542. `r5', `r6', `r7', `r8', `r9', `r10', `r11', `r12', `r13', `r14', and
  3543. `r15' to refer to the SH registers.
  3544.  
  3545.    The SH also has these control registers:
  3546.  
  3547. `pr'
  3548.      procedure register (holds return address)
  3549.  
  3550. `pc'
  3551.      program counter
  3552.  
  3553. `mach'
  3554. `macl'
  3555.      high and low multiply accumulator registers
  3556.  
  3557. `sr'
  3558.      status register
  3559.  
  3560. `gbr'
  3561.      global base register
  3562.  
  3563. `vbr'
  3564.      vector base register (for interrupt vectors)
  3565.  
  3566. 
  3567. File: as,  Node: SH-Addressing,  Prev: SH-Regs,  Up: SH Syntax
  3568.  
  3569. Addressing Modes
  3570. ................
  3571.  
  3572.    `as' understands the following addressing modes for the SH.  `RN' in
  3573. the following refers to any of the numbered registers, but *not* the
  3574. control registers.
  3575.  
  3576. `RN'
  3577.      Register direct
  3578.  
  3579. `@RN'
  3580.      Register indirect
  3581.  
  3582. `@-RN'
  3583.      Register indirect with pre-decrement
  3584.  
  3585. `@RN+'
  3586.      Register indirect with post-increment
  3587.  
  3588. `@(DISP, RN)'
  3589.      Register indirect with displacement
  3590.  
  3591. `@(R0, RN)'
  3592.      Register indexed
  3593.  
  3594. `@(DISP, GBR)'
  3595.      `GBR' offset
  3596.  
  3597. `@(R0, GBR)'
  3598.      GBR indexed
  3599.  
  3600. `ADDR'
  3601. `@(DISP, PC)'
  3602.      PC relative address (for branch or for addressing memory).  The
  3603.      `as' implementation allows you to use the simpler form ADDR
  3604.      anywhere a PC relative address is called for; the alternate form
  3605.      is supported for compatibility with other assemblers.
  3606.  
  3607. `#IMM'
  3608.      Immediate data
  3609.  
  3610. 
  3611. File: as,  Node: SH Floating Point,  Next: SH Directives,  Prev: SH Syntax,  Up: SH-Dependent
  3612.  
  3613. Floating Point
  3614. --------------
  3615.  
  3616.    The SH family uses IEEE floating-point numbers.
  3617.  
  3618. 
  3619. File: as,  Node: SH Directives,  Next: SH Opcodes,  Prev: SH Floating Point,  Up: SH-Dependent
  3620.  
  3621. SH Machine Directives
  3622. ---------------------
  3623.  
  3624.    `as' has no machine-dependent directives for the SH.
  3625.  
  3626. 
  3627. File: as,  Node: SH Opcodes,  Prev: SH Directives,  Up: SH-Dependent
  3628.  
  3629. Opcodes
  3630. -------
  3631.  
  3632.    For detailed information on the SH machine instruction set, see
  3633. `SH-Microcomputer User's Manual' (Hitachi Micro Systems, Inc.).
  3634.  
  3635.    `as' implements all the standard SH opcodes.  No additional
  3636. pseudo-instructions are needed on this family.  Note, however, that
  3637. because `as' supports a simpler form of PC-relative addressing, you may
  3638. simply write (for example)
  3639.  
  3640.      mov.l  bar,r0
  3641.  
  3642. where other assemblers might require an explicit displacement to `bar'
  3643. from the program counter:
  3644.  
  3645.      mov.l  @(DISP, PC)
  3646.  
  3647.    Here is a summary of SH opcodes:
  3648.  
  3649.      Legend:
  3650.      Rn        a numbered register
  3651.      Rm        another numbered register
  3652.      #imm      immediate data
  3653.      disp      displacement
  3654.      disp8     8-bit displacement
  3655.      disp12    12-bit displacement
  3656.      
  3657.      add #imm,Rn                    lds.l @Rn+,PR
  3658.      add Rm,Rn                      mac.w @Rm+,@Rn+
  3659.      addc Rm,Rn                     mov #imm,Rn
  3660.      addv Rm,Rn                     mov Rm,Rn
  3661.      and #imm,R0                    mov.b Rm,@(R0,Rn)
  3662.      and Rm,Rn                      mov.b Rm,@-Rn
  3663.      and.b #imm,@(R0,GBR)           mov.b Rm,@Rn
  3664.      bf disp8                       mov.b @(disp,Rm),R0
  3665.      bra disp12                     mov.b @(disp,GBR),R0
  3666.      bsr disp12                     mov.b @(R0,Rm),Rn
  3667.      bt disp8                       mov.b @Rm+,Rn
  3668.      clrm                           mov.b @Rm,Rn
  3669.      clrt                           mov.b R0,@(disp,Rm)
  3670.      cmp/eq #imm,R0                 mov.b R0,@(disp,GBR)
  3671.      cmp/eq Rm,Rn                   mov.l Rm,@(disp,Rn)
  3672.      cmp/ge Rm,Rn                   mov.l Rm,@(R0,Rn)
  3673.      cmp/gt Rm,Rn                   mov.l Rm,@-Rn
  3674.      cmp/hi Rm,Rn                   mov.l Rm,@Rn
  3675.      cmp/hs Rm,Rn                   mov.l @(disp,Rn),Rm
  3676.      cmp/pl Rn                      mov.l @(disp,GBR),R0
  3677.      cmp/pz Rn                      mov.l @(disp,PC),Rn
  3678.      cmp/str Rm,Rn                  mov.l @(R0,Rm),Rn
  3679.      div0s Rm,Rn                    mov.l @Rm+,Rn
  3680.      div0u                          mov.l @Rm,Rn
  3681.      div1 Rm,Rn                     mov.l R0,@(disp,GBR)
  3682.      exts.b Rm,Rn                   mov.w Rm,@(R0,Rn)
  3683.      exts.w Rm,Rn                   mov.w Rm,@-Rn
  3684.      extu.b Rm,Rn                   mov.w Rm,@Rn
  3685.      extu.w Rm,Rn                   mov.w @(disp,Rm),R0
  3686.      jmp @Rn                        mov.w @(disp,GBR),R0
  3687.      jsr @Rn                        mov.w @(disp,PC),Rn
  3688.      ldc Rn,GBR                     mov.w @(R0,Rm),Rn
  3689.      ldc Rn,SR                      mov.w @Rm+,Rn
  3690.      ldc Rn,VBR                     mov.w @Rm,Rn
  3691.      ldc.l @Rn+,GBR                 mov.w R0,@(disp,Rm)
  3692.      ldc.l @Rn+,SR                  mov.w R0,@(disp,GBR)
  3693.      ldc.l @Rn+,VBR                 mova @(disp,PC),R0
  3694.      lds Rn,MACH                    movt Rn
  3695.      lds Rn,MACL                    muls Rm,Rn
  3696.      lds Rn,PR                      mulu Rm,Rn
  3697.      lds.l @Rn+,MACH                neg Rm,Rn
  3698.      lds.l @Rn+,MACL                negc Rm,Rn
  3699.      
  3700.      nop                            stc VBR,Rn
  3701.      not Rm,Rn                      stc.l GBR,@-Rn
  3702.      or #imm,R0                     stc.l SR,@-Rn
  3703.      or Rm,Rn                       stc.l VBR,@-Rn
  3704.      or.b #imm,@(R0,GBR)            sts MACH,Rn
  3705.      rotcl Rn                       sts MACL,Rn
  3706.      rotcr Rn                       sts PR,Rn
  3707.      rotl Rn                        sts.l MACH,@-Rn
  3708.      rotr Rn                        sts.l MACL,@-Rn
  3709.      rte                            sts.l PR,@-Rn
  3710.      rts                            sub Rm,Rn
  3711.      sett                           subc Rm,Rn
  3712.      shal Rn                        subv Rm,Rn
  3713.      shar Rn                        swap.b Rm,Rn
  3714.      shll Rn                        swap.w Rm,Rn
  3715.      shll16 Rn                      tas.b @Rn
  3716.      shll2 Rn                       trapa #imm
  3717.      shll8 Rn                       tst #imm,R0
  3718.      shlr Rn                        tst Rm,Rn
  3719.      shlr16 Rn                      tst.b #imm,@(R0,GBR)
  3720.      shlr2 Rn                       xor #imm,R0
  3721.      shlr8 Rn                       xor Rm,Rn
  3722.      sleep                          xor.b #imm,@(R0,GBR)
  3723.      stc GBR,Rn                     xtrct Rm,Rn
  3724.      stc SR,Rn
  3725.  
  3726. 
  3727. File: as,  Node: i960-Dependent,  Next: M68K-Dependent,  Prev: SH-Dependent,  Up: Machine Dependencies
  3728.  
  3729. Intel 80960 Dependent Features
  3730. ==============================
  3731.  
  3732. * Menu:
  3733.  
  3734. * Options-i960::                i960 Command-line Options
  3735. * Floating Point-i960::         Floating Point
  3736. * Directives-i960::             i960 Machine Directives
  3737. * Opcodes for i960::            i960 Opcodes
  3738.  
  3739. 
  3740. File: as,  Node: Options-i960,  Next: Floating Point-i960,  Up: i960-Dependent
  3741.  
  3742. i960 Command-line Options
  3743. -------------------------
  3744.  
  3745. `-ACA | -ACA_A | -ACB | -ACC | -AKA | -AKB | -AKC | -AMC'
  3746.      Select the 80960 architecture.  Instructions or features not
  3747.      supported by the selected architecture cause fatal errors.
  3748.  
  3749.      `-ACA' is equivalent to `-ACA_A'; `-AKC' is equivalent to `-AMC'.
  3750.      Synonyms are provided for compatibility with other tools.
  3751.  
  3752.      If none of these options is specified, `as' will generate code for
  3753.      any instruction or feature that is supported by *some* version of
  3754.      the 960 (even if this means mixing architectures!).  In principle,
  3755.      `as' will attempt to deduce the minimal sufficient processor type
  3756.      if none is specified; depending on the object code format, the
  3757.      processor type may be recorded in the object file.  If it is
  3758.      critical that the `as' output match a specific architecture,
  3759.      specify that architecture explicitly.
  3760.  
  3761. `-b'
  3762.      Add code to collect information about conditional branches taken,
  3763.      for later optimization using branch prediction bits.  (The
  3764.      conditional branch instructions have branch prediction bits in the
  3765.      CA, CB, and CC architectures.)  If BR represents a conditional
  3766.      branch instruction, the following represents the code generated by
  3767.      the assembler when `-b' is specified:
  3768.  
  3769.                   call    INCREMENT ROUTINE
  3770.                   .word   0       # pre-counter
  3771.           Label:  BR
  3772.                   call    INCREMENT ROUTINE
  3773.                   .word   0       # post-counter
  3774.  
  3775.      The counter following a branch records the number of times that
  3776.      branch was *not* taken; the differenc between the two counters is
  3777.      the number of times the branch *was* taken.
  3778.  
  3779.      A table of every such `Label' is also generated, so that the
  3780.      external postprocessor `gbr960' (supplied by Intel) can locate all
  3781.      the counters.  This table is always labelled `__BRANCH_TABLE__';
  3782.      this is a local symbol to permit collecting statistics for many
  3783.      separate object files.  The table is word aligned, and begins with
  3784.      a two-word header.  The first word, initialized to 0, is used in
  3785.      maintaining linked lists of branch tables.  The second word is a
  3786.      count of the number of entries in the table, which follow
  3787.      immediately: each is a word, pointing to one of the labels
  3788.      illustrated above.
  3789.  
  3790.            +------------+------------+------------+ ... +------------+
  3791.            |            |            |            |     |            |
  3792.            |  *NEXT     |  COUNT: N  | *BRLAB 1   |     | *BRLAB N   |
  3793.            |            |            |            |     |            |
  3794.            +------------+------------+------------+ ... +------------+
  3795.           
  3796.                          __BRANCH_TABLE__ layout
  3797.  
  3798.      The first word of the header is used to locate multiple branch
  3799.      tables, since each object file may contain one. Normally the links
  3800.      are maintained with a call to an initialization routine, placed at
  3801.      the beginning of each function in the file.  The GNU C compiler
  3802.      will generate these calls automatically when you give it a `-b'
  3803.      option.  For further details, see the documentation of `gbr960'.
  3804.  
  3805. `-norelax'
  3806.      Normally, Compare-and-Branch instructions with targets that require
  3807.      displacements greater than 13 bits (or that have external targets)
  3808.      are replaced with the corresponding compare (or `chkbit') and
  3809.      branch instructions.  You can use the `-norelax' option to specify
  3810.      that `as' should generate errors instead, if the target
  3811.      displacement is larger than 13 bits.
  3812.  
  3813.      This option does not affect the Compare-and-Jump instructions; the
  3814.      code emitted for them is *always* adjusted when necessary
  3815.      (depending on displacement size), regardless of whether you use
  3816.      `-norelax'.
  3817.  
  3818. 
  3819. File: as,  Node: Floating Point-i960,  Next: Directives-i960,  Prev: Options-i960,  Up: i960-Dependent
  3820.  
  3821. Floating Point
  3822. --------------
  3823.  
  3824.    `as' generates IEEE floating-point numbers for the directives
  3825. `.float', `.double', `.extended', and `.single'.
  3826.  
  3827. 
  3828. File: as,  Node: Directives-i960,  Next: Opcodes for i960,  Prev: Floating Point-i960,  Up: i960-Dependent
  3829.  
  3830. i960 Machine Directives
  3831. -----------------------
  3832.  
  3833. `.bss SYMBOL, LENGTH, ALIGN'
  3834.      Reserve LENGTH bytes in the bss section for a local SYMBOL,
  3835.      aligned to the power of two specified by ALIGN.  LENGTH and ALIGN
  3836.      must be positive absolute expressions.  This directive differs
  3837.      from `.lcomm' only in that it permits you to specify an alignment.
  3838.      *Note `.lcomm': Lcomm.
  3839.  
  3840. `.extended FLONUMS'
  3841.      `.extended' expects zero or more flonums, separated by commas; for
  3842.      each flonum, `.extended' emits an IEEE extended-format (80-bit)
  3843.      floating-point number.
  3844.  
  3845. `.leafproc CALL-LAB, BAL-LAB'
  3846.      You can use the `.leafproc' directive in conjunction with the
  3847.      optimized `callj' instruction to enable faster calls of leaf
  3848.      procedures.  If a procedure is known to call no other procedures,
  3849.      you may define an entry point that skips procedure prolog code
  3850.      (and that does not depend on system-supplied saved context), and
  3851.      declare it as the BAL-LAB using `.leafproc'.  If the procedure
  3852.      also has an entry point that goes through the normal prolog, you
  3853.      can specify that entry point as CALL-LAB.
  3854.  
  3855.      A `.leafproc' declaration is meant for use in conjunction with the
  3856.      optimized call instruction `callj'; the directive records the data
  3857.      needed later to choose between converting the `callj' into a `bal'
  3858.      or a `call'.
  3859.  
  3860.      CALL-LAB is optional; if only one argument is present, or if the
  3861.      two arguments are identical, the single argument is assumed to be
  3862.      the `bal' entry point.
  3863.  
  3864. `.sysproc NAME, INDEX'
  3865.      The `.sysproc' directive defines a name for a system procedure.
  3866.      After you define it using `.sysproc', you can use NAME to refer to
  3867.      the system procedure identified by INDEX when calling procedures
  3868.      with the optimized call instruction `callj'.
  3869.  
  3870.      Both arguments are required; INDEX must be between 0 and 31
  3871.      (inclusive).
  3872.  
  3873. 
  3874. File: as,  Node: Opcodes for i960,  Prev: Directives-i960,  Up: i960-Dependent
  3875.  
  3876. i960 Opcodes
  3877. ------------
  3878.  
  3879.    All Intel 960 machine instructions are supported; *note i960
  3880. Command-line Options: Options-i960. for a discussion of selecting the
  3881. instruction subset for a particular 960 architecture.
  3882.  
  3883.    Some opcodes are processed beyond simply emitting a single
  3884. corresponding instruction: `callj', and Compare-and-Branch or
  3885. Compare-and-Jump instructions with target displacements larger than 13
  3886. bits.
  3887.  
  3888. * Menu:
  3889.  
  3890. * callj-i960::                  `callj'
  3891. * Compare-and-branch-i960::     Compare-and-Branch
  3892.  
  3893. 
  3894. File: as,  Node: callj-i960,  Next: Compare-and-branch-i960,  Up: Opcodes for i960
  3895.  
  3896. `callj'
  3897. .......
  3898.  
  3899.    You can write `callj' to have the assembler or the linker determine
  3900. the most appropriate form of subroutine call: `call', `bal', or
  3901. `calls'.  If the assembly source contains enough information--a
  3902. `.leafproc' or `.sysproc' directive defining the operand--then `as'
  3903. will translate the `callj'; if not, it will simply emit the `callj',
  3904. leaving it for the linker to resolve.
  3905.  
  3906. 
  3907. File: as,  Node: Compare-and-branch-i960,  Prev: callj-i960,  Up: Opcodes for i960
  3908.  
  3909. Compare-and-Branch
  3910. ..................
  3911.  
  3912.    The 960 architectures provide combined Compare-and-Branch
  3913. instructions that permit you to store the branch target in the lower 13
  3914. bits of the instruction word itself.  However, if you specify a branch
  3915. target far enough away that its address won't fit in 13 bits, the
  3916. assembler can either issue an error, or convert your Compare-and-Branch
  3917. instruction into separate instructions to do the compare and the branch.
  3918.  
  3919.    Whether `as' gives an error or expands the instruction depends on
  3920. two choices you can make: whether you use the `-norelax' option, and
  3921. whether you use a "Compare and Branch" instruction or a "Compare and
  3922. Jump" instruction.  The "Jump" instructions are *always* expanded if
  3923. necessary; the "Branch" instructions are expanded when necessary
  3924. *unless* you specify `-norelax'--in which case `as' gives an error
  3925. instead.
  3926.  
  3927.    These are the Compare-and-Branch instructions, their "Jump" variants,
  3928. and the instruction pairs they may expand into:
  3929.  
  3930.              Compare and
  3931.           Branch      Jump       Expanded to
  3932.           ------    ------       ------------
  3933.              bbc                 chkbit; bno
  3934.              bbs                 chkbit; bo
  3935.           cmpibe    cmpije       cmpi; be
  3936.           cmpibg    cmpijg       cmpi; bg
  3937.          cmpibge   cmpijge       cmpi; bge
  3938.           cmpibl    cmpijl       cmpi; bl
  3939.          cmpible   cmpijle       cmpi; ble
  3940.          cmpibno   cmpijno       cmpi; bno
  3941.          cmpibne   cmpijne       cmpi; bne
  3942.           cmpibo    cmpijo       cmpi; bo
  3943.           cmpobe    cmpoje       cmpo; be
  3944.           cmpobg    cmpojg       cmpo; bg
  3945.          cmpobge   cmpojge       cmpo; bge
  3946.           cmpobl    cmpojl       cmpo; bl
  3947.          cmpoble   cmpojle       cmpo; ble
  3948.          cmpobne   cmpojne       cmpo; bne
  3949.  
  3950. 
  3951. File: as,  Node: M68K-Dependent,  Next: Sparc-Dependent,  Prev: i960-Dependent,  Up: Machine Dependencies
  3952.  
  3953. M680x0 Dependent Features
  3954. =========================
  3955.  
  3956. * Menu:
  3957.  
  3958. * M68K-Opts::                   M680x0 Options
  3959. * M68K-Syntax::                 Syntax
  3960. * M68K-Moto-Syntax::            Motorola Syntax
  3961. * M68K-Float::                  Floating Point
  3962. * M68K-Directives::             680x0 Machine Directives
  3963. * M68K-opcodes::                Opcodes
  3964.  
  3965. 
  3966. File: as,  Node: M68K-Opts,  Next: M68K-Syntax,  Up: M68K-Dependent
  3967.  
  3968. M680x0 Options
  3969. --------------
  3970.  
  3971.    The Motorola 680x0 version of `as' has two machine dependent options.
  3972. One shortens undefined references from 32 to 16 bits, while the other
  3973. is used to tell `as' what kind of machine it is assembling for.
  3974.  
  3975.    You can use the `-l' option to shorten the size of references to
  3976. undefined symbols.  If the `-l' option is not given, references to
  3977. undefined symbols will be a full long (32 bits) wide.  (Since `as'
  3978. cannot know where these symbols will end up, `as' can only allocate
  3979. space for the linker to fill in later.  Since `as' doesn't know how far
  3980. away these symbols will be, it allocates as much space as it can.) If
  3981. this option is given, the references will only be one word wide (16
  3982. bits).  This may be useful if you want the object file to be as small as
  3983. possible, and you know that the relevant symbols will be less than 17
  3984. bits away.
  3985.  
  3986.    The 680x0 version of `as' is most frequently used to assemble
  3987. programs for the Motorola MC68020 microprocessor.  Occasionally it is
  3988. used to assemble programs for the mostly similar, but slightly different
  3989. MC68000 or MC68010 microprocessors.  You can give `as' the options
  3990. `-m68000', `-mc68000', `-m68010', `-mc68010', `-m68020', and `-mc68020'
  3991. to tell it what processor is the target.
  3992.  
  3993. 
  3994. File: as,  Node: M68K-Syntax,  Next: M68K-Moto-Syntax,  Prev: M68K-Opts,  Up: M68K-Dependent
  3995.  
  3996. Syntax
  3997. ------
  3998.  
  3999.    This syntax for the Motorola 680x0 was developed at MIT.
  4000.  
  4001.    The 680x0 version of `as' uses syntax similar to the Sun assembler.
  4002. Intervening periods are now ignored; for example, `movl' is equivalent
  4003. to `move.l'.
  4004.  
  4005.    In the following table "apc" stands for any of the address registers
  4006. (`a0' through `a7'), nothing, (`'), the Program Counter (`pc'), or the
  4007. zero-address relative to the program counter (`zpc').
  4008.  
  4009.    The following addressing modes are understood:
  4010. "Immediate"
  4011.      `#DIGITS'
  4012.  
  4013. "Data Register"
  4014.      `d0' through `d7'
  4015.  
  4016. "Address Register"
  4017.      `a0' through `a7'
  4018.  
  4019. "Address Register Indirect"
  4020.      `a0@' through `a7@'
  4021.      `a7' is also known as `sp', i.e. the Stack Pointer.  `a6' is also
  4022.      known as `fp', the Frame Pointer.
  4023.  
  4024. "Address Register Postincrement"
  4025.      `a0@+' through `a7@+'
  4026.  
  4027. "Address Register Predecrement"
  4028.      `a0@-' through `a7@-'
  4029.  
  4030. "Indirect Plus Offset"
  4031.      `APC@(DIGITS)'
  4032.  
  4033. "Index"
  4034.      `APC@(DIGITS,REGISTER:SIZE:SCALE)'
  4035.  
  4036.      or `APC@(REGISTER:SIZE:SCALE)'
  4037.  
  4038. "Postindex"
  4039.      `APC@(DIGITS)@(DIGITS,REGISTER:SIZE:SCALE)'
  4040.  
  4041.      or `APC@(DIGITS)@(REGISTER:SIZE:SCALE)'
  4042.  
  4043. "Preindex"
  4044.      `APC@(DIGITS,REGISTER:SIZE:SCALE)@(DIGITS)'
  4045.  
  4046.      or `APC@(REGISTER:SIZE:SCALE)@(DIGITS)'
  4047.  
  4048. "Memory Indirect"
  4049.      `APC@(DIGITS)@(DIGITS)'
  4050.  
  4051. "Absolute"
  4052.      `SYMBOL', or `DIGITS'
  4053.  
  4054.    For some configurations, especially those where the compiler normally
  4055. does not prepend an underscore to the names of user variables, the
  4056. assembler requires a `%' before any use of a register name.  This is
  4057. intended to let the assembler distinguish between user variables and
  4058. registers named `a0' through `a7', et cetera.  The `%' is always
  4059. accepted, but is only required for some configurations, notably
  4060. `m68k-coff'.
  4061.  
  4062. 
  4063. File: as,  Node: M68K-Moto-Syntax,  Next: M68K-Float,  Prev: M68K-Syntax,  Up: M68K-Dependent
  4064.  
  4065. Motorola Syntax
  4066. ---------------
  4067.  
  4068.    The standard Motorola syntax for this chip differs from the syntax
  4069. already discussed (*note Syntax: M68K-Syntax.).  `as' can accept both
  4070. kinds of syntax, even within a single instruction.  The syntaxes are
  4071. fully compatible, because the Motorola syntax never uses the `@'
  4072. character and the MIT syntax always does, except in cases where the
  4073. syntaxes are identical.
  4074.  
  4075.    In particular, you may write or generate M68K assembler with the
  4076. following conventions:
  4077.  
  4078.    (In the following table "apc" stands for any of the address
  4079. registers (`a0' through `a7'), nothing, (`'), the Program Counter
  4080. (`pc'), or the zero-address relative to the program counter (`zpc').)
  4081.  
  4082.    The following additional addressing modes are understood:
  4083. "Address Register Indirect"
  4084.      `a0' through `a7'
  4085.      `a7' is also known as `sp', i.e. the Stack Pointer.  `a6' is also
  4086.      known as `fp', the Frame Pointer.
  4087.  
  4088. "Address Register Postincrement"
  4089.      `(a0)+' through `(a7)+'
  4090.  
  4091. "Address Register Predecrement"
  4092.      `-(a0)' through `-(a7)'
  4093.  
  4094. "Indirect Plus Offset"
  4095.      `DIGITS(APC)'
  4096.  
  4097. "Index"
  4098.      `DIGITS(APC,(REGISTER.SIZE*SCALE)'
  4099.      or `(APC,REGISTER.SIZE*SCALE)'
  4100.      In either case, SIZE and SCALE are optional (SCALE defaults to
  4101.      `1', SIZE defaults to `l').   SCALE can be `1', `2', `4', or `8'.
  4102.      SIZE can be `w' or `l'.  SCALE is only supported on the 68020 and
  4103.      greater.
  4104.  
  4105. 
  4106. File: as,  Node: M68K-Float,  Next: M68K-Directives,  Prev: M68K-Moto-Syntax,  Up: M68K-Dependent
  4107.  
  4108. Floating Point
  4109. --------------
  4110.  
  4111.    The floating point code is not too well tested, and may have subtle
  4112. bugs in it.
  4113.  
  4114.    Packed decimal (P) format floating literals are not supported.  Feel
  4115. free to add the code!
  4116.  
  4117.    The floating point formats generated by directives are these.
  4118.  
  4119. `.float'
  4120.      `Single' precision floating point constants.
  4121.  
  4122. `.double'
  4123.      `Double' precision floating point constants.
  4124.  
  4125.    There is no directive to produce regions of memory holding extended
  4126. precision numbers, however they can be used as immediate operands to
  4127. floating-point instructions.  Adding a directive to create extended
  4128. precision numbers would not be hard, but it has not yet seemed
  4129. necessary.
  4130.  
  4131. 
  4132. File: as,  Node: M68K-Directives,  Next: M68K-opcodes,  Prev: M68K-Float,  Up: M68K-Dependent
  4133.  
  4134. 680x0 Machine Directives
  4135. ------------------------
  4136.  
  4137.    In order to be compatible with the Sun assembler the 680x0 assembler
  4138. understands the following directives.
  4139.  
  4140. `.data1'
  4141.      This directive is identical to a `.data 1' directive.
  4142.  
  4143. `.data2'
  4144.      This directive is identical to a `.data 2' directive.
  4145.  
  4146. `.even'
  4147.      This directive is identical to a `.align 1' directive.
  4148.  
  4149. `.skip'
  4150.      This directive is identical to a `.space' directive.
  4151.  
  4152. 
  4153. File: as,  Node: M68K-opcodes,  Prev: M68K-Directives,  Up: M68K-Dependent
  4154.  
  4155. Opcodes
  4156. -------
  4157.  
  4158. * Menu:
  4159.  
  4160. * M68K-Branch::                 Branch Improvement
  4161. * M68K-Chars::                  Special Characters
  4162.  
  4163. 
  4164. File: as,  Node: M68K-Branch,  Next: M68K-Chars,  Up: M68K-opcodes
  4165.  
  4166. Branch Improvement
  4167. ..................
  4168.  
  4169.    Certain pseudo opcodes are permitted for branch instructions.  They
  4170. expand to the shortest branch instruction that will reach the target.
  4171. Generally these mnemonics are made by substituting `j' for `b' at the
  4172. start of a Motorola mnemonic.
  4173.  
  4174.    The following table summarizes the pseudo-operations.  A `*' flags
  4175. cases that are more fully described after the table:
  4176.  
  4177.                Displacement
  4178.                +-------------------------------------------------
  4179.                |                68020   68000/10
  4180.      Pseudo-Op |BYTE    WORD    LONG    LONG      non-PC relative
  4181.                +-------------------------------------------------
  4182.           jbsr |bsrs    bsr     bsrl    jsr       jsr
  4183.            jra |bras    bra     bral    jmp       jmp
  4184.      *     jXX |bXXs    bXX     bXXl    bNXs;jmpl bNXs;jmp
  4185.      *    dbXX |dbXX    dbXX        dbXX; bra; jmpl
  4186.      *    fjXX |fbXXw   fbXXw   fbXXl             fbNXw;jmp
  4187.      
  4188.      XX: condition
  4189.      NX: negative of condition XX
  4190.  
  4191.                     `*'--see full description below
  4192.  
  4193. `jbsr'
  4194. `jra'
  4195.      These are the simplest jump pseudo-operations; they always map to
  4196.      one particular machine instruction, depending on the displacement
  4197.      to the branch target.
  4198.  
  4199. `jXX'
  4200.      Here, `jXX' stands for an entire family of pseudo-operations,
  4201.      where XX is a conditional branch or condition-code test.  The full
  4202.      list of pseudo-ops in this family is:
  4203.            jhi   jls   jcc   jcs   jne   jeq   jvc
  4204.            jvs   jpl   jmi   jge   jlt   jgt   jle
  4205.  
  4206.      For the cases of non-PC relative displacements and long
  4207.      displacements on the 68000 or 68010, `as' will issue a longer code
  4208.      fragment in terms of NX, the opposite condition to XX.  For
  4209.      example, for the non-PC relative case:
  4210.               jXX foo
  4211.      gives
  4212.                bNXs oof
  4213.                jmp foo
  4214.            oof:
  4215.  
  4216. `dbXX'
  4217.      The full family of pseudo-operations covered here is
  4218.            dbhi   dbls   dbcc   dbcs   dbne   dbeq   dbvc
  4219.            dbvs   dbpl   dbmi   dbge   dblt   dbgt   dble
  4220.            dbf    dbra   dbt
  4221.  
  4222.      Other than for word and byte displacements, when the source reads
  4223.      `dbXX foo', `as' will emit
  4224.                dbXX oo1
  4225.                bra oo2
  4226.            oo1:jmpl foo
  4227.            oo2:
  4228.  
  4229. `fjXX'
  4230.      This family includes
  4231.            fjne   fjeq   fjge   fjlt   fjgt   fjle   fjf
  4232.            fjt    fjgl   fjgle  fjnge  fjngl  fjngle fjngt
  4233.            fjnle  fjnlt  fjoge  fjogl  fjogt  fjole  fjolt
  4234.            fjor   fjseq  fjsf   fjsne  fjst   fjueq  fjuge
  4235.            fjugt  fjule  fjult  fjun
  4236.  
  4237.      For branch targets that are not PC relative, `as' emits
  4238.                fbNX oof
  4239.                jmp foo
  4240.            oof:
  4241.      when it encounters `fjXX foo'.
  4242.  
  4243. 
  4244. File: as,  Node: M68K-Chars,  Prev: M68K-Branch,  Up: M68K-opcodes
  4245.  
  4246. Special Characters
  4247. ..................
  4248.  
  4249.    The immediate character is `#' for Sun compatibility.  The
  4250. line-comment character is `|'.  If a `#' appears at the beginning of a
  4251. line, it is treated as a comment unless it looks like `# line file', in
  4252. which case it is treated normally.
  4253.  
  4254. 
  4255. File: as,  Node: Sparc-Dependent,  Next: Z8000-Dependent,  Prev: M68K-Dependent,  Up: Machine Dependencies
  4256.  
  4257. SPARC Dependent Features
  4258. ========================
  4259.  
  4260. * Menu:
  4261.  
  4262. * Sparc-Opts::                  Options
  4263. * Sparc-Float::                 Floating Point
  4264. * Sparc-Directives::            Sparc Machine Directives
  4265.  
  4266. 
  4267. File: as,  Node: Sparc-Opts,  Next: Sparc-Float,  Up: Sparc-Dependent
  4268.  
  4269. Options
  4270. -------
  4271.  
  4272.    The SPARC chip family includes several successive levels (or other
  4273. variants) of chip, using the same core instruction set, but including a
  4274. few additional instructions at each level.
  4275.  
  4276.    By default, `as' assumes the core instruction set (SPARC v6), but
  4277. "bumps" the architecture level as needed: it switches to successively
  4278. higher architectures as it encounters instructions that only exist in
  4279. the higher levels.
  4280.  
  4281. `-Av6 | -Av7 | -Av8 | -Asparclite'
  4282.      Use one of the `-A' options to select one of the SPARC
  4283.      architectures explicitly.  If you select an architecture
  4284.      explicitly, `as' reports a fatal error if it encounters an
  4285.      instruction or feature requiring a higher level.
  4286.  
  4287. `-bump'
  4288.      Permit the assembler to "bump" the architecture level as required,
  4289.      but warn whenever it is necessary to switch to another level.
  4290.  
  4291. 
  4292. File: as,  Node: Sparc-Float,  Next: Sparc-Directives,  Prev: Sparc-Opts,  Up: Sparc-Dependent
  4293.  
  4294. Floating Point
  4295. --------------
  4296.  
  4297.    The Sparc uses IEEE floating-point numbers.
  4298.  
  4299. 
  4300. File: as,  Node: Sparc-Directives,  Prev: Sparc-Float,  Up: Sparc-Dependent
  4301.  
  4302. Sparc Machine Directives
  4303. ------------------------
  4304.  
  4305.    The Sparc version of `as' supports the following additional machine
  4306. directives:
  4307.  
  4308. `.common'
  4309.      This must be followed by a symbol name, a positive number, and
  4310.      `"bss"'.  This behaves somewhat like `.comm', but the syntax is
  4311.      different.
  4312.  
  4313. `.half'
  4314.      This is functionally identical to `.short'.
  4315.  
  4316. `.proc'
  4317.      This directive is ignored.  Any text following it on the same line
  4318.      is also ignored.
  4319.  
  4320. `.reserve'
  4321.      This must be followed by a symbol name, a positive number, and
  4322.      `"bss"'.  This behaves somewhat like `.lcomm', but the syntax is
  4323.      different.
  4324.  
  4325. `.seg'
  4326.      This must be followed by `"text"', `"data"', or `"data1"'.  It
  4327.      behaves like `.text', `.data', or `.data 1'.
  4328.  
  4329. `.skip'
  4330.      This is functionally identical to the `.space' directive.
  4331.  
  4332. `.word'
  4333.      On the Sparc, the .word directive produces 32 bit values, instead
  4334.      of the 16 bit values it produces on many other machines.
  4335.  
  4336. 
  4337. File: as,  Node: i386-Dependent,  Prev: Z8000-Dependent,  Up: Machine Dependencies
  4338.  
  4339. 80386 Dependent Features
  4340. ========================
  4341.  
  4342. * Menu:
  4343.  
  4344. * i386-Options::                Options
  4345. * i386-Syntax::                 AT&T Syntax versus Intel Syntax
  4346. * i386-Opcodes::                Opcode Naming
  4347. * i386-Regs::                   Register Naming
  4348. * i386-prefixes::               Opcode Prefixes
  4349. * i386-Memory::                 Memory References
  4350. * i386-jumps::                  Handling of Jump Instructions
  4351. * i386-Float::                  Floating Point
  4352. * i386-Notes::                  Notes
  4353.  
  4354. 
  4355. File: as,  Node: i386-Options,  Next: i386-Syntax,  Up: i386-Dependent
  4356.  
  4357. Options
  4358. -------
  4359.  
  4360.    The 80386 has no machine dependent options.
  4361.  
  4362. 
  4363. File: as,  Node: i386-Syntax,  Next: i386-Opcodes,  Prev: i386-Options,  Up: i386-Dependent
  4364.  
  4365. AT&T Syntax versus Intel Syntax
  4366. -------------------------------
  4367.  
  4368.    In order to maintain compatibility with the output of `gcc', `as'
  4369. supports AT&T System V/386 assembler syntax.  This is quite different
  4370. from Intel syntax.  We mention these differences because almost all
  4371. 80386 documents used only Intel syntax.  Notable differences between
  4372. the two syntaxes are:
  4373.  
  4374.    * AT&T immediate operands are preceded by `$'; Intel immediate
  4375.      operands are undelimited (Intel `push 4' is AT&T `pushl $4').
  4376.      AT&T register operands are preceded by `%'; Intel register operands
  4377.      are undelimited.  AT&T absolute (as opposed to PC relative)
  4378.      jump/call operands are prefixed by `*'; they are undelimited in
  4379.      Intel syntax.
  4380.  
  4381.    * AT&T and Intel syntax use the opposite order for source and
  4382.      destination operands.  Intel `add eax, 4' is `addl $4, %eax'.  The
  4383.      `source, dest' convention is maintained for compatibility with
  4384.      previous Unix assemblers.
  4385.  
  4386.    * In AT&T syntax the size of memory operands is determined from the
  4387.      last character of the opcode name.  Opcode suffixes of `b', `w',
  4388.      and `l' specify byte (8-bit), word (16-bit), and long (32-bit)
  4389.      memory references.  Intel syntax accomplishes this by prefixes
  4390.      memory operands (*not* the opcodes themselves) with `byte ptr',
  4391.      `word ptr', and `dword ptr'.  Thus, Intel `mov al, byte ptr FOO'
  4392.      is `movb FOO, %al' in AT&T syntax.
  4393.  
  4394.    * Immediate form long jumps and calls are `lcall/ljmp $SECTION,
  4395.      $OFFSET' in AT&T syntax; the Intel syntax is `call/jmp far
  4396.      SECTION:OFFSET'.  Also, the far return instruction is `lret
  4397.      $STACK-ADJUST' in AT&T syntax; Intel syntax is `ret far
  4398.      STACK-ADJUST'.
  4399.  
  4400.    * The AT&T assembler does not provide support for multiple section
  4401.      programs.  Unix style systems expect all programs to be single
  4402.      sections.
  4403.  
  4404. 
  4405. File: as,  Node: i386-Opcodes,  Next: i386-Regs,  Prev: i386-Syntax,  Up: i386-Dependent
  4406.  
  4407. Opcode Naming
  4408. -------------
  4409.  
  4410.    Opcode names are suffixed with one character modifiers which specify
  4411. the size of operands.  The letters `b', `w', and `l' specify byte,
  4412. word, and long operands.  If no suffix is specified by an instruction
  4413. and it contains no memory operands then `as' tries to fill in the
  4414. missing suffix based on the destination register operand (the last one
  4415. by convention).  Thus, `mov %ax, %bx' is equivalent to `movw %ax, %bx';
  4416. also, `mov $1, %bx' is equivalent to `movw $1, %bx'.  Note that this is
  4417. incompatible with the AT&T Unix assembler which assumes that a missing
  4418. opcode suffix implies long operand size.  (This incompatibility does
  4419. not affect compiler output since compilers always explicitly specify
  4420. the opcode suffix.)
  4421.  
  4422.    Almost all opcodes have the same names in AT&T and Intel format.
  4423. There are a few exceptions.  The sign extend and zero extend
  4424. instructions need two sizes to specify them.  They need a size to
  4425. sign/zero extend *from* and a size to zero extend *to*.  This is
  4426. accomplished by using two opcode suffixes in AT&T syntax.  Base names
  4427. for sign extend and zero extend are `movs...' and `movz...' in AT&T
  4428. syntax (`movsx' and `movzx' in Intel syntax).  The opcode suffixes are
  4429. tacked on to this base name, the *from* suffix before the *to* suffix.
  4430. Thus, `movsbl %al, %edx' is AT&T syntax for "move sign extend *from*
  4431. %al *to* %edx."  Possible suffixes, thus, are `bl' (from byte to long),
  4432. `bw' (from byte to word), and `wl' (from word to long).
  4433.  
  4434.    The Intel-syntax conversion instructions
  4435.  
  4436.    * `cbw' -- sign-extend byte in `%al' to word in `%ax',
  4437.  
  4438.    * `cwde' -- sign-extend word in `%ax' to long in `%eax',
  4439.  
  4440.    * `cwd' -- sign-extend word in `%ax' to long in `%dx:%ax',
  4441.  
  4442.    * `cdq' -- sign-extend dword in `%eax' to quad in `%edx:%eax',
  4443.  
  4444. are called `cbtw', `cwtl', `cwtd', and `cltd' in AT&T naming.  `as'
  4445. accepts either naming for these instructions.
  4446.  
  4447.    Far call/jump instructions are `lcall' and `ljmp' in AT&T syntax,
  4448. but are `call far' and `jump far' in Intel convention.
  4449.  
  4450. 
  4451. File: as,  Node: i386-Regs,  Next: i386-prefixes,  Prev: i386-Opcodes,  Up: i386-Dependent
  4452.  
  4453. Register Naming
  4454. ---------------
  4455.  
  4456.    Register operands are always prefixes with `%'.  The 80386 registers
  4457. consist of
  4458.  
  4459.    * the 8 32-bit registers `%eax' (the accumulator), `%ebx', `%ecx',
  4460.      `%edx', `%edi', `%esi', `%ebp' (the frame pointer), and `%esp'
  4461.      (the stack pointer).
  4462.  
  4463.    * the 8 16-bit low-ends of these: `%ax', `%bx', `%cx', `%dx', `%di',
  4464.      `%si', `%bp', and `%sp'.
  4465.  
  4466.    * the 8 8-bit registers: `%ah', `%al', `%bh', `%bl', `%ch', `%cl',
  4467.      `%dh', and `%dl' (These are the high-bytes and low-bytes of `%ax',
  4468.      `%bx', `%cx', and `%dx')
  4469.  
  4470.    * the 6 section registers `%cs' (code section), `%ds' (data
  4471.      section), `%ss' (stack section), `%es', `%fs', and `%gs'.
  4472.  
  4473.    * the 3 processor control registers `%cr0', `%cr2', and `%cr3'.
  4474.  
  4475.    * the 6 debug registers `%db0', `%db1', `%db2', `%db3', `%db6', and
  4476.      `%db7'.
  4477.  
  4478.    * the 2 test registers `%tr6' and `%tr7'.
  4479.  
  4480.    * the 8 floating point register stack `%st' or equivalently
  4481.      `%st(0)', `%st(1)', `%st(2)', `%st(3)', `%st(4)', `%st(5)',
  4482.      `%st(6)', and `%st(7)'.
  4483.  
  4484. 
  4485. File: as,  Node: i386-prefixes,  Next: i386-Memory,  Prev: i386-Regs,  Up: i386-Dependent
  4486.  
  4487. Opcode Prefixes
  4488. ---------------
  4489.  
  4490.    Opcode prefixes are used to modify the following opcode.  They are
  4491. used to repeat string instructions, to provide section overrides, to
  4492. perform bus lock operations, and to give operand and address size
  4493. (16-bit operands are specified in an instruction by prefixing what would
  4494. normally be 32-bit operands with a "operand size" opcode prefix).
  4495. Opcode prefixes are usually given as single-line instructions with no
  4496. operands, and must directly precede the instruction they act upon.  For
  4497. example, the `scas' (scan string) instruction is repeated with:
  4498.              repne
  4499.              scas
  4500.  
  4501.    Here is a list of opcode prefixes:
  4502.  
  4503.    * Section override prefixes `cs', `ds', `ss', `es', `fs', `gs'.
  4504.      These are automatically added by specifying using the
  4505.      SECTION:MEMORY-OPERAND form for memory references.
  4506.  
  4507.    * Operand/Address size prefixes `data16' and `addr16' change 32-bit
  4508.      operands/addresses into 16-bit operands/addresses.  Note that
  4509.      16-bit addressing modes (i.e. 8086 and 80286 addressing modes) are
  4510.      not supported (yet).
  4511.  
  4512.    * The bus lock prefix `lock' inhibits interrupts during execution of
  4513.      the instruction it precedes.  (This is only valid with certain
  4514.      instructions; see a 80386 manual for details).
  4515.  
  4516.    * The wait for coprocessor prefix `wait' waits for the coprocessor
  4517.      to complete the current instruction.  This should never be needed
  4518.      for the 80386/80387 combination.
  4519.  
  4520.    * The `rep', `repe', and `repne' prefixes are added to string
  4521.      instructions to make them repeat `%ecx' times.
  4522.  
  4523. 
  4524. File: as,  Node: i386-Memory,  Next: i386-jumps,  Prev: i386-prefixes,  Up: i386-Dependent
  4525.  
  4526. Memory References
  4527. -----------------
  4528.  
  4529.    An Intel syntax indirect memory reference of the form
  4530.  
  4531.      SECTION:[BASE + INDEX*SCALE + DISP]
  4532.  
  4533. is translated into the AT&T syntax
  4534.  
  4535.      SECTION:DISP(BASE, INDEX, SCALE)
  4536.  
  4537. where BASE and INDEX are the optional 32-bit base and index registers,
  4538. DISP is the optional displacement, and SCALE, taking the values 1, 2,
  4539. 4, and 8, multiplies INDEX to calculate the address of the operand.  If
  4540. no SCALE is specified, SCALE is taken to be 1.  SECTION specifies the
  4541. optional section register for the memory operand, and may override the
  4542. default section register (see a 80386 manual for section register
  4543. defaults). Note that section overrides in AT&T syntax *must* have be
  4544. preceded by a `%'.  If you specify a section override which coincides
  4545. with the default section register, `as' will *not* output any section
  4546. register override prefixes to assemble the given instruction.  Thus,
  4547. section overrides can be specified to emphasize which section register
  4548. is used for a given memory operand.
  4549.  
  4550.    Here are some examples of Intel and AT&T style memory references:
  4551.  
  4552. AT&T: `-4(%ebp)', Intel:  `[ebp - 4]'
  4553.      BASE is `%ebp'; DISP is `-4'. SECTION is missing, and the default
  4554.      section is used (`%ss' for addressing with `%ebp' as the base
  4555.      register).  INDEX, SCALE are both missing.
  4556.  
  4557. AT&T: `foo(,%eax,4)', Intel: `[foo + eax*4]'
  4558.      INDEX is `%eax' (scaled by a SCALE 4); DISP is `foo'.  All other
  4559.      fields are missing.  The section register here defaults to `%ds'.
  4560.  
  4561. AT&T: `foo(,1)'; Intel `[foo]'
  4562.      This uses the value pointed to by `foo' as a memory operand.  Note
  4563.      that BASE and INDEX are both missing, but there is only *one* `,'.
  4564.      This is a syntactic exception.
  4565.  
  4566. AT&T: `%gs:foo'; Intel `gs:foo'
  4567.      This selects the contents of the variable `foo' with section
  4568.      register SECTION being `%gs'.
  4569.  
  4570.    Absolute (as opposed to PC relative) call and jump operands must be
  4571. prefixed with `*'.  If no `*' is specified, `as' will always choose PC
  4572. relative addressing for jump/call labels.
  4573.  
  4574.    Any instruction that has a memory operand *must* specify its size
  4575. (byte, word, or long) with an opcode suffix (`b', `w', or `l',
  4576. respectively).
  4577.  
  4578. 
  4579. File: as,  Node: i386-jumps,  Next: i386-Float,  Prev: i386-Memory,  Up: i386-Dependent
  4580.  
  4581. Handling of Jump Instructions
  4582. -----------------------------
  4583.  
  4584.    Jump instructions are always optimized to use the smallest possible
  4585. displacements.  This is accomplished by using byte (8-bit) displacement
  4586. jumps whenever the target is sufficiently close.  If a byte displacement
  4587. is insufficient a long (32-bit) displacement is used.  We do not support
  4588. word (16-bit) displacement jumps (i.e. prefixing the jump instruction
  4589. with the `addr16' opcode prefix), since the 80386 insists upon masking
  4590. `%eip' to 16 bits after the word displacement is added.
  4591.  
  4592.    Note that the `jcxz', `jecxz', `loop', `loopz', `loope', `loopnz'
  4593. and `loopne' instructions only come in byte displacements, so that it
  4594. is possible that use of these instructions (`gcc' does not use them)
  4595. will cause the assembler to print an error message (and generate
  4596. incorrect code).  The AT&T 80386 assembler tries to get around this
  4597. problem by expanding `jcxz foo' to
  4598.               jcxz cx_zero
  4599.               jmp cx_nonzero
  4600.      cx_zero: jmp foo
  4601.      cx_nonzero:
  4602.  
  4603. 
  4604. File: as,  Node: i386-Float,  Next: i386-Notes,  Prev: i386-jumps,  Up: i386-Dependent
  4605.  
  4606. Floating Point
  4607. --------------
  4608.  
  4609.    All 80387 floating point types except packed BCD are supported.
  4610. (BCD support may be added without much difficulty).  These data types
  4611. are 16-, 32-, and 64- bit integers, and single (32-bit), double
  4612. (64-bit), and extended (80-bit) precision floating point.  Each
  4613. supported type has an opcode suffix and a constructor associated with
  4614. it.  Opcode suffixes specify operand's data types.  Constructors build
  4615. these data types into memory.
  4616.  
  4617.    * Floating point constructors are `.float' or `.single', `.double',
  4618.      and `.tfloat' for 32-, 64-, and 80-bit formats.  These correspond
  4619.      to opcode suffixes `s', `l', and `t'.  `t' stands for temporary
  4620.      real, and that the 80387 only supports this format via the `fldt'
  4621.      (load temporary real to stack top) and `fstpt' (store temporary
  4622.      real and pop stack) instructions.
  4623.  
  4624.    * Integer constructors are `.word', `.long' or `.int', and `.quad'
  4625.      for the 16-, 32-, and 64-bit integer formats.  The corresponding
  4626.      opcode suffixes are `s' (single), `l' (long), and `q' (quad).  As
  4627.      with the temporary real format the 64-bit `q' format is only
  4628.      present in the `fildq' (load quad integer to stack top) and
  4629.      `fistpq' (store quad integer and pop stack) instructions.
  4630.  
  4631.    Register to register operations do not require opcode suffixes, so
  4632. that `fst %st, %st(1)' is equivalent to `fstl %st, %st(1)'.
  4633.  
  4634.    Since the 80387 automatically synchronizes with the 80386 `fwait'
  4635. instructions are almost never needed (this is not the case for the
  4636. 80286/80287 and 8086/8087 combinations).  Therefore, `as' suppresses
  4637. the `fwait' instruction whenever it is implicitly selected by one of
  4638. the `fn...' instructions.  For example, `fsave' and `fnsave' are
  4639. treated identically.  In general, all the `fn...' instructions are made
  4640. equivalent to `f...' instructions.  If `fwait' is desired it must be
  4641. explicitly coded.
  4642.  
  4643. 
  4644. File: as,  Node: i386-Notes,  Prev: i386-Float,  Up: i386-Dependent
  4645.  
  4646. Notes
  4647. -----
  4648.  
  4649.    There is some trickery concerning the `mul' and `imul' instructions
  4650. that deserves mention.  The 16-, 32-, and 64-bit expanding multiplies
  4651. (base opcode `0xf6'; extension 4 for `mul' and 5 for `imul') can be
  4652. output only in the one operand form.  Thus, `imul %ebx, %eax' does
  4653. *not* select the expanding multiply; the expanding multiply would
  4654. clobber the `%edx' register, and this would confuse `gcc' output.  Use
  4655. `imul %ebx' to get the 64-bit product in `%edx:%eax'.
  4656.  
  4657.    We have added a two operand form of `imul' when the first operand is
  4658. an immediate mode expression and the second operand is a register.
  4659. This is just a shorthand, so that, multiplying `%eax' by 69, for
  4660. example, can be done with `imul $69, %eax' rather than `imul $69, %eax,
  4661. %eax'.
  4662.  
  4663. 
  4664. File: as,  Node: Z8000-Dependent,  Next: i386-Dependent,  Prev: Sparc-Dependent,  Up: Machine Dependencies
  4665.  
  4666. Z8000 Dependent Features
  4667. ========================
  4668.  
  4669.    The Z8000 as supports both members of the Z8000 family: the
  4670. unsegmented Z8002, with 16 bit addresses, and the segmented Z8001 with
  4671. 24 bit addresses.
  4672.  
  4673.    When the assembler is in unsegmented mode (specified with the
  4674. `unsegm' directive), an address will take up one word (16 bit) sized
  4675. register.  When the assembler is in segmented mode (specified with the
  4676. `segm' directive), a 24-bit address takes up a long (32 bit) register.
  4677. *Note Assembler Directives for the Z8000: Z8000 Directives, for a list
  4678. of other Z8000 specific assembler directives.
  4679.  
  4680. * Menu:
  4681.  
  4682. * Z8000 Options::               No special command-line options for Z8000
  4683. * Z8000 Syntax::                Assembler syntax for the Z8000
  4684. * Z8000 Directives::            Special directives for the Z8000
  4685. * Z8000 Opcodes::               Opcodes
  4686.  
  4687. 
  4688. File: as,  Node: Z8000 Options,  Next: Z8000 Syntax,  Up: Z8000-Dependent
  4689.  
  4690. Options
  4691. -------
  4692.  
  4693.    `as' has no additional command-line options for the Zilog Z8000
  4694. family.
  4695.  
  4696. 
  4697. File: as,  Node: Z8000 Syntax,  Next: Z8000 Directives,  Prev: Z8000 Options,  Up: Z8000-Dependent
  4698.  
  4699. Syntax
  4700. ------
  4701.  
  4702. * Menu:
  4703.  
  4704. * Z8000-Chars::                Special Characters
  4705. * Z8000-Regs::                 Register Names
  4706. * Z8000-Addressing::           Addressing Modes
  4707.  
  4708. 
  4709. File: as,  Node: Z8000-Chars,  Next: Z8000-Regs,  Up: Z8000 Syntax
  4710.  
  4711. Special Characters
  4712. ..................
  4713.  
  4714.    `!' is the line comment character.
  4715.  
  4716.    You can use `;' instead of a newline to separate statements.
  4717.  
  4718. 
  4719. File: as,  Node: Z8000-Regs,  Next: Z8000-Addressing,  Prev: Z8000-Chars,  Up: Z8000 Syntax
  4720.  
  4721. Register Names
  4722. ..............
  4723.  
  4724.    The Z8000 has sixteen 16 bit registers, numbered 0 to 15.  You can
  4725. refer to different sized groups of registers by register number, with
  4726. the prefix `r' for 16 bit registers, `rr' for 32 bit registers and `rq'
  4727. for 64 bit registers.  You can also refer to the contents of the first
  4728. eight (of the sixteen 16 bit registers) by bytes.  They are named `rNh'
  4729. and `rNl'.
  4730.  
  4731. *byte registers*
  4732.      r0l r0h r1h r1l r2h r2l r3h r3l
  4733.      r4h r4l r5h r5l r6h r6l r7h r7l
  4734. *word registers*
  4735.      r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15
  4736. *long word registers*
  4737.      rr0 rr2 rr4 rr6 rr8 rr10 rr12 rr14
  4738. *quad word registers*
  4739.      rq0 rq4 rq8 rq12
  4740.  
  4741. 
  4742. File: as,  Node: Z8000-Addressing,  Prev: Z8000-Regs,  Up: Z8000 Syntax
  4743.  
  4744. Addressing Modes
  4745. ................
  4746.  
  4747.    as understands the following addressing modes for the Z8000:
  4748.  
  4749. `rN'
  4750.      Register direct
  4751.  
  4752. `@rN'
  4753.      Indirect register
  4754.  
  4755. `ADDR'
  4756.      Direct: the 16 bit or 24 bit address (depending on whether the
  4757.      assembler is in segmented or unsegmented mode) of the operand is
  4758.      in the instruction.
  4759.  
  4760. `address(rN)'
  4761.      Indexed: the 16 or 24 bit address is added to the 16 bit register
  4762.      to produce the final address in memory of the operand.
  4763.  
  4764. `rN(#IMM)'
  4765.      Base Address: the 16 or 24 bit register is added to the 16 bit sign
  4766.      extended immediate displacement to produce the final address in
  4767.      memory of the operand.
  4768.  
  4769. `rN(rM)'
  4770.      Base Index: the 16 or 24 bit register rN is added to the sign
  4771.      extended 16 bit index register rM to produce the final address in
  4772.      memory of the operand.
  4773.  
  4774. `#XX'
  4775.      Immediate data XX.
  4776.  
  4777. 
  4778. File: as,  Node: Z8000 Directives,  Next: Z8000 Opcodes,  Prev: Z8000 Syntax,  Up: Z8000-Dependent
  4779.  
  4780. Assembler Directives for the Z8000
  4781. ----------------------------------
  4782.  
  4783.    The Z8000 port of as includes these additional assembler directives,
  4784. for compatibility with other Z8000 assemblers.  As shown, these do not
  4785. begin with `.' (unlike the ordinary as directives).
  4786.  
  4787. `segm'
  4788.      Generates code for the segmented Z8001.
  4789.  
  4790. `unsegm'
  4791.      Generates code for the unsegmented Z8002.
  4792.  
  4793. `name'
  4794.      Synonym for `.file'
  4795.  
  4796. `global'
  4797.      Synonum for `.global'
  4798.  
  4799. `wval'
  4800.      Synonym for `.word'
  4801.  
  4802. `lval'
  4803.      Synonym for `.long'
  4804.  
  4805. `bval'
  4806.      Synonym for `.byte'
  4807.  
  4808. `sval'
  4809.      Assemble a string.  `sval' expects one string literal, delimited by
  4810.      single quotes.  It assembles each byte of the string into
  4811.      consecutive addresses.  You can use the escape sequence `%XX'
  4812.      (where XX represents a two-digit hexadecimal number) to represent
  4813.      the character whose ASCII value is XX.  Use this feature to
  4814.      describe single quote and other characters that may not appear in
  4815.      string literals as themselves.  For example, the C statement
  4816.      `char *a = "he said \"it's 50% off\"";' is represented in Z8000
  4817.      assembly language (shown with the assembler output in hex at the
  4818.      left) as
  4819.  
  4820.           68652073    sval    'he said %22it%27s 50%25 off%22%00'
  4821.           61696420
  4822.           22697427
  4823.           73203530
  4824.           25206F66
  4825.           662200
  4826.  
  4827. `rsect'
  4828.      synonym for `.section'
  4829.  
  4830. `block'
  4831.      synonym for `.space'
  4832.  
  4833. `even'
  4834.      synonym for `.align 1'
  4835.  
  4836. 
  4837. File: as,  Node: Z8000 Opcodes,  Prev: Z8000 Directives,  Up: Z8000-Dependent
  4838.  
  4839. Opcodes
  4840. -------
  4841.  
  4842.    For detailed information on the Z8000 machine instruction set, see
  4843. `Z8000 Technical Manual'.
  4844.  
  4845.    The following table summarizes the opcodes and their arguments:
  4846.  
  4847.                  rs   16 bit source register
  4848.                  rd   16 bit destination register
  4849.                  rbs   8 bit source register
  4850.                  rbd   8 bit destination register
  4851.                  rrs   32 bit source register
  4852.                  rrd   32 bit destination register
  4853.                  rqs   64 bit source register
  4854.                  rqd   64 bit destination register
  4855.                  addr 16/24 bit address
  4856.                  imm  immediate data
  4857.      
  4858.      adc rd,rs               clrb addr               cpsir @rd,@rs,rr,cc
  4859.      adcb rbd,rbs            clrb addr(rd)           cpsirb @rd,@rs,rr,cc
  4860.      add rd,@rs              clrb rbd                dab rbd
  4861.      add rd,addr             com @rd                 dbjnz rbd,disp7
  4862.      add rd,addr(rs)         com addr                dec @rd,imm4m1
  4863.      add rd,imm16            com addr(rd)            dec addr(rd),imm4m1
  4864.      add rd,rs               com rd                  dec addr,imm4m1
  4865.      addb rbd,@rs            comb @rd                dec rd,imm4m1
  4866.      addb rbd,addr           comb addr               decb @rd,imm4m1
  4867.      addb rbd,addr(rs)       comb addr(rd)           decb addr(rd),imm4m1
  4868.      addb rbd,imm8           comb rbd                decb addr,imm4m1
  4869.      addb rbd,rbs            comflg flags            decb rbd,imm4m1
  4870.      addl rrd,@rs            cp @rd,imm16            di i2
  4871.      addl rrd,addr           cp addr(rd),imm16       div rrd,@rs
  4872.      addl rrd,addr(rs)       cp addr,imm16           div rrd,addr
  4873.      addl rrd,imm32          cp rd,@rs               div rrd,addr(rs)
  4874.      addl rrd,rrs            cp rd,addr              div rrd,imm16
  4875.      and rd,@rs              cp rd,addr(rs)          div rrd,rs
  4876.      and rd,addr             cp rd,imm16             divl rqd,@rs
  4877.      and rd,addr(rs)         cp rd,rs                divl rqd,addr
  4878.      and rd,imm16            cpb @rd,imm8            divl rqd,addr(rs)
  4879.      and rd,rs               cpb addr(rd),imm8       divl rqd,imm32
  4880.      andb rbd,@rs            cpb addr,imm8           divl rqd,rrs
  4881.      andb rbd,addr           cpb rbd,@rs             djnz rd,disp7
  4882.      andb rbd,addr(rs)       cpb rbd,addr            ei i2
  4883.      andb rbd,imm8           cpb rbd,addr(rs)        ex rd,@rs
  4884.      andb rbd,rbs            cpb rbd,imm8            ex rd,addr
  4885.      bit @rd,imm4            cpb rbd,rbs             ex rd,addr(rs)
  4886.      bit addr(rd),imm4       cpd rd,@rs,rr,cc        ex rd,rs
  4887.      bit addr,imm4           cpdb rbd,@rs,rr,cc      exb rbd,@rs
  4888.      bit rd,imm4             cpdr rd,@rs,rr,cc       exb rbd,addr
  4889.      bit rd,rs               cpdrb rbd,@rs,rr,cc     exb rbd,addr(rs)
  4890.      bitb @rd,imm4           cpi rd,@rs,rr,cc        exb rbd,rbs
  4891.      bitb addr(rd),imm4      cpib rbd,@rs,rr,cc      ext0e imm8
  4892.      bitb addr,imm4          cpir rd,@rs,rr,cc       ext0f imm8
  4893.      bitb rbd,imm4           cpirb rbd,@rs,rr,cc     ext8e imm8
  4894.      bitb rbd,rs             cpl rrd,@rs             ext8f imm8
  4895.      bpt                     cpl rrd,addr            exts rrd
  4896.      call @rd                cpl rrd,addr(rs)        extsb rd
  4897.      call addr               cpl rrd,imm32           extsl rqd
  4898.      call addr(rd)           cpl rrd,rrs             halt
  4899.      calr disp12             cpsd @rd,@rs,rr,cc      in rd,@rs
  4900.      clr @rd                 cpsdb @rd,@rs,rr,cc     in rd,imm16
  4901.      clr addr                cpsdr @rd,@rs,rr,cc     inb rbd,@rs
  4902.      clr addr(rd)            cpsdrb @rd,@rs,rr,cc    inb rbd,imm16
  4903.      clr rd                  cpsi @rd,@rs,rr,cc      inc @rd,imm4m1
  4904.      clrb @rd                cpsib @rd,@rs,rr,cc     inc addr(rd),imm4m1
  4905.      inc addr,imm4m1         ldb rbd,rs(rx)          mult rrd,addr(rs)
  4906.      inc rd,imm4m1           ldb rd(imm16),rbs       mult rrd,imm16
  4907.      incb @rd,imm4m1         ldb rd(rx),rbs          mult rrd,rs
  4908.      incb addr(rd),imm4m1    ldctl ctrl,rs           multl rqd,@rs
  4909.      incb addr,imm4m1        ldctl rd,ctrl           multl rqd,addr
  4910.      incb rbd,imm4m1         ldd @rs,@rd,rr          multl rqd,addr(rs)
  4911.      ind @rd,@rs,ra          lddb @rs,@rd,rr         multl rqd,imm32
  4912.      indb @rd,@rs,rba        lddr @rs,@rd,rr         multl rqd,rrs
  4913.      inib @rd,@rs,ra         lddrb @rs,@rd,rr        neg @rd
  4914.      inibr @rd,@rs,ra        ldi @rd,@rs,rr          neg addr
  4915.      iret                    ldib @rd,@rs,rr         neg addr(rd)
  4916.      jp cc,@rd               ldir @rd,@rs,rr         neg rd
  4917.      jp cc,addr              ldirb @rd,@rs,rr        negb @rd
  4918.      jp cc,addr(rd)          ldk rd,imm4             negb addr
  4919.      jr cc,disp8             ldl @rd,rrs             negb addr(rd)
  4920.      ld @rd,imm16            ldl addr(rd),rrs        negb rbd
  4921.      ld @rd,rs               ldl addr,rrs            nop
  4922.      ld addr(rd),imm16       ldl rd(imm16),rrs       or rd,@rs
  4923.      ld addr(rd),rs          ldl rd(rx),rrs          or rd,addr
  4924.      ld addr,imm16           ldl rrd,@rs             or rd,addr(rs)
  4925.      ld addr,rs              ldl rrd,addr            or rd,imm16
  4926.      ld rd(imm16),rs         ldl rrd,addr(rs)        or rd,rs
  4927.      ld rd(rx),rs            ldl rrd,imm32           orb rbd,@rs
  4928.      ld rd,@rs               ldl rrd,rrs             orb rbd,addr
  4929.      ld rd,addr              ldl rrd,rs(imm16)       orb rbd,addr(rs)
  4930.      ld rd,addr(rs)          ldl rrd,rs(rx)          orb rbd,imm8
  4931.      ld rd,imm16             ldm @rd,rs,n            orb rbd,rbs
  4932.      ld rd,rs                ldm addr(rd),rs,n       out @rd,rs
  4933.      ld rd,rs(imm16)         ldm addr,rs,n           out imm16,rs
  4934.      ld rd,rs(rx)            ldm rd,@rs,n            outb @rd,rbs
  4935.      lda rd,addr             ldm rd,addr(rs),n       outb imm16,rbs
  4936.      lda rd,addr(rs)         ldm rd,addr,n           outd @rd,@rs,ra
  4937.      lda rd,rs(imm16)        ldps @rs                outdb @rd,@rs,rba
  4938.      lda rd,rs(rx)           ldps addr               outib @rd,@rs,ra
  4939.      ldar rd,disp16          ldps addr(rs)           outibr @rd,@rs,ra
  4940.      ldb @rd,imm8            ldr disp16,rs           pop @rd,@rs
  4941.      ldb @rd,rbs             ldr rd,disp16           pop addr(rd),@rs
  4942.      ldb addr(rd),imm8       ldrb disp16,rbs         pop addr,@rs
  4943.      ldb addr(rd),rbs        ldrb rbd,disp16         pop rd,@rs
  4944.      ldb addr,imm8           ldrl disp16,rrs         popl @rd,@rs
  4945.      ldb addr,rbs            ldrl rrd,disp16         popl addr(rd),@rs
  4946.      ldb rbd,@rs             mbit                    popl addr,@rs
  4947.      ldb rbd,addr            mreq rd                 popl rrd,@rs
  4948.      ldb rbd,addr(rs)        mres                    push @rd,@rs
  4949.      ldb rbd,imm8            mset                    push @rd,addr
  4950.      ldb rbd,rbs             mult rrd,@rs            push @rd,addr(rs)
  4951.      ldb rbd,rs(imm16)       mult rrd,addr           push @rd,imm16
  4952.      push @rd,rs             set addr,imm4           subl rrd,imm32
  4953.      pushl @rd,@rs           set rd,imm4             subl rrd,rrs
  4954.      pushl @rd,addr          set rd,rs               tcc cc,rd
  4955.      pushl @rd,addr(rs)      setb @rd,imm4           tccb cc,rbd
  4956.      pushl @rd,rrs           setb addr(rd),imm4      test @rd
  4957.      res @rd,imm4            setb addr,imm4          test addr
  4958.      res addr(rd),imm4       setb rbd,imm4           test addr(rd)
  4959.      res addr,imm4           setb rbd,rs             test rd
  4960.      res rd,imm4             setflg imm4             testb @rd
  4961.      res rd,rs               sinb rbd,imm16          testb addr
  4962.      resb @rd,imm4           sinb rd,imm16           testb addr(rd)
  4963.      resb addr(rd),imm4      sind @rd,@rs,ra         testb rbd
  4964.      resb addr,imm4          sindb @rd,@rs,rba       testl @rd
  4965.      resb rbd,imm4           sinib @rd,@rs,ra        testl addr
  4966.      resb rbd,rs             sinibr @rd,@rs,ra       testl addr(rd)
  4967.      resflg imm4             sla rd,imm8             testl rrd
  4968.      ret cc                  slab rbd,imm8           trdb @rd,@rs,rba
  4969.      rl rd,imm1or2           slal rrd,imm8           trdrb @rd,@rs,rba
  4970.      rlb rbd,imm1or2         sll rd,imm8             trib @rd,@rs,rbr
  4971.      rlc rd,imm1or2          sllb rbd,imm8           trirb @rd,@rs,rbr
  4972.      rlcb rbd,imm1or2        slll rrd,imm8           trtdrb @ra,@rb,rbr
  4973.      rldb rbb,rba            sout imm16,rs           trtib @ra,@rb,rr
  4974.      rr rd,imm1or2           soutb imm16,rbs         trtirb @ra,@rb,rbr
  4975.      rrb rbd,imm1or2         soutd @rd,@rs,ra        trtrb @ra,@rb,rbr
  4976.      rrc rd,imm1or2          soutdb @rd,@rs,rba      tset @rd
  4977.      rrcb rbd,imm1or2        soutib @rd,@rs,ra       tset addr
  4978.      rrdb rbb,rba            soutibr @rd,@rs,ra      tset addr(rd)
  4979.      rsvd36                  sra rd,imm8             tset rd
  4980.      rsvd38                  srab rbd,imm8           tsetb @rd
  4981.      rsvd78                  sral rrd,imm8           tsetb addr
  4982.      rsvd7e                  srl rd,imm8             tsetb addr(rd)
  4983.      rsvd9d                  srlb rbd,imm8           tsetb rbd
  4984.      rsvd9f                  srll rrd,imm8           xor rd,@rs
  4985.      rsvdb9                  sub rd,@rs              xor rd,addr
  4986.      rsvdbf                  sub rd,addr             xor rd,addr(rs)
  4987.      sbc rd,rs               sub rd,addr(rs)         xor rd,imm16
  4988.      sbcb rbd,rbs            sub rd,imm16            xor rd,rs
  4989.      sc imm8                 sub rd,rs               xorb rbd,@rs
  4990.      sda rd,rs               subb rbd,@rs            xorb rbd,addr
  4991.      sdab rbd,rs             subb rbd,addr           xorb rbd,addr(rs)
  4992.      sdal rrd,rs             subb rbd,addr(rs)       xorb rbd,imm8
  4993.      sdl rd,rs               subb rbd,imm8           xorb rbd,rbs
  4994.      sdlb rbd,rs             subb rbd,rbs            xorb rbd,rbs
  4995.      sdll rrd,rs             subl rrd,@rs
  4996.      set @rd,imm4            subl rrd,addr
  4997.      set addr(rd),imm4       subl rrd,addr(rs)
  4998.  
  4999. 
  5000. File: as,  Node: Acknowledgements,  Next: Index,  Prev: Copying,  Up: Top
  5001.  
  5002. Acknowledgements
  5003. ****************
  5004.  
  5005.    If you've contributed to `as' and your name isn't listed here, it is
  5006. not meant as a slight.  We just don't know about it.  Send mail to the
  5007. maintainer, and we'll correct the situation.  Currently (June 1993), the
  5008. maintainer is Ken Raeburn (email address `raeburn@cygnus.com').
  5009.  
  5010.    Dean Elsner wrote the original GNU assembler for the VAX.(1)
  5011.  
  5012.    Jay Fenlason maintained GAS for a while, adding support for
  5013. gdb-specific debug information and the 68k series machines, most of the
  5014. preprocessing pass, and extensive changes in messages.c, input-file.c,
  5015. write.c.
  5016.  
  5017.    K. Richard Pixley maintained GAS for a while, adding various
  5018. enhancements and many bug fixes, including merging support for several
  5019. processors, breaking GAS up to handle multiple object file format
  5020. backends (including heavy rewrite, testing, an integration of the coff
  5021. and b.out backends), adding configuration including heavy testing and
  5022. verification of cross assemblers and file splits and renaming,
  5023. converted GAS to strictly ansi C including full prototypes, added
  5024. support for m680[34]0 & cpu32, considerable work on i960 including a
  5025. COFF port (including considerable amounts of reverse engineering), a
  5026. SPARC opcode file rewrite, DECstation, rs6000, and hp300hpux host
  5027. ports, updated "know" assertions and made them work, much other
  5028. reorganization, cleanup, and lint.
  5029.  
  5030.    Ken Raeburn wrote the high-level BFD interface code to replace most
  5031. of the code in format-specific I/O modules.
  5032.  
  5033.    The original VMS support was contributed by David L. Kashtan.  Eric
  5034. Youngdale has done much work with it since.
  5035.  
  5036.    The Intel 80386 machine description was written by Eliot Dresselhaus.
  5037.  
  5038.    Minh Tran-Le at IntelliCorp contributed some AIX 386 support.
  5039.  
  5040.    The Motorola 88k machine description was contributed by Devon Bowen
  5041. of Buffalo University and Torbjorn Granlund of the Swedish Institute of
  5042. Computer Science.
  5043.  
  5044.    Keith Knowles at the Open Software Foundation wrote the original
  5045. MIPS back end (tc-mips.c, tc-mips.h), and contributed Rose format
  5046. support (which hasn't been merged in yet).  Ralph Campbell worked with
  5047. the MIPS code to support a.out format.
  5048.  
  5049.    Support for the Zilog Z8k and Hitachi H8/300 and H8/500 processors
  5050. (tc-z8k, tc-h8300, tc-h8500), and IEEE 695 object file format
  5051. (obj-ieee), was written by Steve Chamberlain of Cygnus Support.  Steve
  5052. also modified the COFF back end to use BFD for some low-level
  5053. operations, for use with the H8/300 and AMD 29k targets.
  5054.  
  5055.    John Gilmore built the AMD 29000 support, added .include support, and
  5056. simplified the configuration of which versions accept which pseudo-ops.
  5057. He updated the 68k machine description so that Motorola's opcodes
  5058. always produced fixed-size instructions (e.g. jsr), while synthetic
  5059. instructions remained shrinkable (jbsr).  John fixed many bugs,
  5060. including true tested cross-compilation support, and one bug in
  5061. relaxation that took a week and required the apocryphal one-bit fix.
  5062.  
  5063.    Ian Lance Taylor of Cygnus Support merged the Motorola and MIT
  5064. syntaxes for the 68k, completed support for some COFF targets (68k,
  5065. i386 SVR3, and SCO Unix), and made a few other minor patches.
  5066.  
  5067.    Steve Chamberlain made `as' able to generate listings.
  5068.  
  5069.    Support for the HP9000/300 was contributed by Hewlett-Packard.
  5070.  
  5071.    Support for ELF format files has been worked on by Mark Eichin of
  5072. Cygnus Support (original, incomplete implementation for SPARC), Pete
  5073. Hoogenboom and Jeff Law at the University of Utah (HPPA mainly),
  5074. Michael Meissner of the Open Software Foundation (i386 mainly), and Ken
  5075. Raeburn of Cygnus Support (sparc, and some initial 64-bit support).
  5076.  
  5077.    Several engineers at Cygnus Support have also provided many small
  5078. bug fixes and configuration enhancements.
  5079.  
  5080.    Many others have contributed large or small bugfixes and
  5081. enhancements.  If you've contributed significant work and are not
  5082. mentioned on this list, and want to be, let us know.  Some of the
  5083. history has been lost; we aren't intentionally leaving anyone out.
  5084.  
  5085.    ---------- Footnotes ----------
  5086.  
  5087.    (1)  Any more details?
  5088.  
  5089. 
  5090. File: as,  Node: Copying,  Next: Acknowledgements,  Prev: Machine Dependencies,  Up: Top
  5091.  
  5092.  
  5093.  
  5094. GNU GENERAL PUBLIC LICENSE
  5095. **************************
  5096.  
  5097.                          Version 2, June 1991
  5098.  
  5099.      Copyright (C) 1989, 1991 Free Software Foundation, Inc.  675
  5100.      Mass Ave, Cambridge, MA 02139, USA
  5101.      
  5102.      Everyone is permitted to copy and distribute verbatim copies
  5103.      of this license document, but changing it is not allowed.
  5104.  
  5105. Preamble
  5106. ========
  5107.  
  5108.    The licenses for most software are designed to take away your
  5109. freedom to share and change it.  By contrast, the GNU General Public
  5110. License is intended to guarantee your freedom to share and change free
  5111. software--to make sure the software is free for all its users.  This
  5112. General Public License applies to most of the Free Software
  5113. Foundation's software and to any other program whose authors commit to
  5114. using it.  (Some other Free Software Foundation software is covered by
  5115. the GNU Library General Public License instead.)  You can apply it to
  5116. your programs, too.
  5117.  
  5118.    When we speak of free software, we are referring to freedom, not
  5119. price.  Our General Public Licenses are designed to make sure that you
  5120. have the freedom to distribute copies of free software (and charge for
  5121. this service if you wish), that you receive source code or can get it
  5122. if you want it, that you can change the software or use pieces of it in
  5123. new free programs; and that you know you can do these things.
  5124.  
  5125.    To protect your rights, we need to make restrictions that forbid
  5126. anyone to deny you these rights or to ask you to surrender the rights.
  5127. These restrictions translate to certain responsibilities for you if you
  5128. distribute copies of the software, or if you modify it.
  5129.  
  5130.    For example, if you distribute copies of such a program, whether
  5131. gratis or for a fee, you must give the recipients all the rights that
  5132. you have.  You must make sure that they, too, receive or can get the
  5133. source code.  And you must show them these terms so they know their
  5134. rights.
  5135.  
  5136.    We protect your rights with two steps: (1) copyright the software,
  5137. and (2) offer you this license which gives you legal permission to copy,
  5138. distribute and/or modify the software.
  5139.  
  5140.    Also, for each author's protection and ours, we want to make certain
  5141. that everyone understands that there is no warranty for this free
  5142. software.  If the software is modified by someone else and passed on, we
  5143. want its recipients to know that what they have is not the original, so
  5144. that any problems introduced by others will not reflect on the original
  5145. authors' reputations.
  5146.  
  5147.    Finally, any free program is threatened constantly by software
  5148. patents.  We wish to avoid the danger that redistributors of a free
  5149. program will individually obtain patent licenses, in effect making the
  5150. program proprietary.  To prevent this, we have made it clear that any
  5151. patent must be licensed for everyone's free use or not licensed at all.
  5152.  
  5153.    The precise terms and conditions for copying, distribution and
  5154. modification follow.
  5155.  
  5156.     TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
  5157.  
  5158.   1. This License applies to any program or other work which contains a
  5159.      notice placed by the copyright holder saying it may be distributed
  5160.      under the terms of this General Public License.  The "Program",
  5161.      below, refers to any such program or work, and a "work based on
  5162.      the Program" means either the Program or any derivative work under
  5163.      copyright law: that is to say, a work containing the Program or a
  5164.      portion of it, either verbatim or with modifications and/or
  5165.      translated into another language.  (Hereinafter, translation is
  5166.      included without limitation in the term "modification".)  Each
  5167.      licensee is addressed as "you".
  5168.  
  5169.      Activities other than copying, distribution and modification are
  5170.      not covered by this License; they are outside its scope.  The act
  5171.      of running the Program is not restricted, and the output from the
  5172.      Program is covered only if its contents constitute a work based on
  5173.      the Program (independent of having been made by running the
  5174.      Program).  Whether that is true depends on what the Program does.
  5175.  
  5176.   2. You may copy and distribute verbatim copies of the Program's
  5177.      source code as you receive it, in any medium, provided that you
  5178.      conspicuously and appropriately publish on each copy an appropriate
  5179.      copyright notice and disclaimer of warranty; keep intact all the
  5180.      notices that refer to this License and to the absence of any
  5181.      warranty; and give any other recipients of the Program a copy of
  5182.      this License along with the Program.
  5183.  
  5184.      You may charge a fee for the physical act of transferring a copy,
  5185.      and you may at your option offer warranty protection in exchange
  5186.      for a fee.
  5187.  
  5188.   3. You may modify your copy or copies of the Program or any portion
  5189.      of it, thus forming a work based on the Program, and copy and
  5190.      distribute such modifications or work under the terms of Section 1
  5191.      above, provided that you also meet all of these conditions:
  5192.  
  5193.        a. You must cause the modified files to carry prominent notices
  5194.           stating that you changed the files and the date of any change.
  5195.  
  5196.        b. You must cause any work that you distribute or publish, that
  5197.           in whole or in part contains or is derived from the Program
  5198.           or any part thereof, to be licensed as a whole at no charge
  5199.           to all third parties under the terms of this License.
  5200.  
  5201.        c. If the modified program normally reads commands interactively
  5202.           when run, you must cause it, when started running for such
  5203.           interactive use in the most ordinary way, to print or display
  5204.           an announcement including an appropriate copyright notice and
  5205.           a notice that there is no warranty (or else, saying that you
  5206.           provide a warranty) and that users may redistribute the
  5207.           program under these conditions, and telling the user how to
  5208.           view a copy of this License.  (Exception: if the Program
  5209.           itself is interactive but does not normally print such an
  5210.           announcement, your work based on the Program is not required
  5211.           to print an announcement.)
  5212.  
  5213.      These requirements apply to the modified work as a whole.  If
  5214.      identifiable sections of that work are not derived from the
  5215.      Program, and can be reasonably considered independent and separate
  5216.      works in themselves, then this License, and its terms, do not
  5217.      apply to those sections when you distribute them as separate
  5218.      works.  But when you distribute the same sections as part of a
  5219.      whole which is a work based on the Program, the distribution of
  5220.      the whole must be on the terms of this License, whose permissions
  5221.      for other licensees extend to the entire whole, and thus to each
  5222.      and every part regardless of who wrote it.
  5223.  
  5224.      Thus, it is not the intent of this section to claim rights or
  5225.      contest your rights to work written entirely by you; rather, the
  5226.      intent is to exercise the right to control the distribution of
  5227.      derivative or collective works based on the Program.
  5228.  
  5229.      In addition, mere aggregation of another work not based on the
  5230.      Program with the Program (or with a work based on the Program) on
  5231.      a volume of a storage or distribution medium does not bring the
  5232.      other work under the scope of this License.
  5233.  
  5234.   4. You may copy and distribute the Program (or a work based on it,
  5235.      under Section 2) in object code or executable form under the terms
  5236.      of Sections 1 and 2 above provided that you also do one of the
  5237.      following:
  5238.  
  5239.        a. Accompany it with the complete corresponding machine-readable
  5240.           source code, which must be distributed under the terms of
  5241.           Sections 1 and 2 above on a medium customarily used for
  5242.           software interchange; or,
  5243.  
  5244.        b. Accompany it with a written offer, valid for at least three
  5245.           years, to give any third party, for a charge no more than your
  5246.           cost of physically performing source distribution, a complete
  5247.           machine-readable copy of the corresponding source code, to be
  5248.           distributed under the terms of Sections 1 and 2 above on a
  5249.           medium customarily used for software interchange; or,
  5250.  
  5251.        c. Accompany it with the information you received as to the offer
  5252.           to distribute corresponding source code.  (This alternative is
  5253.           allowed only for noncommercial distribution and only if you
  5254.           received the program in object code or executable form with
  5255.           such an offer, in accord with Subsection b above.)
  5256.  
  5257.      The source code for a work means the preferred form of the work for
  5258.      making modifications to it.  For an executable work, complete
  5259.      source code means all the source code for all modules it contains,
  5260.      plus any associated interface definition files, plus the scripts
  5261.      used to control compilation and installation of the executable.
  5262.      However, as a special exception, the source code distributed need
  5263.      not include anything that is normally distributed (in either
  5264.      source or binary form) with the major components (compiler,
  5265.      kernel, and so on) of the operating system on which the executable
  5266.      runs, unless that component itself accompanies the executable.
  5267.  
  5268.      If distribution of executable or object code is made by offering
  5269.      access to copy from a designated place, then offering equivalent
  5270.      access to copy the source code from the same place counts as
  5271.      distribution of the source code, even though third parties are not
  5272.      compelled to copy the source along with the object code.
  5273.  
  5274.   5. You may not copy, modify, sublicense, or distribute the Program
  5275.      except as expressly provided under this License.  Any attempt
  5276.      otherwise to copy, modify, sublicense or distribute the Program is
  5277.      void, and will automatically terminate your rights under this
  5278.      License.  However, parties who have received copies, or rights,
  5279.      from you under this License will not have their licenses
  5280.      terminated so long as such parties remain in full compliance.
  5281.  
  5282.   6. You are not required to accept this License, since you have not
  5283.      signed it.  However, nothing else grants you permission to modify
  5284.      or distribute the Program or its derivative works.  These actions
  5285.      are prohibited by law if you do not accept this License.
  5286.      Therefore, by modifying or distributing the Program (or any work
  5287.      based on the Program), you indicate your acceptance of this
  5288.      License to do so, and all its terms and conditions for copying,
  5289.      distributing or modifying the Program or works based on it.
  5290.  
  5291.   7. Each time you redistribute the Program (or any work based on the
  5292.      Program), the recipient automatically receives a license from the
  5293.      original licensor to copy, distribute or modify the Program
  5294.      subject to these terms and conditions.  You may not impose any
  5295.      further restrictions on the recipients' exercise of the rights
  5296.      granted herein.  You are not responsible for enforcing compliance
  5297.      by third parties to this License.
  5298.  
  5299.   8. If, as a consequence of a court judgment or allegation of patent
  5300.      infringement or for any other reason (not limited to patent
  5301.      issues), conditions are imposed on you (whether by court order,
  5302.      agreement or otherwise) that contradict the conditions of this
  5303.      License, they do not excuse you from the conditions of this
  5304.      License.  If you cannot distribute so as to satisfy simultaneously
  5305.      your obligations under this License and any other pertinent
  5306.      obligations, then as a consequence you may not distribute the
  5307.      Program at all.  For example, if a patent license would not permit
  5308.      royalty-free redistribution of the Program by all those who
  5309.      receive copies directly or indirectly through you, then the only
  5310.      way you could satisfy both it and this License would be to refrain
  5311.      entirely from distribution of the Program.
  5312.  
  5313.      If any portion of this section is held invalid or unenforceable
  5314.      under any particular circumstance, the balance of the section is
  5315.      intended to apply and the section as a whole is intended to apply
  5316.      in other circumstances.
  5317.  
  5318.      It is not the purpose of this section to induce you to infringe any
  5319.      patents or other property right claims or to contest validity of
  5320.      any such claims; this section has the sole purpose of protecting
  5321.      the integrity of the free software distribution system, which is
  5322.      implemented by public license practices.  Many people have made
  5323.      generous contributions to the wide range of software distributed
  5324.      through that system in reliance on consistent application of that
  5325.      system; it is up to the author/donor to decide if he or she is
  5326.      willing to distribute software through any other system and a
  5327.      licensee cannot impose that choice.
  5328.  
  5329.      This section is intended to make thoroughly clear what is believed
  5330.      to be a consequence of the rest of this License.
  5331.  
  5332.   9. If the distribution and/or use of the Program is restricted in
  5333.      certain countries either by patents or by copyrighted interfaces,
  5334.      the original copyright holder who places the Program under this
  5335.      License may add an explicit geographical distribution limitation
  5336.      excluding those countries, so that distribution is permitted only
  5337.      in or among countries not thus excluded.  In such case, this
  5338.      License incorporates the limitation as if written in the body of
  5339.      this License.
  5340.  
  5341.  10. The Free Software Foundation may publish revised and/or new
  5342.      versions of the General Public License from time to time.  Such
  5343.      new versions will be similar in spirit to the present version, but
  5344.      may differ in detail to address new problems or concerns.
  5345.  
  5346.      Each version is given a distinguishing version number.  If the
  5347.      Program specifies a version number of this License which applies
  5348.      to it and "any later version", you have the option of following
  5349.      the terms and conditions either of that version or of any later
  5350.      version published by the Free Software Foundation.  If the Program
  5351.      does not specify a version number of this License, you may choose
  5352.      any version ever published by the Free Software Foundation.
  5353.  
  5354.  11. If you wish to incorporate parts of the Program into other free
  5355.      programs whose distribution conditions are different, write to the
  5356.      author to ask for permission.  For software which is copyrighted
  5357.      by the Free Software Foundation, write to the Free Software
  5358.      Foundation; we sometimes make exceptions for this.  Our decision
  5359.      will be guided by the two goals of preserving the free status of
  5360.      all derivatives of our free software and of promoting the sharing
  5361.      and reuse of software generally.
  5362.  
  5363.                                 NO WARRANTY
  5364.  
  5365.  12. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO
  5366.      WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE
  5367.      LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
  5368.      HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT
  5369.      WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT
  5370.      NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  5371.      FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE
  5372.      QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
  5373.      PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY
  5374.      SERVICING, REPAIR OR CORRECTION.
  5375.  
  5376.  13. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
  5377.      WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY
  5378.      MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE
  5379.      LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL,
  5380.      INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
  5381.      INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
  5382.      DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU
  5383.      OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY
  5384.      OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN
  5385.      ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
  5386.  
  5387.                       END OF TERMS AND CONDITIONS
  5388.  
  5389. How to Apply These Terms to Your New Programs
  5390. =============================================
  5391.  
  5392.    If you develop a new program, and you want it to be of the greatest
  5393. possible use to the public, the best way to achieve this is to make it
  5394. free software which everyone can redistribute and change under these
  5395. terms.
  5396.  
  5397.    To do so, attach the following notices to the program.  It is safest
  5398. to attach them to the start of each source file to most effectively
  5399. convey the exclusion of warranty; and each file should have at least
  5400. the "copyright" line and a pointer to where the full notice is found.
  5401.  
  5402.      ONE LINE TO GIVE THE PROGRAM'S NAME AND AN IDEA OF WHAT IT DOES.
  5403.      Copyright (C) 19YY  NAME OF AUTHOR
  5404.      
  5405.      This program is free software; you can redistribute it and/or
  5406.      modify it under the terms of the GNU General Public License
  5407.      as published by the Free Software Foundation; either version 2
  5408.      of the License, or (at your option) any later version.
  5409.      
  5410.      This program is distributed in the hope that it will be useful,
  5411.      but WITHOUT ANY WARRANTY; without even the implied warranty of
  5412.      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  5413.      GNU General Public License for more details.
  5414.      
  5415.      You should have received a copy of the GNU General Public License
  5416.      along with this program; if not, write to the Free Software
  5417.      Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  5418.  
  5419.    Also add information on how to contact you by electronic and paper
  5420. mail.
  5421.  
  5422.    If the program is interactive, make it output a short notice like
  5423. this when it starts in an interactive mode:
  5424.  
  5425.      Gnomovision version 69, Copyright (C) 19YY NAME OF AUTHOR
  5426.      Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
  5427.      type `show w'.  This is free software, and you are welcome
  5428.      to redistribute it under certain conditions; type `show c'
  5429.      for details.
  5430.  
  5431.    The hypothetical commands `show w' and `show c' should show the
  5432. appropriate parts of the General Public License.  Of course, the
  5433. commands you use may be called something other than `show w' and `show
  5434. c'; they could even be mouse-clicks or menu items--whatever suits your
  5435. program.
  5436.  
  5437.    You should also get your employer (if you work as a programmer) or
  5438. your school, if any, to sign a "copyright disclaimer" for the program,
  5439. if necessary.  Here is a sample; alter the names:
  5440.  
  5441.      Yoyodyne, Inc., hereby disclaims all copyright
  5442.      interest in the program `Gnomovision'
  5443.      (which makes passes at compilers) written
  5444.      by James Hacker.
  5445.      
  5446.      SIGNATURE OF TY COON, 1 April 1989
  5447.      Ty Coon, President of Vice
  5448.  
  5449.    This General Public License does not permit incorporating your
  5450. program into proprietary programs.  If your program is a subroutine
  5451. library, you may consider it more useful to permit linking proprietary
  5452. applications with the library.  If this is what you want to do, use the
  5453. GNU Library General Public License instead of this License.
  5454.  
  5455. 
  5456. File: as,  Node: Index,  Prev: Acknowledgements,  Up: Top
  5457.  
  5458. Index
  5459. *****
  5460.  
  5461. * Menu:
  5462.  
  5463. * #:                                    Comments.
  5464. * #APP:                                 Pre-processing.
  5465. * #NO_APP:                              Pre-processing.
  5466. * -:                                    Command Line.
  5467. * -a:                                   a.
  5468. * -ad:                                  a.
  5469. * -ah:                                  a.
  5470. * -al:                                  a.
  5471. * -an:                                  a.
  5472. * -as:                                  a.
  5473. * -Asparclite:                          Sparc-Opts.
  5474. * -Av6:                                 Sparc-Opts.
  5475. * -Av8:                                 Sparc-Opts.
  5476. * -D:                                   D.
  5477. * -f:                                   f.
  5478. * -I PATH:                              I.
  5479. * -K:                                   K.
  5480. * -L:                                   L.
  5481. * -o:                                   o.
  5482. * -R:                                   R.
  5483. * -v:                                   v.
  5484. * -version:                             v.
  5485. * -W:                                   W.
  5486. * .o:                                   Object.
  5487. * 29K support:                          AMD29K-Dependent.
  5488. * $ in symbol names:                    SH-Chars.
  5489. * $ in symbol names:                    H8/500-Chars.
  5490. * -+ option, VAX/VMS:                   Vax-Opts.
  5491. * -A options, i960:                     Options-i960.
  5492. * -b option, i960:                      Options-i960.
  5493. * -D, ignored on VAX:                   Vax-Opts.
  5494. * -d, VAX option:                       Vax-Opts.
  5495. * -h option, VAX/VMS:                   Vax-Opts.
  5496. * -J, ignored on VAX:                   Vax-Opts.
  5497. * -l option, M680x0:                    M68K-Opts.
  5498. * -m68000 and related options:          M68K-Opts.
  5499. * -norelax option, i960:                Options-i960.
  5500. * -S, ignored on VAX:                   Vax-Opts.
  5501. * -t, ignored on VAX:                   Vax-Opts.
  5502. * -T, ignored on VAX:                   Vax-Opts.
  5503. * -V, redundant on VAX:                 Vax-Opts.
  5504. * . (symbol):                           Dot.
  5505. * : (label):                            Statements.
  5506. * as version:                           v.
  5507. * \" (doublequote character):           Strings.
  5508. * \DDD (octal character code):          Strings.
  5509. * \\ (\ character):                     Strings.
  5510. * \b (backspace character):             Strings.
  5511. * \f (formfeed character):              Strings.
  5512. * \n (newline character):               Strings.
  5513. * \r (carriage return character):       Strings.
  5514. * \t (tab):                             Strings.
  5515. * a.out symbol attributes:              a.out Symbols.
  5516. * ABORT directive:                      ABORT.
  5517. * abort directive:                      Abort.
  5518. * align directive:                      Align.
  5519. * app-file directive:                   App-File.
  5520. * ascii directive:                      Ascii.
  5521. * asciz directive:                      Asciz.
  5522. * block directive, AMD 29K:             AMD29K Directives.
  5523. * bss directive, i960:                  Directives-i960.
  5524. * byte directive:                       Byte.
  5525. * callj, i960 pseudo-opcode:            callj-i960.
  5526. * common directive, SPARC:              Sparc-Directives.
  5527. * comm directive:                       Comm.
  5528. * cputype directive, AMD 29K:           AMD29K Directives.
  5529. * data1 directive, M680x0:              M68K-Directives.
  5530. * data2 directive, M680x0:              M68K-Directives.
  5531. * data directive:                       Data.
  5532. * def directive:                        Def.
  5533. * desc directive:                       Desc.
  5534. * dfloat directive, VAX:                VAX-directives.
  5535. * dim directive:                        Dim.
  5536. * double directive:                     Double.
  5537. * double directive, i386:               i386-Float.
  5538. * double directive, M680x0:             M68K-Float.
  5539. * double directive, VAX:                VAX-float.
  5540. * eject directive:                      Eject.
  5541. * else directive:                       Else.
  5542. * endef directive:                      Endef.
  5543. * endif directive:                      Endif.
  5544. * equ directive:                        Equ.
  5545. * even directive, M680x0:               M68K-Directives.
  5546. * extended directive, i960:             Directives-i960.
  5547. * extern directive:                     Extern.
  5548. * ffloat directive, VAX:                VAX-directives.
  5549. * file directive:                       File.
  5550. * file directive, AMD 29K:              AMD29K Directives.
  5551. * fill directive:                       Fill.
  5552. * float directive:                      Float.
  5553. * float directive, i386:                i386-Float.
  5554. * float directive, M680x0:              M68K-Float.
  5555. * float directive, VAX:                 VAX-float.
  5556. * fwait instruction, i386:              i386-Float.
  5557. * gbr960, i960 postprocessor:           Options-i960.
  5558. * gfloat directive, VAX:                VAX-directives.
  5559. * global directive:                     Global.
  5560. * half directive, SPARC:                Sparc-Directives.
  5561. * hfloat directive, VAX:                VAX-directives.
  5562. * hword directive:                      hword.
  5563. * ident directive:                      Ident.
  5564. * ifdef directive:                      If.
  5565. * ifndef directive:                     If.
  5566. * ifnotdef directive:                   If.
  5567. * if directive:                         If.
  5568. * imul instruction, i386:               i386-Notes.
  5569. * include directive:                    Include.
  5570. * include directive search path:        I.
  5571. * int directive:                        Int.
  5572. * int directive, H8/300:                H8/300 Directives.
  5573. * int directive, H8/500:                H8/500 Directives.
  5574. * int directive, i386:                  i386-Float.
  5575. * int directive, SH:                    SH Directives.
  5576. * lcomm directive:                      Lcomm.
  5577. * leafproc directive, i960:             Directives-i960.
  5578. * lflags directive (ignored):           Lflags.
  5579. * line directive:                       Line.
  5580. * line directive, AMD 29K:              AMD29K Directives.
  5581. * list directive:                       List.
  5582. * ln directive:                         Ln.
  5583. * long directive:                       Long.
  5584. * long directive, i386:                 i386-Float.
  5585. * mul instruction, i386:                i386-Notes.
  5586. * nolist directive:                     Nolist.
  5587. * octa directive:                       Octa.
  5588. * org directive:                        Org.
  5589. * proc directive, SPARC:                Sparc-Directives.
  5590. * psize directive:                      Psize.
  5591. * quad directive:                       Quad.
  5592. * quad directive, i386:                 i386-Float.
  5593. * reserve directive, SPARC:             Sparc-Directives.
  5594. * sbttl directive:                      Sbttl.
  5595. * scl directive:                        Scl.
  5596. * section directive:                    Section.
  5597. * sect directive, AMD 29K:              AMD29K Directives.
  5598. * seg directive, SPARC:                 Sparc-Directives.
  5599. * set directive:                        Set.
  5600. * short directive:                      Short.
  5601. * single directive:                     Single.
  5602. * single directive, i386:               i386-Float.
  5603. * size directive:                       Size.
  5604. * skip directive, M680x0:               M68K-Directives.
  5605. * skip directive, SPARC:                Sparc-Directives.
  5606. * space directive:                      Space.
  5607. * stabX directives:                     Stab.
  5608. * stabd directive:                      Stab.
  5609. * stabn directive:                      Stab.
  5610. * stabs directive:                      Stab.
  5611. * sysproc directive, i960:              Directives-i960.
  5612. * tag directive:                        Tag.
  5613. * text directive:                       Text.
  5614. * tfloat directive, i386:               i386-Float.
  5615. * title directive:                      Title.
  5616. * type directive:                       Type.
  5617. * use directive, AMD 29K:               AMD29K Directives.
  5618. * val directive:                        Val.
  5619. * word directive:                       Word.
  5620. * word directive, H8/300:               H8/300 Directives.
  5621. * word directive, H8/500:               H8/500 Directives.
  5622. * word directive, i386:                 i386-Float.
  5623. * word directive, SH:                   SH Directives.
  5624. * word directive, SPARC:                Sparc-Directives.
  5625. * MIT:                                  M68K-Syntax.
  5626. * a.out:                                Object.
  5627. * absolute section:                     Ld Sections.
  5628. * addition, permitted arguments:        Infix Ops.
  5629. * addresses:                            Expressions.
  5630. * addresses, format of:                 Secs Background.
  5631. * addressing modes, H8/300:             H8/300-Addressing.
  5632. * addressing modes, H8/500:             H8/500-Addressing.
  5633. * addressing modes, M680x0:             M68K-Syntax.
  5634. * addressing modes, M680x0:             M68K-Moto-Syntax.
  5635. * addressing modes, SH:                 SH-Addressing.
  5636. * addressing modes, Z8000:              Z8000-Addressing.
  5637. * advancing location counter:           Org.
  5638. * altered difference tables:            Word.
  5639. * alternate syntax for the 680x0:       M68K-Moto-Syntax.
  5640. * AMD 29K floating point (IEEE):        AMD29K Floating Point.
  5641. * AMD 29K identifiers:                  AMD29K-Chars.
  5642. * AMD 29K line comment character:       AMD29K-Chars.
  5643. * AMD 29K line separator:               AMD29K-Chars.
  5644. * AMD 29K machine directives:           AMD29K Directives.
  5645. * AMD 29K opcodes:                      AMD29K Opcodes.
  5646. * AMD 29K options (none):               AMD29K Options.
  5647. * AMD 29K protected registers:          AMD29K-Regs.
  5648. * AMD 29K register names:               AMD29K-Regs.
  5649. * AMD 29K special purpose registers:    AMD29K-Regs.
  5650. * AMD 29K statement separator:          AMD29K-Chars.
  5651. * AMD 29K support:                      AMD29K-Dependent.
  5652. * architecture options, i960:           Options-i960.
  5653. * architecture options, M680x0:         M68K-Opts.
  5654. * architectures, SPARC:                 Sparc-Opts.
  5655. * arguments for addition:               Infix Ops.
  5656. * arguments for subtraction:            Infix Ops.
  5657. * arguments in expressions:             Arguments.
  5658. * arithmetic functions:                 Operators.
  5659. * arithmetic operands:                  Arguments.
  5660. * assembler internal logic error:       As Sections.
  5661. * assembler, and linker:                Secs Background.
  5662. * assembly listings, enabling:          a.
  5663. * assigning values to symbols:          Equ.
  5664. * assigning values to symbols:          Setting Symbols.
  5665. * attributes, symbol:                   Symbol Attributes.
  5666. * auxiliary attributes, COFF symbols:   COFF Symbols.
  5667. * auxiliary symbol information, COFF:   Dim.
  5668. * Av7:                                  Sparc-Opts.
  5669. * backslash (\\):                       Strings.
  5670. * backspace (\b):                       Strings.
  5671. * bignums:                              Bignums.
  5672. * binary integers:                      Integers.
  5673. * bitfields, not supported on VAX:      VAX-no.
  5674. * block:                                Z8000 Directives.
  5675. * branch improvement, M680x0:           M68K-Branch.
  5676. * branch improvement, VAX:              VAX-branch.
  5677. * branch recording, i960:               Options-i960.
  5678. * branch statistics table, i960:        Options-i960.
  5679. * bss section:                          bss.
  5680. * bss section:                          Ld Sections.
  5681. * bus lock prefixes, i386:              i386-prefixes.
  5682. * bval:                                 Z8000 Directives.
  5683. * call instructions, i386:              i386-Opcodes.
  5684. * carriage return (\r):                 Strings.
  5685. * character constants:                  Characters.
  5686. * character escape codes:               Strings.
  5687. * character, single:                    Chars.
  5688. * characters used in symbols:           Symbol Intro.
  5689. * COFF auxiliary symbol information:    Dim.
  5690. * COFF named section:                   Section.
  5691. * COFF structure debugging:             Tag.
  5692. * COFF symbol attributes:               COFF Symbols.
  5693. * COFF symbol descriptor:               Desc.
  5694. * COFF symbol storage class:            Scl.
  5695. * COFF symbol type:                     Type.
  5696. * COFF symbols, debugging:              Def.
  5697. * COFF value attribute:                 Val.
  5698. * command line conventions:             Command Line.
  5699. * command-line options ignored, VAX:    Vax-Opts.
  5700. * comments:                             Comments.
  5701. * comments, M680x0:                     M68K-Chars.
  5702. * comments, removed by preprocessor:    Pre-processing.
  5703. * common variable storage:              bss.
  5704. * compare and jump expansions, i960:    Compare-and-branch-i960.
  5705. * compare/branch instructions, i960:    Compare-and-branch-i960.
  5706. * conditional assembly:                 If.
  5707. * constant, single character:           Chars.
  5708. * constants:                            Constants.
  5709. * constants, bignum:                    Bignums.
  5710. * constants, character:                 Characters.
  5711. * constants, converted by preprocessor: Pre-processing.
  5712. * constants, floating point:            Flonums.
  5713. * constants, integer:                   Integers.
  5714. * constants, number:                    Numbers.
  5715. * constants, string:                    Strings.
  5716. * continuing statements:                Statements.
  5717. * conversion instructions, i386:        i386-Opcodes.
  5718. * coprocessor wait, i386:               i386-prefixes.
  5719. * current address:                      Dot.
  5720. * current address, advancing:           Org.
  5721. * data and text sections, joining:      R.
  5722. * data section:                         Ld Sections.
  5723. * debuggers, and symbol order:          Symbols.
  5724. * debugging COFF symbols:               Def.
  5725. * decimal integers:                     Integers.
  5726. * deprecated directives:                Deprecated.
  5727. * descriptor, of a.out symbol:          Symbol Desc.
  5728. * difference tables altered:            Word.
  5729. * difference tables, warning:           K.
  5730. * directives and instructions:          Statements.
  5731. * directives, M680x0:                   M68K-Directives.
  5732. * directives, machine independent:      Pseudo Ops.
  5733. * directives, Z8000:                    Z8000 Directives.
  5734. * displacement sizing character, VAX:   VAX-operands.
  5735. * dot (symbol):                         Dot.
  5736. * doublequote (\"):                     Strings.
  5737. * eight-byte integer:                   Quad.
  5738. * empty expressions:                    Empty Exprs.
  5739. * EOF, newline must precede:            Statements.
  5740. * error messsages:                      Errors.
  5741. * escape codes, character:              Strings.
  5742. * even:                                 Z8000 Directives.
  5743. * expr (internal section):              As Sections.
  5744. * expression arguments:                 Arguments.
  5745. * expressions:                          Expressions.
  5746. * expressions, empty:                   Empty Exprs.
  5747. * expressions, integer:                 Integer Exprs.
  5748. * faster processing (-f):               f.
  5749. * file name, logical:                   App-File.
  5750. * file name, logical:                   File.
  5751. * files, including:                     Include.
  5752. * files, input:                         Input Files.
  5753. * filling memory:                       Space.
  5754. * floating point numbers:               Flonums.
  5755. * floating point numbers (double):      Double.
  5756. * floating point numbers (single):      Single.
  5757. * floating point numbers (single):      Float.
  5758. * floating point, AMD 29K (IEEE):       AMD29K Floating Point.
  5759. * floating point, H8/300 (IEEE):        H8/300 Floating Point.
  5760. * floating point, H8/500 (IEEE):        H8/500 Floating Point.
  5761. * floating point, i386:                 i386-Float.
  5762. * floating point, i960 (IEEE):          Floating Point-i960.
  5763. * floating point, M680x0:               M68K-Float.
  5764. * floating point, SH (IEEE):            SH Floating Point.
  5765. * floating point, SPARC (IEEE):         Sparc-Float.
  5766. * floating point, VAX:                  VAX-float.
  5767. * flonums:                              Flonums.
  5768. * format of error messages:             Errors.
  5769. * format of warning messages:           Errors.
  5770. * formfeed (\f):                        Strings.
  5771. * functions, in expressions:            Operators.
  5772. * global:                               Z8000 Directives.
  5773. * grouping data:                        Sub-Sections.
  5774. * H8/300 addressing modes:              H8/300-Addressing.
  5775. * H8/300 floating point (IEEE):         H8/300 Floating Point.
  5776. * H8/300 line comment character:        H8/300-Chars.
  5777. * H8/300 line separator:                H8/300-Chars.
  5778. * H8/300 machine directives (none):     H8/300 Directives.
  5779. * H8/300 opcode summary:                H8/300 Opcodes.
  5780. * H8/300 options (none):                H8/300 Options.
  5781. * H8/300 registers:                     H8/300-Regs.
  5782. * H8/300 size suffixes:                 H8/300 Opcodes.
  5783. * H8/300 support:                       H8/300-Dependent.
  5784. * H8/300H, assembling for:              H8/300 Directives.
  5785. * H8/500 addressing modes:              H8/500-Addressing.
  5786. * H8/500 floating point (IEEE):         H8/500 Floating Point.
  5787. * H8/500 line comment character:        H8/500-Chars.
  5788. * H8/500 line separator:                H8/500-Chars.
  5789. * H8/500 machine directives (none):     H8/500 Directives.
  5790. * H8/500 opcode summary:                H8/500 Opcodes.
  5791. * H8/500 options (none):                H8/500 Options.
  5792. * H8/500 registers:                     H8/500-Regs.
  5793. * H8/500 support:                       H8/500-Dependent.
  5794. * hexadecimal integers:                 Integers.
  5795. * i386 fwait instruction:               i386-Float.
  5796. * i386 mul, imul instructions:          i386-Notes.
  5797. * i386 conversion instructions:         i386-Opcodes.
  5798. * i386 floating point:                  i386-Float.
  5799. * i386 immediate operands:              i386-Syntax.
  5800. * i386 jump optimization:               i386-jumps.
  5801. * i386 jump, call, return:              i386-Syntax.
  5802. * i386 jump/call operands:              i386-Syntax.
  5803. * i386 memory references:               i386-Memory.
  5804. * i386 opcode naming:                   i386-Opcodes.
  5805. * i386 opcode prefixes:                 i386-prefixes.
  5806. * i386 options (none):                  i386-Options.
  5807. * i386 register operands:               i386-Syntax.
  5808. * i386 registers:                       i386-Regs.
  5809. * i386 sections:                        i386-Syntax.
  5810. * i386 size suffixes:                   i386-Syntax.
  5811. * i386 source, destination operands:    i386-Syntax.
  5812. * i386 support:                         i386-Dependent.
  5813. * i386 syntax compatibility:            i386-Syntax.
  5814. * i80306 support:                       i386-Dependent.
  5815. * i960 callj pseudo-opcode:             callj-i960.
  5816. * i960 architecture options:            Options-i960.
  5817. * i960 branch recording:                Options-i960.
  5818. * i960 compare and jump expansions:     Compare-and-branch-i960.
  5819. * i960 compare/branch instructions:     Compare-and-branch-i960.
  5820. * i960 floating point (IEEE):           Floating Point-i960.
  5821. * i960 machine directives:              Directives-i960.
  5822. * i960 opcodes:                         Opcodes for i960.
  5823. * i960 options:                         Options-i960.
  5824. * i960 support:                         i960-Dependent.
  5825. * identifiers, AMD 29K:                 AMD29K-Chars.
  5826. * immediate character, M680x0:          M68K-Chars.
  5827. * immediate character, VAX:             VAX-operands.
  5828. * immediate operands, i386:             i386-Syntax.
  5829. * indirect character, VAX:              VAX-operands.
  5830. * infix operators:                      Infix Ops.
  5831. * inhibiting interrupts, i386:          i386-prefixes.
  5832. * input:                                Input Files.
  5833. * input file linenumbers:               Input Files.
  5834. * instruction set, M680x0:              M68K-opcodes.
  5835. * instruction summary, H8/300:          H8/300 Opcodes.
  5836. * instruction summary, H8/500:          H8/500 Opcodes.
  5837. * instruction summary, SH:              SH Opcodes.
  5838. * instruction summary, Z8000:           Z8000 Opcodes.
  5839. * instructions and directives:          Statements.
  5840. * integer expressions:                  Integer Exprs.
  5841. * integer, 16-byte:                     Octa.
  5842. * integer, 8-byte:                      Quad.
  5843. * integers:                             Integers.
  5844. * integers, 16-bit:                     hword.
  5845. * integers, 32-bit:                     Int.
  5846. * integers, binary:                     Integers.
  5847. * integers, decimal:                    Integers.
  5848. * integers, hexadecimal:                Integers.
  5849. * integers, octal:                      Integers.
  5850. * integers, one byte:                   Byte.
  5851. * internal as sections:                 As Sections.
  5852. * invocation summary:                   Overview.
  5853. * joining text and data sections:       R.
  5854. * jump instructions, i386:              i386-Opcodes.
  5855. * jump optimization, i386:              i386-jumps.
  5856. * jump/call operands, i386:             i386-Syntax.
  5857. * label (:):                            Statements.
  5858. * labels:                               Labels.
  5859. * ld:                                   Object.
  5860. * length of symbols:                    Symbol Intro.
  5861. * line comment character:               Comments.
  5862. * line comment character, AMD 29K:      AMD29K-Chars.
  5863. * line comment character, H8/300:       H8/300-Chars.
  5864. * line comment character, H8/500:       H8/500-Chars.
  5865. * line comment character, M680x0:       M68K-Chars.
  5866. * line comment character, SH:           SH-Chars.
  5867. * line comment character, Z8000:        Z8000-Chars.
  5868. * line numbers, in input files:         Input Files.
  5869. * line numbers, in warnings/errors:     Errors.
  5870. * line separator character:             Statements.
  5871. * line separator, AMD 29K:              AMD29K-Chars.
  5872. * line separator, H8/300:               H8/300-Chars.
  5873. * line separator, H8/500:               H8/500-Chars.
  5874. * line separator, SH:                   SH-Chars.
  5875. * line separator, Z8000:                Z8000-Chars.
  5876. * lines starting with #:                Comments.
  5877. * linker:                               Object.
  5878. * linker, and assembler:                Secs Background.
  5879. * listing control, turning off:         Nolist.
  5880. * listing control, turning on:          List.
  5881. * listing control: new page:            Eject.
  5882. * listing control: paper size:          Psize.
  5883. * listing control: subtitle:            Sbttl.
  5884. * listing control: title line:          Title.
  5885. * listings, enabling:                   a.
  5886. * local common symbols:                 Lcomm.
  5887. * local labels, retaining in output:    L.
  5888. * local symbol names:                   Symbol Names.
  5889. * location counter:                     Dot.
  5890. * location counter, advancing:          Org.
  5891. * logical file name:                    File.
  5892. * logical file name:                    App-File.
  5893. * logical line number:                  Line.
  5894. * logical line numbers:                 Comments.
  5895. * lval:                                 Z8000 Directives.
  5896. * M680x0 addressing modes:              M68K-Moto-Syntax.
  5897. * M680x0 addressing modes:              M68K-Syntax.
  5898. * M680x0 architecture options:          M68K-Opts.
  5899. * M680x0 branch improvement:            M68K-Branch.
  5900. * M680x0 directives:                    M68K-Directives.
  5901. * M680x0 floating point:                M68K-Float.
  5902. * M680x0 immediate character:           M68K-Chars.
  5903. * M680x0 line comment character:        M68K-Chars.
  5904. * M680x0 opcodes:                       M68K-opcodes.
  5905. * M680x0 options:                       M68K-Opts.
  5906. * M680x0 pseudo-opcodes:                M68K-Branch.
  5907. * M680x0 size modifiers:                M68K-Syntax.
  5908. * M680x0 support:                       M68K-Dependent.
  5909. * M680x0 syntax:                        M68K-Moto-Syntax.
  5910. * M680x0 syntax:                        M68K-Syntax.
  5911. * machine dependencies:                 Machine Dependencies.
  5912. * machine directives, AMD 29K:          AMD29K Directives.
  5913. * machine directives, H8/300 (none):    H8/300 Directives.
  5914. * machine directives, H8/500 (none):    H8/500 Directives.
  5915. * machine directives, i960:             Directives-i960.
  5916. * machine directives, SH (none):        SH Directives.
  5917. * machine directives, SPARC:            Sparc-Directives.
  5918. * machine directives, VAX:              VAX-directives.
  5919. * machine independent directives:       Pseudo Ops.
  5920. * machine instructions (not covered):   Manual.
  5921. * machine-independent syntax:           Syntax.
  5922. * manual, structure and purpose:        Manual.
  5923. * memory references, i386:              i386-Memory.
  5924. * merging text and data sections:       R.
  5925. * messages from as:                     Errors.
  5926. * minus, permitted arguments:           Infix Ops.
  5927. * mnemonics for opcodes, VAX:           VAX-opcodes.
  5928. * mnemonics, H8/300:                    H8/300 Opcodes.
  5929. * mnemonics, H8/500:                    H8/500 Opcodes.
  5930. * mnemonics, SH:                        SH Opcodes.
  5931. * mnemonics, Z8000:                     Z8000 Opcodes.
  5932. * Motorola syntax for the 680x0:        M68K-Moto-Syntax.
  5933. * multi-line statements:                Statements.
  5934. * name:                                 Z8000 Directives.
  5935. * named section (COFF):                 Section.
  5936. * named sections:                       Ld Sections.
  5937. * names, symbol:                        Symbol Names.
  5938. * naming object file:                   o.
  5939. * new page, in listings:                Eject.
  5940. * newline (\n):                         Strings.
  5941. * newline, required at file end:        Statements.
  5942. * null-terminated strings:              Asciz.
  5943. * number constants:                     Numbers.
  5944. * numbered subsections:                 Sub-Sections.
  5945. * numbers, 16-bit:                      hword.
  5946. * numeric values:                       Expressions.
  5947. * object file:                          Object.
  5948. * object file format:                   Object Formats.
  5949. * object file name:                     o.
  5950. * obsolescent directives:               Deprecated.
  5951. * octal character code (\DDD):          Strings.
  5952. * octal integers:                       Integers.
  5953. * opcode mnemonics, VAX:                VAX-opcodes.
  5954. * opcode naming, i386:                  i386-Opcodes.
  5955. * opcode prefixes, i386:                i386-prefixes.
  5956. * opcode suffixes, i386:                i386-Syntax.
  5957. * opcode summary, H8/300:               H8/300 Opcodes.
  5958. * opcode summary, H8/500:               H8/500 Opcodes.
  5959. * opcode summary, SH:                   SH Opcodes.
  5960. * opcode summary, Z8000:                Z8000 Opcodes.
  5961. * opcodes for AMD 29K:                  AMD29K Opcodes.
  5962. * opcodes, i960:                        Opcodes for i960.
  5963. * opcodes, M680x0:                      M68K-opcodes.
  5964. * operand delimiters, i386:             i386-Syntax.
  5965. * operand notation, VAX:                VAX-operands.
  5966. * operands in expressions:              Arguments.
  5967. * operator precedence:                  Infix Ops.
  5968. * operators, in expressions:            Operators.
  5969. * operators, permitted arguments:       Infix Ops.
  5970. * option summary:                       Overview.
  5971. * options for AMD29K (none):            AMD29K Options.
  5972. * options for i386 (none):              i386-Options.
  5973. * options for SPARC:                    Sparc-Opts.
  5974. * options for VAX/VMS:                  Vax-Opts.
  5975. * options, all versions of as:          Invoking.
  5976. * options, command line:                Command Line.
  5977. * options, H8/300 (none):               H8/300 Options.
  5978. * options, H8/500 (none):               H8/500 Options.
  5979. * options, i960:                        Options-i960.
  5980. * options, M680x0:                      M68K-Opts.
  5981. * options, SH (none):                   SH Options.
  5982. * options, Z8000:                       Z8000 Options.
  5983. * other attribute, of a.out symbol:     Symbol Other.
  5984. * output file:                          Object.
  5985. * padding the location counter:         Align.
  5986. * page, in listings:                    Eject.
  5987. * paper size, for listings:             Psize.
  5988. * paths for .include:                   I.
  5989. * patterns, writing in memory:          Fill.
  5990. * plus, permitted arguments:            Infix Ops.
  5991. * precedence of operators:              Infix Ops.
  5992. * precision, floating point:            Flonums.
  5993. * prefix operators:                     Prefix Ops.
  5994. * prefixes, i386:                       i386-prefixes.
  5995. * preprocessing:                        Pre-processing.
  5996. * preprocessing, turning on and off:    Pre-processing.
  5997. * primary attributes, COFF symbols:     COFF Symbols.
  5998. * protected registers, AMD 29K:         AMD29K-Regs.
  5999. * pseudo-opcodes, M680x0:               M68K-Branch.
  6000. * pseudo-ops for branch, VAX:           VAX-branch.
  6001. * pseudo-ops, machine independent:      Pseudo Ops.
  6002. * purpose of GNU as:                    GNU Assembler.
  6003. * register names, AMD 29K:              AMD29K-Regs.
  6004. * register names, H8/300:               H8/300-Regs.
  6005. * register names, VAX:                  VAX-operands.
  6006. * register operands, i386:              i386-Syntax.
  6007. * registers, H8/500:                    H8/500-Regs.
  6008. * registers, i386:                      i386-Regs.
  6009. * registers, SH:                        SH-Regs.
  6010. * registers, Z8000:                     Z8000-Regs.
  6011. * relocation:                           Sections.
  6012. * relocation example:                   Ld Sections.
  6013. * repeat prefixes, i386:                i386-prefixes.
  6014. * return instructions, i386:            i386-Syntax.
  6015. * rsect:                                Z8000 Directives.
  6016. * search path for .include:             I.
  6017. * section override prefixes, i386:      i386-prefixes.
  6018. * section-relative addressing:          Secs Background.
  6019. * sections:                             Sections.
  6020. * sections in messages, internal:       As Sections.
  6021. * sections, i386:                       i386-Syntax.
  6022. * sections, named:                      Ld Sections.
  6023. * segm:                                 Z8000 Directives.
  6024. * SH addressing modes:                  SH-Addressing.
  6025. * SH floating point (IEEE):             SH Floating Point.
  6026. * SH line comment character:            SH-Chars.
  6027. * SH line separator:                    SH-Chars.
  6028. * SH machine directives (none):         SH Directives.
  6029. * SH opcode summary:                    SH Opcodes.
  6030. * SH options (none):                    SH Options.
  6031. * SH registers:                         SH-Regs.
  6032. * SH support:                           SH-Dependent.
  6033. * single character constant:            Chars.
  6034. * sixteen bit integers:                 hword.
  6035. * sixteen byte integer:                 Octa.
  6036. * size modifiers, M680x0:               M68K-Syntax.
  6037. * size prefixes, i386:                  i386-prefixes.
  6038. * size suffixes, H8/300:                H8/300 Opcodes.
  6039. * sizes operands, i386:                 i386-Syntax.
  6040. * source program:                       Input Files.
  6041. * source, destination operands; i386:   i386-Syntax.
  6042. * SPARC architectures:                  Sparc-Opts.
  6043. * SPARC floating point (IEEE):          Sparc-Float.
  6044. * SPARC machine directives:             Sparc-Directives.
  6045. * SPARC options:                        Sparc-Opts.
  6046. * SPARC support:                        Sparc-Dependent.
  6047. * special characters, M680x0:           M68K-Chars.
  6048. * special purpose registers, AMD 29K:   AMD29K-Regs.
  6049. * standard as sections:                 Secs Background.
  6050. * standard input, as input file:        Command Line.
  6051. * statement on multiple lines:          Statements.
  6052. * statement separator character:        Statements.
  6053. * statement separator, AMD 29K:         AMD29K-Chars.
  6054. * statement separator, H8/300:          H8/300-Chars.
  6055. * statement separator, H8/500:          H8/500-Chars.
  6056. * statement separator, SH:              SH-Chars.
  6057. * statement separator, Z8000:           Z8000-Chars.
  6058. * statements, structure of:             Statements.
  6059. * stopping the assembly:                Abort.
  6060. * string constants:                     Strings.
  6061. * string literals:                      Ascii.
  6062. * structure debugging, COFF:            Tag.
  6063. * subexpressions:                       Arguments.
  6064. * subtitles for listings:               Sbttl.
  6065. * subtraction, permitted arguments:     Infix Ops.
  6066. * summary of options:                   Overview.
  6067. * supporting files, including:          Include.
  6068. * suppressing warnings:                 W.
  6069. * sval:                                 Z8000 Directives.
  6070. * symbol attributes:                    Symbol Attributes.
  6071. * symbol attributes, a.out:             a.out Symbols.
  6072. * symbol attributes, COFF:              COFF Symbols.
  6073. * symbol descriptor, COFF:              Desc.
  6074. * symbol names:                         Symbol Names.
  6075. * symbol names, $ in:                   SH-Chars.
  6076. * symbol names, $ in:                   H8/500-Chars.
  6077. * symbol names, local:                  Symbol Names.
  6078. * symbol names, temporary:              Symbol Names.
  6079. * symbol storage class (COFF):          Scl.
  6080. * symbol type:                          Symbol Type.
  6081. * symbol type, COFF:                    Type.
  6082. * symbol value:                         Symbol Value.
  6083. * symbol value, setting:                Set.
  6084. * symbol values, assigning:             Setting Symbols.
  6085. * symbol, common:                       Comm.
  6086. * symbol, making visible to linker:     Global.
  6087. * symbolic debuggers, information for:  Stab.
  6088. * symbols:                              Symbols.
  6089. * symbols with lowercase, VAX/VMS:      Vax-Opts.
  6090. * symbols, assigning values to:         Equ.
  6091. * symbols, local common:                Lcomm.
  6092. * syntax compatibility, i386:           i386-Syntax.
  6093. * syntax, M680x0:                       M68K-Syntax.
  6094. * syntax, M680x0:                       M68K-Moto-Syntax.
  6095. * syntax, machine-independent:          Syntax.
  6096. * tab (\t):                             Strings.
  6097. * temporary symbol names:               Symbol Names.
  6098. * text and data sections, joining:      R.
  6099. * text section:                         Ld Sections.
  6100. * trusted compiler:                     f.
  6101. * turning preprocessing on and off:     Pre-processing.
  6102. * type of a symbol:                     Symbol Type.
  6103. * undefined section:                    Ld Sections.
  6104. * unsegm:                               Z8000 Directives.
  6105. * value attribute, COFF:                Val.
  6106. * value of a symbol:                    Symbol Value.
  6107. * VAX bitfields not supported:          VAX-no.
  6108. * VAX branch improvement:               VAX-branch.
  6109. * VAX command-line options ignored:     Vax-Opts.
  6110. * VAX displacement sizing character:    VAX-operands.
  6111. * VAX floating point:                   VAX-float.
  6112. * VAX immediate character:              VAX-operands.
  6113. * VAX indirect character:               VAX-operands.
  6114. * VAX machine directives:               VAX-directives.
  6115. * VAX opcode mnemonics:                 VAX-opcodes.
  6116. * VAX operand notation:                 VAX-operands.
  6117. * VAX register names:                   VAX-operands.
  6118. * VAX support:                          Vax-Dependent.
  6119. * Vax-11 C compatibility:               Vax-Opts.
  6120. * VAX/VMS options:                      Vax-Opts.
  6121. * version of as:                        v.
  6122. * VMS (VAX) options:                    Vax-Opts.
  6123. * warning for altered difference tables: K.
  6124. * warning messages:                     Errors.
  6125. * warnings, suppressing:                W.
  6126. * whitespace:                           Whitespace.
  6127. * whitespace, removed by preprocessor:  Pre-processing.
  6128. * wide floating point directives, VAX:  VAX-directives.
  6129. * writing patterns in memory:           Fill.
  6130. * wval:                                 Z8000 Directives.
  6131. * Z800 addressing modes:                Z8000-Addressing.
  6132. * Z8000 directives:                     Z8000 Directives.
  6133. * Z8000 line comment character:         Z8000-Chars.
  6134. * Z8000 line separator:                 Z8000-Chars.
  6135. * Z8000 opcode summary:                 Z8000 Opcodes.
  6136. * Z8000 options:                        Z8000 Options.
  6137. * Z8000 registers:                      Z8000-Regs.
  6138. * Z8000 support:                        Z8000-Dependent.
  6139. * zero-terminated strings:              Asciz.
  6140.  
  6141.  
  6142. 
  6143. Tag Table:
  6144. Node: Top1138
  6145. Node: Overview1821
  6146. Node: Manual5499
  6147. Node: GNU Assembler6433
  6148. Node: Object Formats7603
  6149. Node: Command Line8045
  6150. Node: Input Files9122
  6151. Node: Object11025
  6152. Node: Errors11965
  6153. Node: Invoking13157
  6154. Node: a14483
  6155. Node: D15575
  6156. Node: f15795
  6157. Node: I16295
  6158. Node: K16832
  6159. Node: L17126
  6160. Node: o17776
  6161. Node: R18222
  6162. Node: v19125
  6163. Node: W19371
  6164. Node: Syntax19938
  6165. Node: Pre-processing20525
  6166. Node: Whitespace21988
  6167. Node: Comments22374
  6168. Node: Symbol Intro24179
  6169. Node: Statements24857
  6170. Node: Constants26907
  6171. Node: Characters27528
  6172. Node: Strings28016
  6173. Node: Chars30035
  6174. Node: Numbers30771
  6175. Node: Integers31297
  6176. Node: Bignums31935
  6177. Node: Flonums32273
  6178. Node: Sections33800
  6179. Node: Secs Background34158
  6180. Node: Ld Sections38565
  6181. Node: As Sections40949
  6182. Node: Sub-Sections41834
  6183. Node: bss44878
  6184. Node: Symbols45457
  6185. Node: Labels46099
  6186. Node: Setting Symbols46518
  6187. Node: Symbol Names46879
  6188. Node: Dot49827
  6189. Node: Symbol Attributes50267
  6190. Node: Symbol Value50936
  6191. Node: Symbol Type51965
  6192. Node: a.out Symbols52339
  6193. Node: Symbol Desc52584
  6194. Node: Symbol Other52861
  6195. Node: COFF Symbols53012
  6196. Node: Expressions53616
  6197. Node: Empty Exprs53942
  6198. Node: Integer Exprs54282
  6199. Node: Arguments54667
  6200. Node: Operators55759
  6201. Node: Prefix Ops56080
  6202. Node: Infix Ops56394
  6203. Node: Pseudo Ops58192
  6204. Node: Abort61456
  6205. Node: ABORT61852
  6206. Node: Align62109
  6207. Node: App-File62801
  6208. Node: Ascii63333
  6209. Node: Asciz63633
  6210. Node: Byte63866
  6211. Node: Comm64093
  6212. Node: Data64645
  6213. Node: Def64950
  6214. Node: Desc65313
  6215. Node: Dim65805
  6216. Node: Double66191
  6217. Node: Eject66517
  6218. Node: Else66680
  6219. Node: Endef66964
  6220. Node: Endif67281
  6221. Node: Equ67527
  6222. Node: Extern67760
  6223. Node: File68007
  6224. Node: Fill68653
  6225. Node: Float69605
  6226. Node: Global69936
  6227. Node: hword70473
  6228. Node: Ident70789
  6229. Node: If71084
  6230. Node: Include71933
  6231. Node: Int72468
  6232. Node: Lcomm72841
  6233. Node: Lflags73310
  6234. Node: Line73492
  6235. Node: Ln74541
  6236. Node: List74680
  6237. Node: Long75272
  6238. Node: Nolist75438
  6239. Node: Octa75850
  6240. Node: Org76171
  6241. Node: Psize77454
  6242. Node: Quad78127
  6243. Node: Sbttl78563
  6244. Node: Scl78916
  6245. Node: Section79410
  6246. Node: Set79817
  6247. Node: Short80537
  6248. Node: Single80846
  6249. Node: Size81178
  6250. Node: Space81569
  6251. Node: Stab82101
  6252. Node: Tag84102
  6253. Node: Text84603
  6254. Node: Title84910
  6255. Node: Type85277
  6256. Node: Val85648
  6257. Node: Word85998
  6258. Node: Deprecated87866
  6259. Node: Machine Dependencies88095
  6260. Node: Vax-Dependent89433
  6261. Node: Vax-Opts89936
  6262. Node: VAX-float92213
  6263. Node: VAX-directives92829
  6264. Node: VAX-opcodes93673
  6265. Node: VAX-branch94046
  6266. Node: VAX-operands96542
  6267. Node: VAX-no97273
  6268. Node: AMD29K-Dependent97494
  6269. Node: AMD29K Options97895
  6270. Node: AMD29K Syntax98064
  6271. Node: AMD29K-Chars98297
  6272. Node: AMD29K-Regs98598
  6273. Node: AMD29K Floating Point99857
  6274. Node: AMD29K Directives100058
  6275. Node: AMD29K Opcodes101461
  6276. Node: H8/300-Dependent101792
  6277. Node: H8/300 Options102193
  6278. Node: H8/300 Syntax102369
  6279. Node: H8/300-Chars102651
  6280. Node: H8/300-Regs102930
  6281. Node: H8/300-Addressing103829
  6282. Node: H8/300 Floating Point104850
  6283. Node: H8/300 Directives105161
  6284. Node: H8/300 Opcodes105675
  6285. Node: H8/500-Dependent114023
  6286. Node: H8/500 Options114420
  6287. Node: H8/500 Syntax114596
  6288. Node: H8/500-Chars114878
  6289. Node: H8/500-Regs115164
  6290. Node: H8/500-Addressing115915
  6291. Node: H8/500 Floating Point116527
  6292. Node: H8/500 Directives116727
  6293. Node: H8/500 Opcodes117041
  6294. Node: SH-Dependent122149
  6295. Node: SH Options122528
  6296. Node: SH Syntax122688
  6297. Node: SH-Chars122942
  6298. Node: SH-Regs123216
  6299. Node: SH-Addressing123810
  6300. Node: SH Floating Point124699
  6301. Node: SH Directives124879
  6302. Node: SH Opcodes125079
  6303. Node: i960-Dependent129321
  6304. Node: Options-i960129706
  6305. Node: Floating Point-i960133587
  6306. Node: Directives-i960133839
  6307. Node: Opcodes for i960135854
  6308. Node: callj-i960136455
  6309. Node: Compare-and-branch-i960136933
  6310. Node: M68K-Dependent138815
  6311. Node: M68K-Opts139265
  6312. Node: M68K-Syntax140599
  6313. Node: M68K-Moto-Syntax142424
  6314. Node: M68K-Float143913
  6315. Node: M68K-Directives144694
  6316. Node: M68K-opcodes145227
  6317. Node: M68K-Branch145434
  6318. Node: M68K-Chars148257
  6319. Node: Sparc-Dependent148607
  6320. Node: Sparc-Opts148922
  6321. Node: Sparc-Float149851
  6322. Node: Sparc-Directives150028
  6323. Node: i386-Dependent151073
  6324. Node: i386-Options151663
  6325. Node: i386-Syntax151802
  6326. Node: i386-Opcodes153747
  6327. Node: i386-Regs155861
  6328. Node: i386-prefixes156997
  6329. Node: i386-Memory158661
  6330. Node: i386-jumps160934
  6331. Node: i386-Float162045
  6332. Node: i386-Notes164030
  6333. Node: Z8000-Dependent164866
  6334. Node: Z8000 Options165826
  6335. Node: Z8000 Syntax165996
  6336. Node: Z8000-Chars166267
  6337. Node: Z8000-Regs166480
  6338. Node: Z8000-Addressing167247
  6339. Node: Z8000 Directives168185
  6340. Node: Z8000 Opcodes169738
  6341. Node: Acknowledgements179669
  6342. Node: Copying183799
  6343. Node: Index202971
  6344. 
  6345. End Tag Table
  6346.