+++ /dev/null
-This is Info file as.info, produced by Makeinfo-1.55 from the input
-file ./as.texinfo.
-
-START-INFO-DIR-ENTRY
-* As:: The GNU assembler.
-END-INFO-DIR-ENTRY
-
- This file documents the GNU Assembler "as".
-
- Copyright (C) 1991, 1992, 1993 Free Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the section entitled "GNU General Public License" is included
-exactly as in the original, and provided that the entire resulting
-derived work is distributed under the terms of a permission notice
-identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the section entitled "GNU General Public License"
-may be included in a translation approved by the Free Software
-Foundation instead of in the original English.
-
-\1f
-Indirect:
-as.info-1: 1145
-as.info-2: 50499
-as.info-3: 99245
-as.info-4: 149134
-as.info-5: 184796
-as.info-6: 203973
-\1f
-Tag Table:
-(Indirect)
-Node: Top\7f1145
-Node: Overview\7f1833
-Node: Manual\7f5516
-Node: GNU Assembler\7f6455
-Node: Object Formats\7f7630
-Node: Command Line\7f8077
-Node: Input Files\7f9159
-Node: Object\7f11067
-Node: Errors\7f12012
-Node: Invoking\7f13209
-Node: a\7f14540
-Node: D\7f15637
-Node: f\7f15862
-Node: I\7f16367
-Node: K\7f16909
-Node: L\7f17208
-Node: o\7f17863
-Node: R\7f18314
-Node: v\7f19222
-Node: W\7f19473
-Node: Syntax\7f20045
-Node: Pre-processing\7f20637
-Node: Whitespace\7f22105
-Node: Comments\7f22496
-Node: Symbol Intro\7f24306
-Node: Statements\7f24989
-Node: Constants\7f27044
-Node: Characters\7f27670
-Node: Strings\7f28163
-Node: Chars\7f30187
-Node: Numbers\7f30928
-Node: Integers\7f31459
-Node: Bignums\7f32102
-Node: Flonums\7f32445
-Node: Sections\7f33977
-Node: Secs Background\7f34340
-Node: Ld Sections\7f38752
-Node: As Sections\7f41141
-Node: Sub-Sections\7f42031
-Node: bss\7f45080
-Node: Symbols\7f45664
-Node: Labels\7f46311
-Node: Setting Symbols\7f46735
-Node: Symbol Names\7f47101
-Node: Dot\7f50054
-Node: Symbol Attributes\7f50499
-Node: Symbol Value\7f51173
-Node: Symbol Type\7f52207
-Node: a.out Symbols\7f52586
-Node: Symbol Desc\7f52836
-Node: Symbol Other\7f53118
-Node: COFF Symbols\7f53274
-Node: Expressions\7f53883
-Node: Empty Exprs\7f54214
-Node: Integer Exprs\7f54559
-Node: Arguments\7f54949
-Node: Operators\7f56046
-Node: Prefix Ops\7f56372
-Node: Infix Ops\7f56691
-Node: Pseudo Ops\7f58494
-Node: Abort\7f61763
-Node: ABORT\7f62164
-Node: Align\7f62426
-Node: App-File\7f63123
-Node: Ascii\7f63660
-Node: Asciz\7f63965
-Node: Byte\7f64203
-Node: Comm\7f64435
-Node: Data\7f64992
-Node: Def\7f65302
-Node: Desc\7f65670
-Node: Dim\7f66167
-Node: Double\7f66558
-Node: Eject\7f66889
-Node: Else\7f67057
-Node: Endef\7f67346
-Node: Endif\7f67668
-Node: Equ\7f67919
-Node: Extern\7f68157
-Node: File\7f68409
-Node: Fill\7f69060
-Node: Float\7f70017
-Node: Global\7f70353
-Node: hword\7f70895
-Node: Ident\7f71216
-Node: If\7f71516
-Node: Include\7f72370
-Node: Int\7f72910
-Node: Lcomm\7f73288
-Node: Lflags\7f73762
-Node: Line\7f73949
-Node: Ln\7f75003
-Node: List\7f75147
-Node: Long\7f75744
-Node: Nolist\7f75915
-Node: Octa\7f76332
-Node: Org\7f76658
-Node: Psize\7f77946
-Node: Quad\7f78624
-Node: Sbttl\7f79065
-Node: Scl\7f79423
-Node: Section\7f79922
-Node: Set\7f80334
-Node: Short\7f81059
-Node: Single\7f81373
-Node: Size\7f81710
-Node: Space\7f82106
-Node: Stab\7f82643
-Node: Tag\7f84649
-Node: Text\7f85155
-Node: Title\7f85467
-Node: Type\7f85839
-Node: Val\7f86215
-Node: Word\7f86570
-Node: Deprecated\7f88443
-Node: Machine Dependencies\7f88677
-Node: Vax-Dependent\7f90020
-Node: Vax-Opts\7f90528
-Node: VAX-float\7f92810
-Node: VAX-directives\7f93431
-Node: VAX-opcodes\7f94280
-Node: VAX-branch\7f94658
-Node: VAX-operands\7f97159
-Node: VAX-no\7f97895
-Node: AMD29K-Dependent\7f98121
-Node: AMD29K Options\7f98527
-Node: AMD29K Syntax\7f98701
-Node: AMD29K-Chars\7f98939
-Node: AMD29K-Regs\7f99245
-Node: AMD29K Floating Point\7f100509
-Node: AMD29K Directives\7f100715
-Node: AMD29K Opcodes\7f102123
-Node: H8/300-Dependent\7f102459
-Node: H8/300 Options\7f102865
-Node: H8/300 Syntax\7f103046
-Node: H8/300-Chars\7f103333
-Node: H8/300-Regs\7f103617
-Node: H8/300-Addressing\7f104521
-Node: H8/300 Floating Point\7f105547
-Node: H8/300 Directives\7f105863
-Node: H8/300 Opcodes\7f106382
-Node: H8/500-Dependent\7f114735
-Node: H8/500 Options\7f115137
-Node: H8/500 Syntax\7f115318
-Node: H8/500-Chars\7f115605
-Node: H8/500-Regs\7f115896
-Node: H8/500-Addressing\7f116652
-Node: H8/500 Floating Point\7f117269
-Node: H8/500 Directives\7f117474
-Node: H8/500 Opcodes\7f117793
-Node: SH-Dependent\7f122906
-Node: SH Options\7f123290
-Node: SH Syntax\7f123455
-Node: SH-Chars\7f123714
-Node: SH-Regs\7f123993
-Node: SH-Addressing\7f124592
-Node: SH Floating Point\7f125486
-Node: SH Directives\7f125671
-Node: SH Opcodes\7f125876
-Node: i960-Dependent\7f130123
-Node: Options-i960\7f130513
-Node: Floating Point-i960\7f134399
-Node: Directives-i960\7f134656
-Node: Opcodes for i960\7f136676
-Node: callj-i960\7f137282
-Node: Compare-and-branch-i960\7f137765
-Node: M68K-Dependent\7f139652
-Node: M68K-Opts\7f140107
-Node: M68K-Syntax\7f141446
-Node: M68K-Moto-Syntax\7f143276
-Node: M68K-Float\7f144770
-Node: M68K-Directives\7f145556
-Node: M68K-opcodes\7f146094
-Node: M68K-Branch\7f146306
-Node: M68K-Chars\7f149134
-Node: Sparc-Dependent\7f149489
-Node: Sparc-Opts\7f149809
-Node: Sparc-Float\7f150743
-Node: Sparc-Directives\7f150925
-Node: i386-Dependent\7f151975
-Node: i386-Options\7f152570
-Node: i386-Syntax\7f152714
-Node: i386-Opcodes\7f154664
-Node: i386-Regs\7f156783
-Node: i386-prefixes\7f157924
-Node: i386-Memory\7f159593
-Node: i386-jumps\7f161871
-Node: i386-Float\7f162987
-Node: i386-Notes\7f164977
-Node: Z8000-Dependent\7f165818
-Node: Z8000 Options\7f166783
-Node: Z8000 Syntax\7f166958
-Node: Z8000-Chars\7f167234
-Node: Z8000-Regs\7f167452
-Node: Z8000-Addressing\7f168224
-Node: Z8000 Directives\7f169167
-Node: Z8000 Opcodes\7f170725
-Node: Acknowledgements\7f180661
-Node: Copying\7f184796
-Node: Index\7f203973
-\1f
-End Tag Table
+++ /dev/null
-This is Info file as.info, produced by Makeinfo-1.55 from the input
-file ./as.texinfo.
-
-START-INFO-DIR-ENTRY
-* As:: The GNU assembler.
-END-INFO-DIR-ENTRY
-
- This file documents the GNU Assembler "as".
-
- Copyright (C) 1991, 1992, 1993 Free Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the section entitled "GNU General Public License" is included
-exactly as in the original, and provided that the entire resulting
-derived work is distributed under the terms of a permission notice
-identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the section entitled "GNU General Public License"
-may be included in a translation approved by the Free Software
-Foundation instead of in the original English.
-
-\1f
-File: as.info, Node: Top, Next: Overview, Prev: (DIR), Up: (DIR)
-
-Using as
-********
-
- This file is a user guide to the GNU assembler `as'.
-
-* Menu:
-
-* Overview:: Overview
-* Invoking:: Command-Line Options
-* Syntax:: Syntax
-* Sections:: Sections and Relocation
-* Symbols:: Symbols
-* Expressions:: Expressions
-* Pseudo Ops:: Assembler Directives
-* Machine Dependencies:: Machine Dependent Features
-
-* Copying:: GNU GENERAL PUBLIC LICENSE
-
-* Acknowledgements:: Who Did What
-
-* Index:: Index
-
-\1f
-File: as.info, Node: Overview, Next: Invoking, Prev: Top, Up: Top
-
-Overview
-********
-
- Here is a brief summary of how to invoke `as'. For details, *note
-Comand-Line Options: Invoking..
-
- as [ -a[dhlns] ] [ -D ] [ -f ]
- [ -I PATH ] [ -K ] [ -L ]
- [ -o OBJFILE ] [ -R ] [ -v ] [ -w ]
- [ -Av6 | -Av7 | -Av8 | -Asparclite | -bump ]
- [ -ACA | -ACA_A | -ACB | -ACC | -AKA | -AKB | -AKC | -AMC ]
- [ -b ] [ -norelax ]
- [ -l ] [ -m68000 | -m68010 | -m68020 | ... ]
- [ -- | FILES ... ]
-
-`-a[dhlns]'
- Turn on listings; `-ad', omit debugging pseudo-ops from listing,
- `-ah', include high-level source, `-al', assembly listing, `-an',
- no forms processing, `-as', symbols. These options may be
- combined; *e.g.*, `-aln' for assembly listing without forms
- processing. By itself, `-a' defaults to `-ahls' -- that is, all
- listings turned on.
-
-`-D'
- This option is accepted only for script compatibility with calls to
- other assemblers; it has no effect on `as'.
-
-`-f'
- "fast"--skip whitespace and comment preprocessing (assume source is
- compiler output)
-
-`-I PATH'
- Add PATH to the search list for `.include' directives
-
-`-K'
- Issue warnings when difference tables altered for long
- displacements.
-
-`-L'
- Keep (in symbol table) local symbols, starting with `L'
-
-`-o OBJFILE'
- Name the object-file output from `as'
-
-`-R'
- Fold data section into text section
-
-`-v'
- Announce `as' version
-
-`-W'
- Suppress warning messages
-
-`-- | FILES ...'
- Standard input, or source files to assemble.
-
- The following options are available when as is configured for the
-Intel 80960 processor.
-
-`-ACA | -ACA_A | -ACB | -ACC | -AKA | -AKB | -AKC | -AMC'
- Specify which variant of the 960 architecture is the target.
-
-`-b'
- Add code to collect statistics about branches taken.
-
-`-norelax'
- Do not alter compare-and-branch instructions for long
- displacements; error if necessary.
-
- The following options are available when as is configured for the
-Motorola 68000 series.
-
-`-l'
- Shorten references to undefined symbols, to one word instead of
- two.
-
-`-m68000 | -m68008 | -m68010 | -m68020 | -m68030 | -m68040'
-`| -m68302 | -m68331 | -m68332 | -m68333 | -m68340 | -mcpu32'
- Specify what processor in the 68000 family is the target. The
- default is normally the 68020, but this can be changed at
- configuration time.
-
-`-m68881 | -m68882 | -mno-68881 | -mno-68882'
- The target machine does (or does not) have a floating-point
- coprocessor. The default is to assume a coprocessor for 68020,
- 68030, and cpu32. Although the basic 68000 is not compatible with
- the 68881, a combination of the two can be specified, since it's
- possible to do emulation of the coprocessor instructions with the
- main processor.
-
-`-m68851 | -mno-68851'
- The target machine does (or does not) have a memory-management
- unit coprocessor. The default is to assume an MMU for 68020 and
- up.
-
- The following options are available when `as' is configured for the
-SPARC architecture:
-
-`-Av6 | -Av7 | -Av8 | -Asparclite'
- Explicitly select a variant of the SPARC architecture.
-
-`-bump'
- Warn when the assembler switches to another architecture.
-
-* Menu:
-
-* Manual:: Structure of this Manual
-* GNU Assembler:: as, the GNU Assembler
-* Object Formats:: Object File Formats
-* Command Line:: Command Line
-* Input Files:: Input Files
-* Object:: Output (Object) File
-* Errors:: Error and Warning Messages
-
-\1f
-File: as.info, Node: Manual, Next: GNU Assembler, Up: Overview
-
-Structure of this Manual
-========================
-
- This manual is intended to describe what you need to know to use GNU
-`as'. We cover the syntax expected in source files, including notation
-for symbols, constants, and expressions; the directives that `as'
-understands; and of course how to invoke `as'.
-
- This manual also describes some of the machine-dependent features of
-various flavors of the assembler.
-
- On the other hand, this manual is *not* intended as an introduction
-to programming in assembly language--let alone programming in general!
-In a similar vein, we make no attempt to introduce the machine
-architecture; we do *not* describe the instruction set, standard
-mnemonics, registers or addressing modes that are standard to a
-particular architecture. You may want to consult the manufacturer's
-machine architecture manual for this information.
-
-\1f
-File: as.info, Node: GNU Assembler, Next: Object Formats, Prev: Manual, Up: Overview
-
-as, the GNU Assembler
-=====================
-
- GNU `as' is really a family of assemblers. If you use (or have
-used) the GNU assembler on one architecture, you should find a fairly
-similar environment when you use it on another architecture. Each
-version has much in common with the others, including object file
-formats, most assembler directives (often called "pseudo-ops") and
-assembler syntax.
-
- `as' is primarily intended to assemble the output of the GNU C
-compiler `gcc' for use by the linker `ld'. Nevertheless, we've tried
-to make `as' assemble correctly everything that other assemblers for
-the same machine would assemble. Any exceptions are documented
-explicitly (*note Machine Dependencies::.). This doesn't mean `as'
-always uses the same syntax as another assembler for the same
-architecture; for example, we know of several incompatible versions of
-680x0 assembly language syntax.
-
- Unlike older assemblers, `as' is designed to assemble a source
-program in one pass of the source file. This has a subtle impact on the
-`.org' directive (*note `.org': Org.).
-
-\1f
-File: as.info, Node: Object Formats, Next: Command Line, Prev: GNU Assembler, Up: Overview
-
-Object File Formats
-===================
-
- The GNU assembler can be configured to produce several alternative
-object file formats. For the most part, this does not affect how you
-write assembly language programs; but directives for debugging symbols
-are typically different in different file formats. *Note Symbol
-Attributes: Symbol Attributes.
-
-\1f
-File: as.info, Node: Command Line, Next: Input Files, Prev: Object Formats, Up: Overview
-
-Command Line
-============
-
- After the program name `as', the command line may contain options
-and file names. Options may appear in any order, and may be before,
-after, or between file names. The order of file names is significant.
-
- `--' (two hyphens) by itself names the standard input file
-explicitly, as one of the files for `as' to assemble.
-
- Except for `--' any command line argument that begins with a hyphen
-(`-') is an option. Each option changes the behavior of `as'. No
-option changes the way another option works. An option is a `-'
-followed by one or more letters; the case of the letter is important.
-All options are optional.
-
- Some options expect exactly one file name to follow them. The file
-name may either immediately follow the option's letter (compatible with
-older assemblers) or it may be the next command argument (GNU
-standard). These two command lines are equivalent:
-
- as -o my-object-file.o mumble.s
- as -omy-object-file.o mumble.s
-
-\1f
-File: as.info, Node: Input Files, Next: Object, Prev: Command Line, Up: Overview
-
-Input Files
-===========
-
- We use the phrase "source program", abbreviated "source", to
-describe the program input to one run of `as'. The program may be in
-one or more files; how the source is partitioned into files doesn't
-change the meaning of the source.
-
- The source program is a concatenation of the text in all the files,
-in the order specified.
-
- Each time you run `as' it assembles exactly one source program. The
-source program is made up of one or more files. (The standard input is
-also a file.)
-
- You give `as' a command line that has zero or more input file names.
-The input files are read (from left file name to right). A command
-line argument (in any position) that has no special meaning is taken to
-be an input file name.
-
- If you give `as' no file names it attempts to read one input file
-from the `as' standard input, which is normally your terminal. You may
-have to type ctl-D to tell `as' there is no more program to assemble.
-
- Use `--' if you need to explicitly name the standard input file in
-your command line.
-
- If the source is empty, `as' will produce a small, empty object file.
-
-Filenames and Line-numbers
---------------------------
-
- There are two ways of locating a line in the input file (or files)
-and either may be used in reporting error messages. One way refers to
-a line number in a physical file; the other refers to a line number in a
-"logical" file. *Note Error and Warning Messages: Errors.
-
- "Physical files" are those files named in the command line given to
-`as'.
-
- "Logical files" are simply names declared explicitly by assembler
-directives; they bear no relation to physical files. Logical file names
-help error messages reflect the original source file, when `as' source
-is itself synthesized from other files. *Note `.app-file': App-File.
-
-\1f
-File: as.info, Node: Object, Next: Errors, Prev: Input Files, Up: Overview
-
-Output (Object) File
-====================
-
- Every time you run `as' it produces an output file, which is your
-assembly language program translated into numbers. This file is the
-object file, named `b.out', if `as' is configured for the Intel 80960,
-or unless you tell `as' to give it another name by using the `-o'
-option. Conventionally, object file names end with `.o'. The default
-name of `a.out' is used for historical reasons: older assemblers were
-capable of assembling self-contained programs directly into a runnable
-program. (For some formats, this isn't currently possible, but it can
-be done for `a.out' format.)
-
- The object file is meant for input to the linker `ld'. It contains
-assembled program code, information to help `ld' integrate the
-assembled program into a runnable file, and (optionally) symbolic
-information for the debugger.
-
-\1f
-File: as.info, Node: Errors, Prev: Object, Up: Overview
-
-Error and Warning Messages
-==========================
-
- `as' may write warnings and error messages to the standard error
-file (usually your terminal). This should not happen when a compiler
-runs `as' automatically. Warnings report an assumption made so that
-`as' could keep assembling a flawed program; errors report a grave
-problem that stops the assembly.
-
- Warning messages have the format
-
- file_name:NNN:Warning Message Text
-
-(where NNN is a line number). If a logical file name has been given
-(*note `.app-file': App-File.) it is used for the filename, otherwise
-the name of the current input file is used. If a logical line number
-was given (*note `.line': Line.) then it is used to calculate the
-number printed, otherwise the actual line in the current source file is
-printed. The message text is intended to be self explanatory (in the
-grand Unix tradition).
-
- Error messages have the format
- file_name:NNN:FATAL:Error Message Text
- The file name and line number are derived as for warning messages.
-The actual message text may be rather less explanatory because many of
-them aren't supposed to happen.
-
-\1f
-File: as.info, Node: Invoking, Next: Syntax, Prev: Overview, Up: Top
-
-Command-Line Options
-********************
-
- This chapter describes command-line options available in *all*
-versions of the GNU assembler; *note Machine Dependencies::., for
-options specific to particular machine architectures.
-
- If you are invoking `as' via the GNU C compiler (version 2), you can
-use the `-Wa' option to pass arguments through to the assembler. The
-assembler arguments must be separated from each other (and the `-Wa')
-by commas. For example:
-
- gcc -c -g -O -Wa,-alh,-L file.c
-
- will cause a listing to be emitted to standard output with high-level
-and assembly source.
-
- Many compiler command-line options, such as `-R' and many
-machine-specific options, will be automatically be passed to the
-assembler by the compiler, so usually you do not need to use this `-Wa'
-mechanism.
-
-* Menu:
-
-* a:: -a[dhlns] enable listings
-* D:: -D for compatibility
-* f:: -f to work faster
-* I:: -I for .include search path
-
-* K:: -K for difference tables
-
-* L:: -L to retain local labels
-* o:: -o to name the object file
-* R:: -R to join data and text sections
-* v:: -v to announce version
-* W:: -W to suppress warnings
-
-\1f
-File: as.info, Node: a, Next: D, Up: Invoking
-
-Enable Listings: `-a[dhlns]'
-============================
-
- These options enable listing output from the assembler. By itself,
-`-a' requests high-level, assembly, and symbols listing. Other letters
-may be used to select specific options for the list: `-ah' requests a
-high-level language listing, `-al' requests an output-program assembly
-listing, and `-as' requests a symbol table listing. High-level
-listings require that a compiler debugging option like `-g' be used,
-and that assembly listings (`-al') be requested also.
-
- The `-ad' option may be used to omit debugging pseudo-ops from the
-listing.
-
- Once you have specified one of these options, you can further control
-listing output and its appearance using the directives `.list',
-`.nolist', `.psize', `.eject', `.title', and `.sbttl'. The `-an'
-option turns off all forms processing. If you do not request listing
-output with one of the `-a' options, the listing-control directives
-have no effect.
-
- The letters after `-a' may be combined into one option, *e.g.*,
-`-aln'.
-
-\1f
-File: as.info, Node: D, Next: f, Prev: a, Up: Invoking
-
-`-D'
-====
-
- This option has no effect whatsoever, but it is accepted to make it
-more likely that scripts written for other assemblers will also work
-with `as'.
-
-\1f
-File: as.info, Node: f, Next: I, Prev: D, Up: Invoking
-
-Work Faster: `-f'
-=================
-
- `-f' should only be used when assembling programs written by a
-(trusted) compiler. `-f' stops the assembler from doing whitespace and
-comment pre-processing on the input file(s) before assembling them.
-*Note Pre-processing: Pre-processing.
-
- *Warning:* if the files actually need to be pre-processed (if they
- contain comments, for example), `as' will not work correctly if
- `-f' is used.
-
-\1f
-File: as.info, Node: I, Next: K, Prev: f, Up: Invoking
-
-`.include' search path: `-I' PATH
-=================================
-
- Use this option to add a PATH to the list of directories `as' will
-search for files specified in `.include' directives (*note `.include':
-Include.). You may use `-I' as many times as necessary to include a
-variety of paths. The current working directory is always searched
-first; after that, `as' searches any `-I' directories in the same order
-as they were specified (left to right) on the command line.
-
-\1f
-File: as.info, Node: K, Next: L, Prev: I, Up: Invoking
-
-Difference Tables: `-K'
-=======================
-
- `as' sometimes alters the code emitted for directives of the form
-`.word SYM1-SYM2'; *note `.word': Word.. You can use the `-K' option
-if you want a warning issued when this is done.
-
-\1f
-File: as.info, Node: L, Next: o, Prev: K, Up: Invoking
-
-Include Local Labels: `-L'
-==========================
-
- Labels beginning with `L' (upper case only) are called "local
-labels". *Note Symbol Names::. Normally you don't see such labels when
-debugging, because they are intended for the use of programs (like
-compilers) that compose assembler programs, not for your notice.
-Normally both `as' and `ld' discard such labels, so you don't normally
-debug with them.
-
- This option tells `as' to retain those `L...' symbols in the object
-file. Usually if you do this you also tell the linker `ld' to preserve
-symbols whose names begin with `L'.
-
-\1f
-File: as.info, Node: o, Next: R, Prev: L, Up: Invoking
-
-Name the Object File: `-o'
-==========================
-
- There is always one object file output when you run `as'. By
-default it has the name `a.out' (or `b.out', for Intel 960 targets
-only). You use this option (which takes exactly one filename) to give
-the object file a different name.
-
- Whatever the object file is called, `as' will overwrite any existing
-file of the same name.
-
-\1f
-File: as.info, Node: R, Next: v, Prev: o, Up: Invoking
-
-Join Data and Text Sections: `-R'
-=================================
-
- `-R' tells `as' to write the object file as if all data-section data
-lives in the text section. This is only done at the very last moment:
-your binary data are the same, but data section parts are relocated
-differently. The data section part of your object file is zero bytes
-long because all its bytes are appended to the text section. (*Note
-Sections and Relocation: Sections.)
-
- When you specify `-R' it would be possible to generate shorter
-address displacements (because we don't have to cross between text and
-data section). We refrain from doing this simply for compatibility with
-older versions of `as'. In future, `-R' may work this way.
-
- When `as' is configured for COFF output, this option is only useful
-if you use sections named `.text' and `.data'.
-
-\1f
-File: as.info, Node: v, Next: W, Prev: R, Up: Invoking
-
-Announce Version: `-v'
-======================
-
- You can find out what version of as is running by including the
-option `-v' (which you can also spell as `-version') on the command
-line.
-
-\1f
-File: as.info, Node: W, Prev: v, Up: Invoking
-
-Suppress Warnings: `-W'
-=======================
-
- `as' should never give a warning or error message when assembling
-compiler output. But programs written by people often cause `as' to
-give a warning that a particular assumption was made. All such
-warnings are directed to the standard error file. If you use this
-option, no warnings are issued. This option only affects the warning
-messages: it does not change any particular of how `as' assembles your
-file. Errors, which stop the assembly, are still reported.
-
-\1f
-File: as.info, Node: Syntax, Next: Sections, Prev: Invoking, Up: Top
-
-Syntax
-******
-
- This chapter describes the machine-independent syntax allowed in a
-source file. `as' syntax is similar to what many other assemblers use;
-it is inspired by the BSD 4.2 assembler, except that `as' does not
-assemble Vax bit-fields.
-
-* Menu:
-
-* Pre-processing:: Pre-processing
-* Whitespace:: Whitespace
-* Comments:: Comments
-* Symbol Intro:: Symbols
-* Statements:: Statements
-* Constants:: Constants
-
-\1f
-File: as.info, Node: Pre-processing, Next: Whitespace, Up: Syntax
-
-Pre-Processing
-==============
-
- The `as' internal pre-processor:
- * adjusts and removes extra whitespace. It leaves one space or tab
- before the keywords on a line, and turns any other whitespace on
- the line into a single space.
-
- * removes all comments, replacing them with a single space, or an
- appropriate number of newlines.
-
- * converts character constants into the appropriate numeric values.
-
- Note that it does not do macro processing, include file handling, or
-anything else you may get from your C compiler's pre-processor. You can
-do include file processing with the `.include' directive (*note
-`.include': Include.). Other "CPP" style pre-processing can be done
-with the GNU C compiler, by giving the input file a `.S' suffix; see
-the compiler documentation for details.
-
- Excess whitespace, comments, and character constants cannot be used
-in the portions of the input text that are not pre-processed.
-
- If the first line of an input file is `#NO_APP' or the `-f' option
-is given, the input file will not be pre-processed. Within such an
-input file, parts of the file can be pre-processed by putting a line
-that says `#APP' before the text that should be pre-processed, and
-putting a line that says `#NO_APP' after them. This feature is mainly
-intend to support `asm' statements in compilers whose output normally
-does not need to be pre-processed.
-
-\1f
-File: as.info, Node: Whitespace, Next: Comments, Prev: Pre-processing, Up: Syntax
-
-Whitespace
-==========
-
- "Whitespace" is one or more blanks or tabs, in any order.
-Whitespace is used to separate symbols, and to make programs neater for
-people to read. Unless within character constants (*note Character
-Constants: Characters.), any whitespace means the same as exactly one
-space.
-
-\1f
-File: as.info, Node: Comments, Next: Symbol Intro, Prev: Whitespace, Up: Syntax
-
-Comments
-========
-
- There are two ways of rendering comments to `as'. In both cases the
-comment is equivalent to one space.
-
- Anything from `/*' through the next `*/' is a comment. This means
-you may not nest these comments.
-
- /*
- The only way to include a newline ('\n') in a comment
- is to use this sort of comment.
- */
-
- /* This sort of comment does not nest. */
-
- Anything from the "line comment" character to the next newline is
-considered a comment and is ignored. The line comment character is `#'
-on the Vax; `#' on the i960; `!' on the SPARC; `|' on the 680x0; `;'
-for the AMD 29K family; `;' for the H8/300 family; `!' for the H8/500
-family; `!' for the Hitachi SH; `!' for the Z8000; see *Note Machine
-Dependencies::.
-
- On some machines there are two different line comment characters.
-One will only begin a comment if it is the first non-whitespace
-character on a line, while the other will always begin a comment.
-
- To be compatible with past assemblers, a special interpretation is
-given to lines that begin with `#'. Following the `#' an absolute
-expression (*note Expressions::.) is expected: this will be the
-logical line number of the next line. Then a string (*Note Strings::.)
-is allowed: if present it is a new logical file name. The rest of the
-line, if any, should be whitespace.
-
- If the first non-whitespace characters on the line are not numeric,
-the line is ignored. (Just like a comment.)
- # This is an ordinary comment.
- # 42-6 "new_file_name" # New logical file name
- # This is logical line # 36.
- This feature is deprecated, and may disappear from future versions
-of `as'.
-
-\1f
-File: as.info, Node: Symbol Intro, Next: Statements, Prev: Comments, Up: Syntax
-
-Symbols
-=======
-
- A "symbol" is one or more characters chosen from the set of all
-letters (both upper and lower case), digits and the three characters
-`_.$'. On most machines, you can also use `$' in symbol names;
-exceptions are noted in *Note Machine Dependencies::. No symbol may
-begin with a digit. Case is significant. There is no length limit:
-all characters are significant. Symbols are delimited by characters
-not in that set, or by the beginning of a file (since the source
-program must end with a newline, the end of a file is not a possible
-symbol delimiter). *Note Symbols::.
-
-\1f
-File: as.info, Node: Statements, Next: Constants, Prev: Symbol Intro, Up: Syntax
-
-Statements
-==========
-
- A "statement" ends at a newline character (`\n') or line separator
-character. (The line separator is usually `;', unless this conflicts
-with the comment character; *note Machine Dependencies::..) The
-newline or separator character is considered part of the preceding
-statement. Newlines and separators within character constants are an
-exception: they don't end statements.
-
- It is an error to end any statement with end-of-file: the last
-character of any input file should be a newline.
-
- You may write a statement on more than one line if you put a
-backslash (`\') immediately in front of any newlines within the
-statement. When `as' reads a backslashed newline both characters are
-ignored. You can even put backslashed newlines in the middle of symbol
-names without changing the meaning of your source program.
-
- An empty statement is allowed, and may include whitespace. It is
-ignored.
-
- A statement begins with zero or more labels, optionally followed by a
-key symbol which determines what kind of statement it is. The key
-symbol determines the syntax of the rest of the statement. If the
-symbol begins with a dot `.' then the statement is an assembler
-directive: typically valid for any computer. If the symbol begins with
-a letter the statement is an assembly language "instruction": it will
-assemble into a machine language instruction. Different versions of
-`as' for different computers will recognize different instructions. In
-fact, the same symbol may represent a different instruction in a
-different computer's assembly language.
-
- A label is a symbol immediately followed by a colon (`:').
-Whitespace before a label or after a colon is permitted, but you may not
-have whitespace between a label's symbol and its colon. *Note Labels::.
-
- label: .directive followed by something
- another_label: # This is an empty statement.
- instruction operand_1, operand_2, ...
-
-\1f
-File: as.info, Node: Constants, Prev: Statements, Up: Syntax
-
-Constants
-=========
-
- A constant is a number, written so that its value is known by
-inspection, without knowing any context. Like this:
- .byte 74, 0112, 092, 0x4A, 0X4a, 'J, '\J # All the same value.
- .ascii "Ring the bell\7" # A string constant.
- .octa 0x123456789abcdef0123456789ABCDEF0 # A bignum.
- .float 0f-314159265358979323846264338327\
- 95028841971.693993751E-40 # - pi, a flonum.
-
-* Menu:
-
-* Characters:: Character Constants
-* Numbers:: Number Constants
-
-\1f
-File: as.info, Node: Characters, Next: Numbers, Up: Constants
-
-Character Constants
--------------------
-
- There are two kinds of character constants. A "character" stands
-for one character in one byte and its value may be used in numeric
-expressions. String constants (properly called string *literals*) are
-potentially many bytes and their values may not be used in arithmetic
-expressions.
-
-* Menu:
-
-* Strings:: Strings
-* Chars:: Characters
-
-\1f
-File: as.info, Node: Strings, Next: Chars, Up: Characters
-
-Strings
-.......
-
- A "string" is written between double-quotes. It may contain
-double-quotes or null characters. The way to get special characters
-into a string is to "escape" these characters: precede them with a
-backslash `\' character. For example `\\' represents one backslash:
-the first `\' is an escape which tells `as' to interpret the second
-character literally as a backslash (which prevents `as' from
-recognizing the second `\' as an escape character). The complete list
-of escapes follows.
-
-`\b'
- Mnemonic for backspace; for ASCII this is octal code 010.
-
-`\f'
- Mnemonic for FormFeed; for ASCII this is octal code 014.
-
-`\n'
- Mnemonic for newline; for ASCII this is octal code 012.
-
-`\r'
- Mnemonic for carriage-Return; for ASCII this is octal code 015.
-
-`\t'
- Mnemonic for horizontal Tab; for ASCII this is octal code 011.
-
-`\ DIGIT DIGIT DIGIT'
- An octal character code. The numeric code is 3 octal digits. For
- compatibility with other Unix systems, 8 and 9 are accepted as
- digits: for example, `\008' has the value 010, and `\009' the
- value 011.
-
-`\\'
- Represents one `\' character.
-
-`\"'
- Represents one `"' character. Needed in strings to represent this
- character, because an unescaped `"' would end the string.
-
-`\ ANYTHING-ELSE'
- Any other character when escaped by `\' will give a warning, but
- assemble as if the `\' was not present. The idea is that if you
- used an escape sequence you clearly didn't want the literal
- interpretation of the following character. However `as' has no
- other interpretation, so `as' knows it is giving you the wrong
- code and warns you of the fact.
-
- Which characters are escapable, and what those escapes represent,
-varies widely among assemblers. The current set is what we think the
-BSD 4.2 assembler recognizes, and is a subset of what most C compilers
-recognize. If you are in doubt, don't use an escape sequence.
-
-\1f
-File: as.info, Node: Chars, Prev: Strings, Up: Characters
-
-Characters
-..........
-
- A single character may be written as a single quote immediately
-followed by that character. The same escapes apply to characters as to
-strings. So if you want to write the character backslash, you must
-write `'\\' where the first `\' escapes the second `\'. As you can
-see, the quote is an acute accent, not a grave accent. A newline
-immediately following an acute accent is taken as a literal character
-and does not count as the end of a statement. The value of a character
-constant in a numeric expression is the machine's byte-wide code for
-that character. `as' assumes your character code is ASCII: `'A' means
-65, `'B' means 66, and so on.
-
-\1f
-File: as.info, Node: Numbers, Prev: Characters, Up: Constants
-
-Number Constants
-----------------
-
- `as' distinguishes three kinds of numbers according to how they are
-stored in the target machine. *Integers* are numbers that would fit
-into an `int' in the C language. *Bignums* are integers, but they are
-stored in more than 32 bits. *Flonums* are floating point numbers,
-described below.
-
-* Menu:
-
-* Integers:: Integers
-* Bignums:: Bignums
-* Flonums:: Flonums
-
-\1f
-File: as.info, Node: Integers, Next: Bignums, Up: Numbers
-
-Integers
-........
-
- A binary integer is `0b' or `0B' followed by zero or more of the
-binary digits `01'.
-
- An octal integer is `0' followed by zero or more of the octal digits
-(`01234567').
-
- A decimal integer starts with a non-zero digit followed by zero or
-more digits (`0123456789').
-
- A hexadecimal integer is `0x' or `0X' followed by one or more
-hexadecimal digits chosen from `0123456789abcdefABCDEF'.
-
- Integers have the usual values. To denote a negative integer, use
-the prefix operator `-' discussed under expressions (*note Prefix
-Operators: Prefix Ops.).
-
-\1f
-File: as.info, Node: Bignums, Next: Flonums, Prev: Integers, Up: Numbers
-
-Bignums
-.......
-
- A "bignum" has the same syntax and semantics as an integer except
-that the number (or its negative) takes more than 32 bits to represent
-in binary. The distinction is made because in some places integers are
-permitted while bignums are not.
-
-\1f
-File: as.info, Node: Flonums, Prev: Bignums, Up: Numbers
-
-Flonums
-.......
-
- A "flonum" represents a floating point number. The translation is
-indirect: a decimal floating point number from the text is converted by
-`as' to a generic binary floating point number of more than sufficient
-precision. This generic floating point number is converted to a
-particular computer's floating point format (or formats) by a portion
-of `as' specialized to that computer.
-
- A flonum is written by writing (in order)
- * The digit `0'.
-
- * A letter, to tell `as' the rest of the number is a flonum. `e' is
- recommended. Case is not important.
-
- On the H8/300, H8/500, Hitachi SH, and AMD 29K architectures, the
- letter must be one of the letters `DFPRSX' (in upper or lower
- case).
-
- On the Intel 960 architecture, the letter must be one of the
- letters `DFT' (in upper or lower case).
-
- * An optional sign: either `+' or `-'.
-
- * An optional "integer part": zero or more decimal digits.
-
- * An optional "fractional part": `.' followed by zero or more
- decimal digits.
-
- * An optional exponent, consisting of:
-
- * An `E' or `e'.
-
- * Optional sign: either `+' or `-'.
-
- * One or more decimal digits.
-
- At least one of the integer part or the fractional part must be
-present. The floating point number has the usual base-10 value.
-
- `as' does all processing using integers. Flonums are computed
-independently of any floating point hardware in the computer running
-`as'.
-
-\1f
-File: as.info, Node: Sections, Next: Symbols, Prev: Syntax, Up: Top
-
-Sections and Relocation
-***********************
-
-* Menu:
-
-* Secs Background:: Background
-* Ld Sections:: ld Sections
-* As Sections:: as Internal Sections
-* Sub-Sections:: Sub-Sections
-* bss:: bss Section
-
-\1f
-File: as.info, Node: Secs Background, Next: Ld Sections, Up: Sections
-
-Background
-==========
-
- Roughly, a section is a range of addresses, with no gaps; all data
-"in" those addresses is treated the same for some particular purpose.
-For example there may be a "read only" section.
-
- The linker `ld' reads many object files (partial programs) and
-combines their contents to form a runnable program. When `as' emits an
-object file, the partial program is assumed to start at address 0.
-`ld' will assign the final addresses the partial program occupies, so
-that different partial programs don't overlap. This is actually an
-over-simplification, but it will suffice to explain how `as' uses
-sections.
-
- `ld' moves blocks of bytes of your program to their run-time
-addresses. These blocks slide to their run-time addresses as rigid
-units; their length does not change and neither does the order of bytes
-within them. Such a rigid unit is called a *section*. Assigning
-run-time addresses to sections is called "relocation". It includes the
-task of adjusting mentions of object-file addresses so they refer to
-the proper run-time addresses. For the H8/300 and H8/500, and for the
-Hitachi SH, `as' pads sections if needed to ensure they end on a word
-(sixteen bit) boundary.
-
- An object file written by `as' has at least three sections, any of
-which may be empty. These are named "text", "data" and "bss" sections.
-
- When it generates COFF output, `as' can also generate whatever other
-named sections you specify using the `.section' directive (*note
-`.section': Section.). If you don't use any directives that place
-output in the `.text' or `.data' sections, these sections will still
-exist, but will be empty.
-
- Within the object file, the text section starts at address `0', the
-data section follows, and the bss section follows the data section.
-
- To let `ld' know which data will change when the sections are
-relocated, and how to change that data, `as' also writes to the object
-file details of the relocation needed. To perform relocation `ld' must
-know, each time an address in the object file is mentioned:
- * Where in the object file is the beginning of this reference to an
- address?
-
- * How long (in bytes) is this reference?
-
- * Which section does the address refer to? What is the numeric
- value of
- (ADDRESS) - (START-ADDRESS OF SECTION)?
-
- * Is the reference to an address "Program-Counter relative"?
-
- In fact, every address `as' ever uses is expressed as
- (SECTION) + (OFFSET INTO SECTION)
-
-Further, every expression `as' computes is of this section-relative
-nature. "Absolute expression" means an expression with section
-"absolute" (*note Ld Sections::.). A "pass1 expression" means an
-expression with section "pass1" (*note as Internal Sections: As
-Sections.). In this manual we use the notation {SECNAME N} to mean
-"offset N into section SECNAME".
-
- Apart from text, data and bss sections you need to know about the
-"absolute" section. When `ld' mixes partial programs, addresses in the
-absolute section remain unchanged. For example, address `{absolute 0}'
-is "relocated" to run-time address 0 by `ld'. Although two partial
-programs' data sections will not overlap addresses after linking, *by
-definition* their absolute sections will overlap. Address `{absolute
-239}' in one partial program will always be the same address when the
-program is running as address `{absolute 239}' in any other partial
-program.
-
- The idea of sections is extended to the "undefined" section. Any
-address whose section is unknown at assembly time is by definition
-rendered {undefined U}--where U will be filled in later. Since numbers
-are always defined, the only way to generate an undefined address is to
-mention an undefined symbol. A reference to a named common block would
-be such a symbol: its value is unknown at assembly time so it has
-section *undefined*.
-
- By analogy the word *section* is used to describe groups of sections
-in the linked program. `ld' puts all partial programs' text sections
-in contiguous addresses in the linked program. It is customary to
-refer to the *text section* of a program, meaning all the addresses of
-all partial program's text sections. Likewise for data and bss
-sections.
-
- Some sections are manipulated by `ld'; others are invented for use
-of `as' and have no meaning except during assembly.
-
-\1f
-File: as.info, Node: Ld Sections, Next: As Sections, Prev: Secs Background, Up: Sections
-
-ld Sections
-===========
-
- `ld' deals with just four kinds of sections, summarized below.
-
-*named sections*
-*text section*
-*data section*
- These sections hold your program. `as' and `ld' treat them as
- separate but equal sections. Anything you can say of one section
- is true another. When the program is running, however, it is
- customary for the text section to be unalterable. The text
- section is often shared among processes: it will contain
- instructions, constants and the like. The data section of a
- running program is usually alterable: for example, C variables
- would be stored in the data section.
-
-*bss section*
- This section contains zeroed bytes when your program begins
- running. It is used to hold unitialized variables or common
- storage. The length of each partial program's bss section is
- important, but because it starts out containing zeroed bytes there
- is no need to store explicit zero bytes in the object file. The
- bss section was invented to eliminate those explicit zeros from
- object files.
-
-*absolute section*
- Address 0 of this section is always "relocated" to runtime address
- 0. This is useful if you want to refer to an address that `ld'
- must not change when relocating. In this sense we speak of
- absolute addresses being "unrelocatable": they don't change during
- relocation.
-
-*undefined section*
- This "section" is a catch-all for address references to objects
- not in the preceding sections.
-
- An idealized example of three relocatable sections follows. The
-example uses the traditional section names `.text' and `.data'. Memory
-addresses are on the horizontal axis.
-
- +-----+----+--+
- partial program # 1: |ttttt|dddd|00|
- +-----+----+--+
-
- text data bss
- seg. seg. seg.
-
- +---+---+---+
- partial program # 2: |TTT|DDD|000|
- +---+---+---+
-
- +--+---+-----+--+----+---+-----+~~
- linked program: | |TTT|ttttt| |dddd|DDD|00000|
- +--+---+-----+--+----+---+-----+~~
-
- addresses: 0 ...
-
-\1f
-File: as.info, Node: As Sections, Next: Sub-Sections, Prev: Ld Sections, Up: Sections
-
-as Internal Sections
-====================
-
- These sections are meant only for the internal use of `as'. They
-have no meaning at run-time. You don't really need to know about these
-sections for most purposes; but they can be mentioned in `as' warning
-messages, so it might be helpful to have an idea of their meanings to
-`as'. These sections are used to permit the value of every expression
-in your assembly language program to be a section-relative address.
-
-ASSEMBLER-INTERNAL-LOGIC-ERROR!
- An internal assembler logic error has been found. This means
- there is a bug in the assembler.
-
-expr section
- The assembler stores complex expression internally as combinations
- of symbols. When it needs to represent an expression as a symbol,
- it puts it in the expr section.
-
-\1f
-File: as.info, Node: Sub-Sections, Next: bss, Prev: As Sections, Up: Sections
-
-Sub-Sections
-============
-
- Assembled bytes conventionally fall into two sections: text and data.
-You may have separate groups of data in named sections that you want to
-end up near to each other in the object file, even though they are not
-contiguous in the assembler source. `as' allows you to use
-"subsections" for this purpose. Within each section, there can be
-numbered subsections with values from 0 to 8192. Objects assembled
-into the same subsection will be grouped with other objects in the same
-subsection when they are all put into the object file. For example, a
-compiler might want to store constants in the text section, but might
-not want to have them interspersed with the program being assembled.
-In this case, the compiler could issue a `.text 0' before each section
-of code being output, and a `.text 1' before each group of constants
-being output.
-
- Subsections are optional. If you don't use subsections, everything
-will be stored in subsection number zero.
-
- Each subsection is zero-padded up to a multiple of four bytes.
-(Subsections may be padded a different amount on different flavors of
-`as'.)
-
- Subsections appear in your object file in numeric order, lowest
-numbered to highest. (All this to be compatible with other people's
-assemblers.) The object file contains no representation of subsections;
-`ld' and other programs that manipulate object files will see no trace
-of them. They just see all your text subsections as a text section,
-and all your data subsections as a data section.
-
- To specify which subsection you want subsequent statements assembled
-into, use a numeric argument to specify it, in a `.text EXPRESSION' or
-a `.data EXPRESSION' statement. When generating COFF output, you can
-also use an extra subsection argument with arbitrary named sections:
-`.section NAME, EXPRESSION'. EXPRESSION should be an absolute
-expression. (*Note Expressions::.) If you just say `.text' then
-`.text 0' is assumed. Likewise `.data' means `.data 0'. Assembly
-begins in `text 0'. For instance:
- .text 0 # The default subsection is text 0 anyway.
- .ascii "This lives in the first text subsection. *"
- .text 1
- .ascii "But this lives in the second text subsection."
- .data 0
- .ascii "This lives in the data section,"
- .ascii "in the first data subsection."
- .text 0
- .ascii "This lives in the first text section,"
- .ascii "immediately following the asterisk (*)."
-
- Each section has a "location counter" incremented by one for every
-byte assembled into that section. Because subsections are merely a
-convenience restricted to `as' there is no concept of a subsection
-location counter. There is no way to directly manipulate a location
-counter--but the `.align' directive will change it, and any label
-definition will capture its current value. The location counter of the
-section that statements are being assembled into is said to be the
-"active" location counter.
-
-\1f
-File: as.info, Node: bss, Prev: Sub-Sections, Up: Sections
-
-bss Section
-===========
-
- The bss section is used for local common variable storage. You may
-allocate address space in the bss section, but you may not dictate data
-to load into it before your program executes. When your program starts
-running, all the contents of the bss section are zeroed bytes.
-
- Addresses in the bss section are allocated with special directives;
-you may not assemble anything directly into the bss section. Hence
-there are no bss subsections. *Note `.comm': Comm, *note `.lcomm':
-Lcomm..
-
-\1f
-File: as.info, Node: Symbols, Next: Expressions, Prev: Sections, Up: Top
-
-Symbols
-*******
-
- Symbols are a central concept: the programmer uses symbols to name
-things, the linker uses symbols to link, and the debugger uses symbols
-to debug.
-
- *Warning:* `as' does not place symbols in the object file in the
- same order they were declared. This may break some debuggers.
-
-* Menu:
-
-* Labels:: Labels
-* Setting Symbols:: Giving Symbols Other Values
-* Symbol Names:: Symbol Names
-* Dot:: The Special Dot Symbol
-* Symbol Attributes:: Symbol Attributes
-
-\1f
-File: as.info, Node: Labels, Next: Setting Symbols, Up: Symbols
-
-Labels
-======
-
- A "label" is written as a symbol immediately followed by a colon
-`:'. The symbol then represents the current value of the active
-location counter, and is, for example, a suitable instruction operand.
-You are warned if you use the same symbol to represent two different
-locations: the first definition overrides any other definitions.
-
-\1f
-File: as.info, Node: Setting Symbols, Next: Symbol Names, Prev: Labels, Up: Symbols
-
-Giving Symbols Other Values
-===========================
-
- A symbol can be given an arbitrary value by writing a symbol,
-followed by an equals sign `=', followed by an expression (*note
-Expressions::.). This is equivalent to using the `.set' directive.
-*Note `.set': Set.
-
-\1f
-File: as.info, Node: Symbol Names, Next: Dot, Prev: Setting Symbols, Up: Symbols
-
-Symbol Names
-============
-
- Symbol names begin with a letter or with one of `._'. On most
-machines, you can also use `$' in symbol names; exceptions are noted in
-*Note Machine Dependencies::. That character may be followed by any
-string of digits, letters, dollar signs (unless otherwise noted in
-*Note Machine Dependencies::), and underscores. For the AMD 29K
-family, `?' is also allowed in the body of a symbol name, though not at
-its beginning.
-
- Case of letters is significant: `foo' is a different symbol name
-than `Foo'.
-
- Each symbol has exactly one name. Each name in an assembly language
-program refers to exactly one symbol. You may use that symbol name any
-number of times in a program.
-
-Local Symbol Names
-------------------
-
- Local symbols help compilers and programmers use names temporarily.
-There are ten local symbol names, which are re-used throughout the
-program. You may refer to them using the names `0' `1' ... `9'. To
-define a local symbol, write a label of the form `N:' (where N
-represents any digit). To refer to the most recent previous definition
-of that symbol write `Nb', using the same digit as when you defined the
-label. To refer to the next definition of a local label, write
-`Nf'--where N gives you a choice of 10 forward references. The `b'
-stands for "backwards" and the `f' stands for "forwards".
-
- Local symbols are not emitted by the current GNU C compiler.
-
- There is no restriction on how you can use these labels, but
-remember that at any point in the assembly you can refer to at most 10
-prior local labels and to at most 10 forward local labels.
-
- Local symbol names are only a notation device. They are immediately
-transformed into more conventional symbol names before the assembler
-uses them. The symbol names stored in the symbol table, appearing in
-error messages and optionally emitted to the object file have these
-parts:
-
-`L'
- All local labels begin with `L'. Normally both `as' and `ld'
- forget symbols that start with `L'. These labels are used for
- symbols you are never intended to see. If you give the `-L'
- option then `as' will retain these symbols in the object file. If
- you also instruct `ld' to retain these symbols, you may use them
- in debugging.
-
-`DIGIT'
- If the label is written `0:' then the digit is `0'. If the label
- is written `1:' then the digit is `1'. And so on up through `9:'.
-
-\ 1A'
- This unusual character is included so you don't accidentally invent
- a symbol of the same name. The character has ASCII value `\001'.
-
-`*ordinal number*'
- This is a serial number to keep the labels distinct. The first
- `0:' gets the number `1'; The 15th `0:' gets the number `15';
- *etc.*. Likewise for the other labels `1:' through `9:'.
-
- For instance, the first `1:' is named `L\ 1A1', the 44th `3:' is named
-`L\ 1A44'.
-
-\1f
-File: as.info, Node: Dot, Next: Symbol Attributes, Prev: Symbol Names, Up: Symbols
-
-The Special Dot Symbol
-======================
-
- The special symbol `.' refers to the current address that `as' is
-assembling into. Thus, the expression `melvin: .long .' will cause
-`melvin' to contain its own address. Assigning a value to `.' is
-treated the same as a `.org' directive. Thus, the expression `.=.+4'
-is the same as saying `.space 4'.
-
+++ /dev/null
-This is Info file as.info, produced by Makeinfo-1.55 from the input
-file ./as.texinfo.
-
-START-INFO-DIR-ENTRY
-* As:: The GNU assembler.
-END-INFO-DIR-ENTRY
-
- This file documents the GNU Assembler "as".
-
- Copyright (C) 1991, 1992, 1993 Free Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the section entitled "GNU General Public License" is included
-exactly as in the original, and provided that the entire resulting
-derived work is distributed under the terms of a permission notice
-identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the section entitled "GNU General Public License"
-may be included in a translation approved by the Free Software
-Foundation instead of in the original English.
-
-\1f
-File: as.info, Node: Symbol Attributes, Prev: Dot, Up: Symbols
-
-Symbol Attributes
-=================
-
- Every symbol has, as well as its name, the attributes "Value" and
-"Type". Depending on output format, symbols can also have auxiliary
-attributes.
-
- If you use a symbol without defining it, `as' assumes zero for all
-these attributes, and probably won't warn you. This makes the symbol
-an externally defined symbol, which is generally what you would want.
-
-* Menu:
-
-* Symbol Value:: Value
-* Symbol Type:: Type
-
-
-* a.out Symbols:: Symbol Attributes: `a.out'
-
-* COFF Symbols:: Symbol Attributes for COFF
-
-\1f
-File: as.info, Node: Symbol Value, Next: Symbol Type, Up: Symbol Attributes
-
-Value
------
-
- The value of a symbol is (usually) 32 bits. For a symbol which
-labels a location in the text, data, bss or absolute sections the value
-is the number of addresses from the start of that section to the label.
-Naturally for text, data and bss sections the value of a symbol changes
-as `ld' changes section base addresses during linking. Absolute
-symbols' values do not change during linking: that is why they are
-called absolute.
-
- The value of an undefined symbol is treated in a special way. If it
-is 0 then the symbol is not defined in this assembler source program,
-and `ld' will try to determine its value from other programs it is
-linked with. You make this kind of symbol simply by mentioning a symbol
-name without defining it. A non-zero value represents a `.comm' common
-declaration. The value is how much common storage to reserve, in bytes
-(addresses). The symbol refers to the first address of the allocated
-storage.
-
-\1f
-File: as.info, Node: Symbol Type, Next: a.out Symbols, Prev: Symbol Value, Up: Symbol Attributes
-
-Type
-----
-
- The type attribute of a symbol contains relocation (section)
-information, any flag settings indicating that a symbol is external, and
-(optionally), other information for linkers and debuggers. The exact
-format depends on the object-code output format in use.
-
-\1f
-File: as.info, Node: a.out Symbols, Next: COFF Symbols, Prev: Symbol Type, Up: Symbol Attributes
-
-Symbol Attributes: `a.out'
---------------------------
-
-* Menu:
-
-* Symbol Desc:: Descriptor
-* Symbol Other:: Other
-
-\1f
-File: as.info, Node: Symbol Desc, Next: Symbol Other, Up: a.out Symbols
-
-Descriptor
-..........
-
- This is an arbitrary 16-bit value. You may establish a symbol's
-descriptor value by using a `.desc' statement (*note `.desc': Desc.).
-A descriptor value means nothing to `as'.
-
-\1f
-File: as.info, Node: Symbol Other, Prev: Symbol Desc, Up: a.out Symbols
-
-Other
-.....
-
- This is an arbitrary 8-bit value. It means nothing to `as'.
-
-\1f
-File: as.info, Node: COFF Symbols, Prev: a.out Symbols, Up: Symbol Attributes
-
-Symbol Attributes for COFF
---------------------------
-
- The COFF format supports a multitude of auxiliary symbol attributes;
-like the primary symbol attributes, they are set between `.def' and
-`.endef' directives.
-
-Primary Attributes
-..................
-
- The symbol name is set with `.def'; the value and type,
-respectively, with `.val' and `.type'.
-
-Auxiliary Attributes
-....................
-
- The `as' directives `.dim', `.line', `.scl', `.size', and `.tag' can
-generate auxiliary symbol table information for COFF.
-
-\1f
-File: as.info, Node: Expressions, Next: Pseudo Ops, Prev: Symbols, Up: Top
-
-Expressions
-***********
-
- An "expression" specifies an address or numeric value. Whitespace
-may precede and/or follow an expression.
-
-* Menu:
-
-* Empty Exprs:: Empty Expressions
-* Integer Exprs:: Integer Expressions
-
-\1f
-File: as.info, Node: Empty Exprs, Next: Integer Exprs, Up: Expressions
-
-Empty Expressions
-=================
-
- An empty expression has no value: it is just whitespace or null.
-Wherever an absolute expression is required, you may omit the
-expression and `as' will assume a value of (absolute) 0. This is
-compatible with other assemblers.
-
-\1f
-File: as.info, Node: Integer Exprs, Prev: Empty Exprs, Up: Expressions
-
-Integer Expressions
-===================
-
- An "integer expression" is one or more *arguments* delimited by
-*operators*.
-
-* Menu:
-
-* Arguments:: Arguments
-* Operators:: Operators
-* Prefix Ops:: Prefix Operators
-* Infix Ops:: Infix Operators
-
-\1f
-File: as.info, Node: Arguments, Next: Operators, Up: Integer Exprs
-
-Arguments
----------
-
- "Arguments" are symbols, numbers or subexpressions. In other
-contexts arguments are sometimes called "arithmetic operands". In this
-manual, to avoid confusing them with the "instruction operands" of the
-machine language, we use the term "argument" to refer to parts of
-expressions only, reserving the word "operand" to refer only to machine
-instruction operands.
-
- Symbols are evaluated to yield {SECTION NNN} where SECTION is one of
-text, data, bss, absolute, or undefined. NNN is a signed, 2's
-complement 32 bit integer.
-
- Numbers are usually integers.
-
- A number can be a flonum or bignum. In this case, you are warned
-that only the low order 32 bits are used, and `as' pretends these 32
-bits are an integer. You may write integer-manipulating instructions
-that act on exotic constants, compatible with other assemblers.
-
- Subexpressions are a left parenthesis `(' followed by an integer
-expression, followed by a right parenthesis `)'; or a prefix operator
-followed by an argument.
-
-\1f
-File: as.info, Node: Operators, Next: Prefix Ops, Prev: Arguments, Up: Integer Exprs
-
-Operators
----------
-
- "Operators" are arithmetic functions, like `+' or `%'. Prefix
-operators are followed by an argument. Infix operators appear between
-their arguments. Operators may be preceded and/or followed by
-whitespace.
-
-\1f
-File: as.info, Node: Prefix Ops, Next: Infix Ops, Prev: Operators, Up: Integer Exprs
-
-Prefix Operator
----------------
-
- `as' has the following "prefix operators". They each take one
-argument, which must be absolute.
-
-`-'
- "Negation". Two's complement negation.
-
-`~'
- "Complementation". Bitwise not.
-
-\1f
-File: as.info, Node: Infix Ops, Prev: Prefix Ops, Up: Integer Exprs
-
-Infix Operators
----------------
-
- "Infix operators" take two arguments, one on either side. Operators
-have precedence, but operations with equal precedence are performed left
-to right. Apart from `+' or `-', both arguments must be absolute, and
-the result is absolute.
-
- 1. Highest Precedence
-
- `*'
- "Multiplication".
-
- `/'
- "Division". Truncation is the same as the C operator `/'
-
- `%'
- "Remainder".
-
- `<'
- `<<'
- "Shift Left". Same as the C operator `<<'.
-
- `>'
- `>>'
- "Shift Right". Same as the C operator `>>'.
-
- 2. Intermediate precedence
-
- `|'
- "Bitwise Inclusive Or".
-
- `&'
- "Bitwise And".
-
- `^'
- "Bitwise Exclusive Or".
-
- `!'
- "Bitwise Or Not".
-
- 3. Lowest Precedence
-
- `+'
- "Addition". If either argument is absolute, the result has
- the section of the other argument. If either argument is
- pass1 or undefined, the result is pass1. Otherwise `+' is
- illegal.
-
- `-'
- "Subtraction". If the right argument is absolute, the result
- has the section of the left argument. If either argument is
- pass1 the result is pass1. If either argument is undefined
- the result is difference section. If both arguments are in
- the same section, the result is absolute--provided that
- section is one of text, data or bss. Otherwise subtraction
- is illegal.
-
- The sense of the rule for addition is that it's only meaningful to
-add the *offsets* in an address; you can only have a defined section in
-one of the two arguments.
-
- Similarly, you can't subtract quantities from two different sections.
-
-\1f
-File: as.info, Node: Pseudo Ops, Next: Machine Dependencies, Prev: Expressions, Up: Top
-
-Assembler Directives
-********************
-
- All assembler directives have names that begin with a period (`.').
-The rest of the name is letters, usually in lower case.
-
- This chapter discusses directives that are available regardless of
-the target machine configuration for the GNU assembler. Some machine
-configurations provide additional directives. *Note Machine
-Dependencies::.
-
-* Menu:
-
-* Abort:: `.abort'
-
-* ABORT:: `.ABORT'
-
-* Align:: `.align ABS-EXPR , ABS-EXPR'
-* App-File:: `.app-file STRING'
-* Ascii:: `.ascii "STRING"'...
-* Asciz:: `.asciz "STRING"'...
-* Byte:: `.byte EXPRESSIONS'
-* Comm:: `.comm SYMBOL , LENGTH '
-* Data:: `.data SUBSECTION'
-
-* Def:: `.def NAME'
-
-* Desc:: `.desc SYMBOL, ABS-EXPRESSION'
-
-* Dim:: `.dim'
-
-* Double:: `.double FLONUMS'
-* Eject:: `.eject'
-* Else:: `.else'
-
-* Endef:: `.endef'
-
-* Endif:: `.endif'
-* Equ:: `.equ SYMBOL, EXPRESSION'
-* Extern:: `.extern'
-
-* File:: `.file STRING'
-
-* Fill:: `.fill REPEAT , SIZE , VALUE'
-* Float:: `.float FLONUMS'
-* Global:: `.global SYMBOL', `.globl SYMBOL'
-* hword:: `.hword EXPRESSIONS'
-* Ident:: `.ident'
-* If:: `.if ABSOLUTE EXPRESSION'
-* Include:: `.include "FILE"'
-* Int:: `.int EXPRESSIONS'
-* Lcomm:: `.lcomm SYMBOL , LENGTH'
-* Lflags:: `.lflags'
-
-* Line:: `.line LINE-NUMBER'
-
-* Ln:: `.ln LINE-NUMBER'
-* List:: `.list'
-* Long:: `.long EXPRESSIONS'
-
-* Nolist:: `.nolist'
-* Octa:: `.octa BIGNUMS'
-* Org:: `.org NEW-LC , FILL'
-* Psize:: `.psize LINES, COLUMNS'
-* Quad:: `.quad BIGNUMS'
-* Sbttl:: `.sbttl "SUBHEADING"'
-
-* Scl:: `.scl CLASS'
-
-* Section:: `.section NAME, SUBSECTION'
-
-* Set:: `.set SYMBOL, EXPRESSION'
-* Short:: `.short EXPRESSIONS'
-* Single:: `.single FLONUMS'
-
-* Size:: `.size'
-
-* Space:: `.space SIZE , FILL'
-
-* Stab:: `.stabd, .stabn, .stabs'
-
-* Tag:: `.tag STRUCTNAME'
-
-* Text:: `.text SUBSECTION'
-* Title:: `.title "HEADING"'
-
-* Type:: `.type INT'
-* Val:: `.val ADDR'
-
-* Word:: `.word EXPRESSIONS'
-* Deprecated:: Deprecated Directives
-
-\1f
-File: as.info, Node: Abort, Next: ABORT, Up: Pseudo Ops
-
-`.abort'
-========
-
- This directive stops the assembly immediately. It is for
-compatibility with other assemblers. The original idea was that the
-assembly language source would be piped into the assembler. If the
-sender of the source quit, it could use this directive tells `as' to
-quit also. One day `.abort' will not be supported.
-
-\1f
-File: as.info, Node: ABORT, Next: Align, Prev: Abort, Up: Pseudo Ops
-
-`.ABORT'
-========
-
- When producing COFF output, `as' accepts this directive as a synonym
-for `.abort'.
-
- When producing `b.out' output, `as' accepts this directive, but
-ignores it.
-
-\1f
-File: as.info, Node: Align, Next: App-File, Prev: ABORT, Up: Pseudo Ops
-
-`.align ABS-EXPR , ABS-EXPR'
-============================
-
- Pad the location counter (in the current subsection) to a particular
-storage boundary. The first expression (which must be absolute) is the
-number of low-order zero bits the location counter will have after
-advancement. For example `.align 3' will advance the location counter
-until it a multiple of 8. If the location counter is already a
-multiple of 8, no change is needed.
-
- The second expression (also absolute) gives the value to be stored in
-the padding bytes. It (and the comma) may be omitted. If it is
-omitted, the padding bytes are zero.
-
-\1f
-File: as.info, Node: App-File, Next: Ascii, Prev: Align, Up: Pseudo Ops
-
-`.app-file STRING'
-==================
-
- `.app-file' (which may also be spelled `.file') tells `as' that we
-are about to start a new logical file. STRING is the new file name.
-In general, the filename is recognized whether or not it is surrounded
-by quotes `"'; but if you wish to specify an empty file name is
-permitted, you must give the quotes-`""'. This statement may go away in
-future: it is only recognized to be compatible with old `as' programs.
-
-\1f
-File: as.info, Node: Ascii, Next: Asciz, Prev: App-File, Up: Pseudo Ops
-
-`.ascii "STRING"'...
-====================
-
- `.ascii' expects zero or more string literals (*note Strings::.)
-separated by commas. It assembles each string (with no automatic
-trailing zero byte) into consecutive addresses.
-
-\1f
-File: as.info, Node: Asciz, Next: Byte, Prev: Ascii, Up: Pseudo Ops
-
-`.asciz "STRING"'...
-====================
-
- `.asciz' is just like `.ascii', but each string is followed by a
-zero byte. The "z" in `.asciz' stands for "zero".
-
-\1f
-File: as.info, Node: Byte, Next: Comm, Prev: Asciz, Up: Pseudo Ops
-
-`.byte EXPRESSIONS'
-===================
-
- `.byte' expects zero or more expressions, separated by commas. Each
-expression is assembled into the next byte.
-
-\1f
-File: as.info, Node: Comm, Next: Data, Prev: Byte, Up: Pseudo Ops
-
-`.comm SYMBOL , LENGTH '
-========================
-
- `.comm' declares a named common area in the bss section. Normally
-`ld' reserves memory addresses for it during linking, so no partial
-program defines the location of the symbol. Use `.comm' to tell `ld'
-that it must be at least LENGTH bytes long. `ld' will allocate space
-for each `.comm' symbol that is at least as long as the longest `.comm'
-request in any of the partial programs linked. LENGTH is an absolute
-expression.
-
-\1f
-File: as.info, Node: Data, Next: Def, Prev: Comm, Up: Pseudo Ops
-
-`.data SUBSECTION'
-==================
-
- `.data' tells `as' to assemble the following statements onto the end
-of the data subsection numbered SUBSECTION (which is an absolute
-expression). If SUBSECTION is omitted, it defaults to zero.
-
-\1f
-File: as.info, Node: Def, Next: Desc, Prev: Data, Up: Pseudo Ops
-
-`.def NAME'
-===========
-
- Begin defining debugging information for a symbol NAME; the
-definition extends until the `.endef' directive is encountered.
-
- This directive is only observed when `as' is configured for COFF
-format output; when producing `b.out', `.def' is recognized, but
-ignored.
-
-\1f
-File: as.info, Node: Desc, Next: Dim, Prev: Def, Up: Pseudo Ops
-
-`.desc SYMBOL, ABS-EXPRESSION'
-==============================
-
- This directive sets the descriptor of the symbol (*note Symbol
-Attributes::.) to the low 16 bits of an absolute expression.
-
- The `.desc' directive is not available when `as' is configured for
-COFF output; it is only for `a.out' or `b.out' object format. For the
-sake of compatibility, `as' will accept it, but produce no output, when
-configured for COFF.
-
-\1f
-File: as.info, Node: Dim, Next: Double, Prev: Desc, Up: Pseudo Ops
-
-`.dim'
-======
-
- This directive is generated by compilers to include auxiliary
-debugging information in the symbol table. It is only permitted inside
-`.def'/`.endef' pairs.
-
- `.dim' is only meaningful when generating COFF format output; when
-`as' is generating `b.out', it accepts this directive but ignores it.
-
-\1f
-File: as.info, Node: Double, Next: Eject, Prev: Dim, Up: Pseudo Ops
-
-`.double FLONUMS'
-=================
-
- `.double' expects zero or more flonums, separated by commas. It
-assembles floating point numbers. The exact kind of floating point
-numbers emitted depends on how `as' is configured. *Note Machine
-Dependencies::.
-
-\1f
-File: as.info, Node: Eject, Next: Else, Prev: Double, Up: Pseudo Ops
-
-`.eject'
-========
-
- Force a page break at this point, when generating assembly listings.
-
-\1f
-File: as.info, Node: Else, Next: Endef, Prev: Eject, Up: Pseudo Ops
-
-`.else'
-=======
-
- `.else' is part of the `as' support for conditional assembly; *note
-`.if': If.. It marks the beginning of a section of code to be
-assembled if the condition for the preceding `.if' was false.
-
-\1f
-File: as.info, Node: Endef, Next: Endif, Prev: Else, Up: Pseudo Ops
-
-`.endef'
-========
-
- This directive flags the end of a symbol definition begun with
-`.def'.
-
- `.endef' is only meaningful when generating COFF format output; if
-`as' is configured to generate `b.out', it accepts this directive but
-ignores it.
-
-\1f
-File: as.info, Node: Endif, Next: Equ, Prev: Endef, Up: Pseudo Ops
-
-`.endif'
-========
-
- `.endif' is part of the `as' support for conditional assembly; it
-marks the end of a block of code that is only assembled conditionally.
-*Note `.if': If.
-
-\1f
-File: as.info, Node: Equ, Next: Extern, Prev: Endif, Up: Pseudo Ops
-
-`.equ SYMBOL, EXPRESSION'
-=========================
-
- This directive sets the value of SYMBOL to EXPRESSION. It is
-synonymous with `.set'; *note `.set': Set..
-
-\1f
-File: as.info, Node: Extern, Next: File, Prev: Equ, Up: Pseudo Ops
-
-`.extern'
-=========
-
- `.extern' is accepted in the source program--for compatibility with
-other assemblers--but it is ignored. `as' treats all undefined symbols
-as external.
-
-\1f
-File: as.info, Node: File, Next: Fill, Prev: Extern, Up: Pseudo Ops
-
-`.file STRING'
-==============
-
- `.file' (which may also be spelled `.app-file') tells `as' that we
-are about to start a new logical file. STRING is the new file name.
-In general, the filename is recognized whether or not it is surrounded
-by quotes `"'; but if you wish to specify an empty file name, you must
-give the quotes-`""'. This statement may go away in future: it is only
-recognized to be compatible with old `as' programs. In some
-configurations of `as', `.file' has already been removed to avoid
-conflicts with other assemblers. *Note Machine Dependencies::.
-
-\1f
-File: as.info, Node: Fill, Next: Float, Prev: File, Up: Pseudo Ops
-
-`.fill REPEAT , SIZE , VALUE'
-=============================
-
- RESULT, SIZE and VALUE are absolute expressions. This emits REPEAT
-copies of SIZE bytes. REPEAT may be zero or more. SIZE may be zero or
-more, but if it is more than 8, then it is deemed to have the value 8,
-compatible with other people's assemblers. The contents of each REPEAT
-bytes is taken from an 8-byte number. The highest order 4 bytes are
-zero. The lowest order 4 bytes are VALUE rendered in the byte-order of
-an integer on the computer `as' is assembling for. Each SIZE bytes in
-a repetition is taken from the lowest order SIZE bytes of this number.
-Again, this bizarre behavior is compatible with other people's
-assemblers.
-
- SIZE and VALUE are optional. If the second comma and VALUE are
-absent, VALUE is assumed zero. If the first comma and following tokens
-are absent, SIZE is assumed to be 1.
-
-\1f
-File: as.info, Node: Float, Next: Global, Prev: Fill, Up: Pseudo Ops
-
-`.float FLONUMS'
-================
-
- This directive assembles zero or more flonums, separated by commas.
-It has the same effect as `.single'. The exact kind of floating point
-numbers emitted depends on how `as' is configured. *Note Machine
-Dependencies::.
-
-\1f
-File: as.info, Node: Global, Next: hword, Prev: Float, Up: Pseudo Ops
-
-`.global SYMBOL', `.globl SYMBOL'
-=================================
-
- `.global' makes the symbol visible to `ld'. If you define SYMBOL in
-your partial program, its value is made available to other partial
-programs that are linked with it. Otherwise, SYMBOL will take its
-attributes from a symbol of the same name from another partial program
-it is linked with.
-
- Both spellings (`.globl' and `.global') are accepted, for
-compatibility with other assemblers.
-
-\1f
-File: as.info, Node: hword, Next: Ident, Prev: Global, Up: Pseudo Ops
-
-`.hword EXPRESSIONS'
-====================
-
- This expects zero or more EXPRESSIONS, and emits a 16 bit number for
-each.
-
- This directive is a synonym for `.short'; depending on the target
-architecture, it may also be a synonym for `.word'.
-
-\1f
-File: as.info, Node: Ident, Next: If, Prev: hword, Up: Pseudo Ops
-
-`.ident'
-========
-
- This directive is used by some assemblers to place tags in object
-files. `as' simply accepts the directive for source-file compatibility
-with such assemblers, but does not actually emit anything for it.
-
-\1f
-File: as.info, Node: If, Next: Include, Prev: Ident, Up: Pseudo Ops
-
-`.if ABSOLUTE EXPRESSION'
-=========================
-
- `.if' marks the beginning of a section of code which is only
-considered part of the source program being assembled if the argument
-(which must be an ABSOLUTE EXPRESSION) is non-zero. The end of the
-conditional section of code must be marked by `.endif' (*note `.endif':
-Endif.); optionally, you may include code for the alternative
-condition, flagged by `.else' (*note `.else': Else..
-
- The following variants of `.if' are also supported:
-`.ifdef SYMBOL'
- Assembles the following section of code if the specified SYMBOL
- has been defined.
-
-`.ifndef SYMBOL'
-`ifnotdef SYMBOL'
- Assembles the following section of code if the specified SYMBOL
- has not been defined. Both spelling variants are equivalent.
-
-\1f
-File: as.info, Node: Include, Next: Int, Prev: If, Up: Pseudo Ops
-
-`.include "FILE"'
-=================
-
- This directive provides a way to include supporting files at
-specified points in your source program. The code from FILE is
-assembled as if it followed the point of the `.include'; when the end
-of the included file is reached, assembly of the original file
-continues. You can control the search paths used with the `-I'
-command-line option (*note Command-Line Options: Invoking.). Quotation
-marks are required around FILE.
-
-\1f
-File: as.info, Node: Int, Next: Lcomm, Prev: Include, Up: Pseudo Ops
-
-`.int EXPRESSIONS'
-==================
-
- Expect zero or more EXPRESSIONS, of any section, separated by
-commas. For each expression, emit a 32-bit number that will, at run
-time, be the value of that expression. The byte order of the
-expression depends on what kind of computer will run the program.
-
-\1f
-File: as.info, Node: Lcomm, Next: Lflags, Prev: Int, Up: Pseudo Ops
-
-`.lcomm SYMBOL , LENGTH'
-========================
-
- Reserve LENGTH (an absolute expression) bytes for a local common
-denoted by SYMBOL. The section and value of SYMBOL are those of the
-new local common. The addresses are allocated in the bss section, so
-at run-time the bytes will start off zeroed. SYMBOL is not declared
-global (*note `.global': Global.), so is normally not visible to `ld'.
-
-\1f
-File: as.info, Node: Lflags, Next: Line, Prev: Lcomm, Up: Pseudo Ops
-
-`.lflags'
-=========
-
- `as' accepts this directive, for compatibility with other
-assemblers, but ignores it.
-
-\1f
-File: as.info, Node: Line, Next: Ln, Prev: Lflags, Up: Pseudo Ops
-
-`.line LINE-NUMBER'
-===================
-
- Tell `as' to change the logical line number. LINE-NUMBER must be an
-absolute expression. The next line will have that logical line number.
-So any other statements on the current line (after a statement
-separator character) will be reported as on logical line number
-LINE-NUMBER - 1. One day this directive will be unsupported: it is
-used only for compatibility with existing assembler programs.
-
- *Warning:* In the AMD29K configuration of as, this command is only
-available with the name `.ln', rather than as either `.line' or `.ln'.
-
- Even though this is a directive associated with the `a.out' or
-`b.out' object-code formats, `as' will still recognize it when
-producing COFF output, and will treat `.line' as though it were the
-COFF `.ln' *if* it is found outside a `.def'/`.endef' pair.
-
- Inside a `.def', `.line' is, instead, one of the directives used by
-compilers to generate auxiliary symbol information for debugging.
-
-\1f
-File: as.info, Node: Ln, Next: List, Prev: Line, Up: Pseudo Ops
-
-`.ln LINE-NUMBER'
-=================
-
- `.ln' is a synonym for `.line'.
-
-\1f
-File: as.info, Node: List, Next: Long, Prev: Ln, Up: Pseudo Ops
-
-`.list'
-=======
-
- Control (in conjunction with the `.nolist' directive) whether or not
-assembly listings are generated. These two directives maintain an
-internal counter (which is zero initially). `.list' increments the
-counter, and `.nolist' decrements it. Assembly listings are generated
-whenever the counter is greater than zero.
-
- By default, listings are disabled. When you enable them (with the
-`-a' command line option; *note Command-Line Options: Invoking.), the
-initial value of the listing counter is one.
-
-\1f
-File: as.info, Node: Long, Next: Nolist, Prev: List, Up: Pseudo Ops
-
-`.long EXPRESSIONS'
-===================
-
- `.long' is the same as `.int', *note `.int': Int..
-
-\1f
-File: as.info, Node: Nolist, Next: Octa, Prev: Long, Up: Pseudo Ops
-
-`.nolist'
-=========
-
- Control (in conjunction with the `.list' directive) whether or not
-assembly listings are generated. These two directives maintain an
-internal counter (which is zero initially). `.list' increments the
-counter, and `.nolist' decrements it. Assembly listings are generated
-whenever the counter is greater than zero.
-
-\1f
-File: as.info, Node: Octa, Next: Org, Prev: Nolist, Up: Pseudo Ops
-
-`.octa BIGNUMS'
-===============
-
- This directive expects zero or more bignums, separated by commas.
-For each bignum, it emits a 16-byte integer.
-
- The term "octa" comes from contexts in which a "word" is two bytes;
-hence *octa*-word for 16 bytes.
-
-\1f
-File: as.info, Node: Org, Next: Psize, Prev: Octa, Up: Pseudo Ops
-
-`.org NEW-LC , FILL'
-====================
-
- `.org' will advance the location counter of the current section to
-NEW-LC. NEW-LC is either an absolute expression or an expression with
-the same section as the current subsection. That is, you can't use
-`.org' to cross sections: if NEW-LC has the wrong section, the `.org'
-directive is ignored. To be compatible with former assemblers, if the
-section of NEW-LC is absolute, `as' will issue a warning, then pretend
-the section of NEW-LC is the same as the current subsection.
-
- `.org' may only increase the location counter, or leave it
-unchanged; you cannot use `.org' to move the location counter backwards.
-
- Because `as' tries to assemble programs in one pass NEW-LC may not
-be undefined. If you really detest this restriction we eagerly await a
-chance to share your improved assembler.
-
- Beware that the origin is relative to the start of the section, not
-to the start of the subsection. This is compatible with other people's
-assemblers.
-
- When the location counter (of the current subsection) is advanced,
-the intervening bytes are filled with FILL which should be an absolute
-expression. If the comma and FILL are omitted, FILL defaults to zero.
-
-\1f
-File: as.info, Node: Psize, Next: Quad, Prev: Org, Up: Pseudo Ops
-
-`.psize LINES , COLUMNS'
-========================
-
- Use this directive to declare the number of lines--and, optionally,
-the number of columns--to use for each page, when generating listings.
-
- If you don't use `.psize', listings will use a default line-count of
-60. You may omit the comma and COLUMNS specification; the default
-width is 200 columns.
-
- `as' will generate formfeeds whenever the specified number of lines
-is exceeded (or whenever you explicitly request one, using `.eject').
-
- If you specify LINES as `0', no formfeeds are generated save those
-explicitly specified with `.eject'.
-
-\1f
-File: as.info, Node: Quad, Next: Sbttl, Prev: Psize, Up: Pseudo Ops
-
-`.quad BIGNUMS'
-===============
-
- `.quad' expects zero or more bignums, separated by commas. For each
-bignum, it emits an 8-byte integer. If the bignum won't fit in 8
-bytes, it prints a warning message; and just takes the lowest order 8
-bytes of the bignum.
-
- The term "quad" comes from contexts in which a "word" is two bytes;
-hence *quad*-word for 8 bytes.
-
-\1f
-File: as.info, Node: Sbttl, Next: Scl, Prev: Quad, Up: Pseudo Ops
-
-`.sbttl "SUBHEADING"'
-=====================
-
- Use SUBHEADING as the title (third line, immediately after the title
-line) when generating assembly listings.
-
- This directive affects subsequent pages, as well as the current page
-if it appears within ten lines of the top of a page.
-
-\1f
-File: as.info, Node: Scl, Next: Section, Prev: Sbttl, Up: Pseudo Ops
-
-`.scl CLASS'
-============
-
- Set the storage-class value for a symbol. This directive may only be
-used inside a `.def'/`.endef' pair. Storage class may flag whether a
-symbol is static or external, or it may record further symbolic
-debugging information.
-
- The `.scl' directive is primarily associated with COFF output; when
-configured to generate `b.out' output format, `as' will accept this
-directive but ignore it.
-
-\1f
-File: as.info, Node: Section, Next: Set, Prev: Scl, Up: Pseudo Ops
-
-`.section NAME, SUBSECTION'
-===========================
-
- Assemble the following code into end of subsection numbered
-SUBSECTION in the COFF named section NAME. If you omit SUBSECTION,
-`as' uses subsection number zero. `.section .text' is equivalent to
-the `.text' directive; `.section .data' is equivalent to the `.data'
-directive.
-
-\1f
-File: as.info, Node: Set, Next: Short, Prev: Section, Up: Pseudo Ops
-
-`.set SYMBOL, EXPRESSION'
-=========================
-
- This directive sets the value of SYMBOL to EXPRESSION. This will
-change SYMBOL's value and type to conform to EXPRESSION. If SYMBOL was
-flagged as external, it remains flagged. (*Note Symbol Attributes::.)
-
- You may `.set' a symbol many times in the same assembly. If the
-expression's section is unknowable during pass 1, a second pass over
-the source program will be forced. The second pass is currently not
-implemented. `as' will abort with an error message if one is required.
-
- If you `.set' a global symbol, the value stored in the object file
-is the last value stored into it.
-
-\1f
-File: as.info, Node: Short, Next: Single, Prev: Set, Up: Pseudo Ops
-
-`.short EXPRESSIONS'
-====================
-
- `.short' is normally the same as `.word'. *Note `.word': Word.
-
- In some configurations, however, `.short' and `.word' generate
-numbers of different lengths; *note Machine Dependencies::..
-
-\1f
-File: as.info, Node: Single, Next: Size, Prev: Short, Up: Pseudo Ops
-
-`.single FLONUMS'
-=================
-
- This directive assembles zero or more flonums, separated by commas.
-It has the same effect as `.float'. The exact kind of floating point
-numbers emitted depends on how `as' is configured. *Note Machine
-Dependencies::.
-
-\1f
-File: as.info, Node: Size, Next: Space, Prev: Single, Up: Pseudo Ops
-
-`.size'
-=======
-
- This directive is generated by compilers to include auxiliary
-debugging information in the symbol table. It is only permitted inside
-`.def'/`.endef' pairs.
-
- `.size' is only meaningful when generating COFF format output; when
-`as' is generating `b.out', it accepts this directive but ignores it.
-
-\1f
-File: as.info, Node: Space, Next: Stab, Prev: Size, Up: Pseudo Ops
-
-`.space SIZE , FILL'
-====================
-
- This directive emits SIZE bytes, each of value FILL. Both SIZE and
-FILL are absolute expressions. If the comma and FILL are omitted, FILL
-is assumed to be zero.
-
- On the AMD 29K, this directive is ignored; it is accepted for
-compatibility with other AMD 29K assemblers.
-
- *Warning:* In most versions of the GNU assembler, the directive
- `.space' has the effect of `.block' *Note Machine Dependencies::.
-
-\1f
-File: as.info, Node: Stab, Next: Tag, Prev: Space, Up: Pseudo Ops
-
-`.stabd, .stabn, .stabs'
-========================
-
- There are three directives that begin `.stab'. All emit symbols
-(*note Symbols::.), for use by symbolic debuggers. The symbols are not
-entered in the `as' hash table: they cannot be referenced elsewhere in
-the source file. Up to five fields are required:
-
-STRING
- This is the symbol's name. It may contain any character except
- `\000', so is more general than ordinary symbol names. Some
- debuggers used to code arbitrarily complex structures into symbol
- names using this field.
-
-TYPE
- An absolute expression. The symbol's type is set to the low 8
- bits of this expression. Any bit pattern is permitted, but `ld'
- and debuggers will choke on silly bit patterns.
-
-OTHER
- An absolute expression. The symbol's "other" attribute is set to
- the low 8 bits of this expression.
-
-DESC
- An absolute expression. The symbol's descriptor is set to the low
- 16 bits of this expression.
-
-VALUE
- An absolute expression which becomes the symbol's value.
-
- If a warning is detected while reading a `.stabd', `.stabn', or
-`.stabs' statement, the symbol has probably already been created and
-you will get a half-formed symbol in your object file. This is
-compatible with earlier assemblers!
-
-`.stabd TYPE , OTHER , DESC'
- The "name" of the symbol generated is not even an empty string.
- It is a null pointer, for compatibility. Older assemblers used a
- null pointer so they didn't waste space in object files with empty
- strings.
-
- The symbol's value is set to the location counter, relocatably.
- When your program is linked, the value of this symbol will be
- where the location counter was when the `.stabd' was assembled.
-
-`.stabn TYPE , OTHER , DESC , VALUE'
- The name of the symbol is set to the empty string `""'.
-
-`.stabs STRING , TYPE , OTHER , DESC , VALUE'
- All five fields are specified.
-
-\1f
-File: as.info, Node: Tag, Next: Text, Prev: Stab, Up: Pseudo Ops
-
-`.tag STRUCTNAME'
-=================
-
- This directive is generated by compilers to include auxiliary
-debugging information in the symbol table. It is only permitted inside
-`.def'/`.endef' pairs. Tags are used to link structure definitions in
-the symbol table with instances of those structures.
-
- `.tag' is only used when generating COFF format output; when `as' is
-generating `b.out', it accepts this directive but ignores it.
-
-\1f
-File: as.info, Node: Text, Next: Title, Prev: Tag, Up: Pseudo Ops
-
-`.text SUBSECTION'
-==================
-
- Tells `as' to assemble the following statements onto the end of the
-text subsection numbered SUBSECTION, which is an absolute expression.
-If SUBSECTION is omitted, subsection number zero is used.
-
-\1f
-File: as.info, Node: Title, Next: Type, Prev: Text, Up: Pseudo Ops
-
-`.title "HEADING"'
-==================
-
- Use HEADING as the title (second line, immediately after the source
-file name and pagenumber) when generating assembly listings.
-
- This directive affects subsequent pages, as well as the current page
-if it appears within ten lines of the top of a page.
-
-\1f
-File: as.info, Node: Type, Next: Val, Prev: Title, Up: Pseudo Ops
-
-`.type INT'
-===========
-
- This directive, permitted only within `.def'/`.endef' pairs, records
-the integer INT as the type attribute of a symbol table entry.
-
- `.type' is associated only with COFF format output; when `as' is
-configured for `b.out' output, it accepts this directive but ignores it.
-
-\1f
-File: as.info, Node: Val, Next: Word, Prev: Type, Up: Pseudo Ops
-
-`.val ADDR'
-===========
-
- This directive, permitted only within `.def'/`.endef' pairs, records
-the address ADDR as the value attribute of a symbol table entry.
-
- `.val' is used only for COFF output; when `as' is configured for
-`b.out', it accepts this directive but ignores it.
-
-\1f
-File: as.info, Node: Word, Next: Deprecated, Prev: Val, Up: Pseudo Ops
-
-`.word EXPRESSIONS'
-===================
-
- This directive expects zero or more EXPRESSIONS, of any section,
-separated by commas.
-
- The size of the number emitted, and its byte order, depends on what
-kind of computer will run the program.
-
- *Warning: Special Treatment to support Compilers*
-
- Machines with a 32-bit address space, but that do less than 32-bit
-addressing, require the following special treatment. If the machine of
-interest to you does 32-bit addressing (or doesn't require it; *note
-Machine Dependencies::.), you can ignore this issue.
-
- In order to assemble compiler output into something that will work,
-`as' will occasionlly do strange things to `.word' directives.
-Directives of the form `.word sym1-sym2' are often emitted by compilers
-as part of jump tables. Therefore, when `as' assembles a directive of
-the form `.word sym1-sym2', and the difference between `sym1' and
-`sym2' does not fit in 16 bits, `as' will create a "secondary jump
-table", immediately before the next label. This secondary jump table
-will be preceded by a short-jump to the first byte after the secondary
-table. This short-jump prevents the flow of control from accidentally
-falling into the new table. Inside the table will be a long-jump to
-`sym2'. The original `.word' will contain `sym1' minus the address of
-the long-jump to `sym2'.
-
- If there were several occurrences of `.word sym1-sym2' before the
-secondary jump table, all of them will be adjusted. If there was a
-`.word sym3-sym4', that also did not fit in sixteen bits, a long-jump
-to `sym4' will be included in the secondary jump table, and the `.word'
-directives will be adjusted to contain `sym3' minus the address of the
-long-jump to `sym4'; and so on, for as many entries in the original
-jump table as necessary.
-
-\1f
-File: as.info, Node: Deprecated, Prev: Word, Up: Pseudo Ops
-
-Deprecated Directives
-=====================
-
- One day these directives won't work. They are included for
-compatibility with older assemblers.
-.abort
-.app-file
-.line
-\1f
-File: as.info, Node: Machine Dependencies, Next: Copying, Prev: Pseudo Ops, Up: Top
-
-Machine Dependent Features
-**************************
-
- The machine instruction sets are (almost by definition) different on
-each machine where `as' runs. Floating point representations vary as
-well, and `as' often supports a few additional directives or
-command-line options for compatibility with other assemblers on a
-particular platform. Finally, some versions of `as' support special
-pseudo-instructions for branch optimization.
-
- This chapter discusses most of these differences, though it does not
-include details on any machine's instruction set. For details on that
-subject, see the hardware manufacturer's manual.
-
-* Menu:
-
-
-* Vax-Dependent:: VAX Dependent Features
-
-* AMD29K-Dependent:: AMD 29K Dependent Features
-
-* H8/300-Dependent:: Hitachi H8/300 Dependent Features
-
-* H8/500-Dependent:: Hitachi H8/500 Dependent Features
-
-* SH-Dependent:: Hitachi SH Dependent Features
-
-* i960-Dependent:: Intel 80960 Dependent Features
-
-* M68K-Dependent:: M680x0 Dependent Features
-
-* Sparc-Dependent:: SPARC Dependent Features
-
-* Z8000-Dependent:: Z8000 Dependent Features
-
-* i386-Dependent:: 80386 Dependent Features
-
-\1f
-File: as.info, Node: Vax-Dependent, Next: AMD29K-Dependent, Up: Machine Dependencies
-
-VAX Dependent Features
-======================
-
-* Menu:
-
-* Vax-Opts:: VAX Command-Line Options
-* VAX-float:: VAX Floating Point
-* VAX-directives:: Vax Machine Directives
-* VAX-opcodes:: VAX Opcodes
-* VAX-branch:: VAX Branch Improvement
-* VAX-operands:: VAX Operands
-* VAX-no:: Not Supported on VAX
-
-\1f
-File: as.info, Node: Vax-Opts, Next: VAX-float, Up: Vax-Dependent
-
-VAX Command-Line Options
-------------------------
-
- The Vax version of `as' accepts any of the following options, gives
-a warning message that the option was ignored and proceeds. These
-options are for compatibility with scripts designed for other people's
-assemblers.
-
-`-D' (Debug)
-`-S' (Symbol Table)
-`-T' (Token Trace)
- These are obsolete options used to debug old assemblers.
-
-`-d' (Displacement size for JUMPs)
- This option expects a number following the `-d'. Like options
- that expect filenames, the number may immediately follow the `-d'
- (old standard) or constitute the whole of the command line
- argument that follows `-d' (GNU standard).
-
-`-V' (Virtualize Interpass Temporary File)
- Some other assemblers use a temporary file. This option commanded
- them to keep the information in active memory rather than in a
- disk file. `as' always does this, so this option is redundant.
-
-`-J' (JUMPify Longer Branches)
- Many 32-bit computers permit a variety of branch instructions to
- do the same job. Some of these instructions are short (and fast)
- but have a limited range; others are long (and slow) but can
- branch anywhere in virtual memory. Often there are 3 flavors of
- branch: short, medium and long. Some other assemblers would emit
- short and medium branches, unless told by this option to emit
- short and long branches.
-
-`-t' (Temporary File Directory)
- Some other assemblers may use a temporary file, and this option
- takes a filename being the directory to site the temporary file.
- Since `as' does not use a temporary disk file, this option makes
- no difference. `-t' needs exactly one filename.
-
- The Vax version of the assembler accepts two options when compiled
-for VMS. They are `-h', and `-+'. The `-h' option prevents `as' from
-modifying the symbol-table entries for symbols that contain lowercase
-characters (I think). The `-+' option causes `as' to print warning
-messages if the FILENAME part of the object file, or any symbol name is
-larger than 31 characters. The `-+' option also insertes some code
-following the `_main' symbol so that the object file will be compatible
-with Vax-11 "C".
-
-\1f
-File: as.info, Node: VAX-float, Next: VAX-directives, Prev: Vax-Opts, Up: Vax-Dependent
-
-VAX Floating Point
-------------------
-
- Conversion of flonums to floating point is correct, and compatible
-with previous assemblers. Rounding is towards zero if the remainder is
-exactly half the least significant bit.
-
- `D', `F', `G' and `H' floating point formats are understood.
-
- Immediate floating literals (*e.g.* `S`$6.9') are rendered
-correctly. Again, rounding is towards zero in the boundary case.
-
- The `.float' directive produces `f' format numbers. The `.double'
-directive produces `d' format numbers.
-
-\1f
-File: as.info, Node: VAX-directives, Next: VAX-opcodes, Prev: VAX-float, Up: Vax-Dependent
-
-Vax Machine Directives
-----------------------
-
- The Vax version of the assembler supports four directives for
-generating Vax floating point constants. They are described in the
-table below.
-
-`.dfloat'
- This expects zero or more flonums, separated by commas, and
- assembles Vax `d' format 64-bit floating point constants.
-
-`.ffloat'
- This expects zero or more flonums, separated by commas, and
- assembles Vax `f' format 32-bit floating point constants.
-
-`.gfloat'
- This expects zero or more flonums, separated by commas, and
- assembles Vax `g' format 64-bit floating point constants.
-
-`.hfloat'
- This expects zero or more flonums, separated by commas, and
- assembles Vax `h' format 128-bit floating point constants.
-
-\1f
-File: as.info, Node: VAX-opcodes, Next: VAX-branch, Prev: VAX-directives, Up: Vax-Dependent
-
-VAX Opcodes
------------
-
- All DEC mnemonics are supported. Beware that `case...' instructions
-have exactly 3 operands. The dispatch table that follows the `case...'
-instruction should be made with `.word' statements. This is compatible
-with all unix assemblers we know of.
-
-\1f
-File: as.info, Node: VAX-branch, Next: VAX-operands, Prev: VAX-opcodes, Up: Vax-Dependent
-
-VAX Branch Improvement
-----------------------
-
- Certain pseudo opcodes are permitted. They are for branch
-instructions. They expand to the shortest branch instruction that will
-reach the target. Generally these mnemonics are made by substituting
-`j' for `b' at the start of a DEC mnemonic. This feature is included
-both for compatibility and to help compilers. If you don't need this
-feature, don't use these opcodes. Here are the mnemonics, and the code
-they can expand into.
-
-`jbsb'
- `Jsb' is already an instruction mnemonic, so we chose `jbsb'.
- (byte displacement)
- `bsbb ...'
-
- (word displacement)
- `bsbw ...'
-
- (long displacement)
- `jsb ...'
-
-`jbr'
-`jr'
- Unconditional branch.
- (byte displacement)
- `brb ...'
-
- (word displacement)
- `brw ...'
-
- (long displacement)
- `jmp ...'
-
-`jCOND'
- COND may be any one of the conditional branches `neq', `nequ',
- `eql', `eqlu', `gtr', `geq', `lss', `gtru', `lequ', `vc', `vs',
- `gequ', `cc', `lssu', `cs'. COND may also be one of the bit tests
- `bs', `bc', `bss', `bcs', `bsc', `bcc', `bssi', `bcci', `lbs',
- `lbc'. NOTCOND is the opposite condition to COND.
- (byte displacement)
- `bCOND ...'
-
- (word displacement)
- `bNOTCOND foo ; brw ... ; foo:'
-
- (long displacement)
- `bNOTCOND foo ; jmp ... ; foo:'
-
-`jacbX'
- X may be one of `b d f g h l w'.
- (word displacement)
- `OPCODE ...'
-
- (long displacement)
- OPCODE ..., foo ;
- brb bar ;
- foo: jmp ... ;
- bar:
-
-`jaobYYY'
- YYY may be one of `lss leq'.
-
-`jsobZZZ'
- ZZZ may be one of `geq gtr'.
- (byte displacement)
- `OPCODE ...'
-
- (word displacement)
- OPCODE ..., foo ;
- brb bar ;
- foo: brw DESTINATION ;
- bar:
-
- (long displacement)
- OPCODE ..., foo ;
- brb bar ;
- foo: jmp DESTINATION ;
- bar:
-
-`aobleq'
-`aoblss'
-`sobgeq'
-`sobgtr'
- (byte displacement)
- `OPCODE ...'
-
- (word displacement)
- OPCODE ..., foo ;
- brb bar ;
- foo: brw DESTINATION ;
- bar:
-
- (long displacement)
- OPCODE ..., foo ;
- brb bar ;
- foo: jmp DESTINATION ;
- bar:
-
-\1f
-File: as.info, Node: VAX-operands, Next: VAX-no, Prev: VAX-branch, Up: Vax-Dependent
-
-VAX Operands
-------------
-
- The immediate character is `$' for Unix compatibility, not `#' as
-DEC writes it.
-
- The indirect character is `*' for Unix compatibility, not `@' as DEC
-writes it.
-
- The displacement sizing character is ``' (an accent grave) for Unix
-compatibility, not `^' as DEC writes it. The letter preceding ``' may
-have either case. `G' is not understood, but all other letters (`b i l
-s w') are understood.
-
- Register names understood are `r0 r1 r2 ... r15 ap fp sp pc'. Any
-case of letters will do.
-
- For instance
- tstb *w`$4(r5)
-
- Any expression is permitted in an operand. Operands are comma
-separated.
-
-\1f
-File: as.info, Node: VAX-no, Prev: VAX-operands, Up: Vax-Dependent
-
-Not Supported on VAX
---------------------
-
- Vax bit fields can not be assembled with `as'. Someone can add the
-required code if they really need it.
-
-\1f
-File: as.info, Node: AMD29K-Dependent, Next: H8/300-Dependent, Prev: Vax-Dependent, Up: Machine Dependencies
-
-AMD 29K Dependent Features
-==========================
-
-* Menu:
-
-* AMD29K Options:: Options
-* AMD29K Syntax:: Syntax
-* AMD29K Floating Point:: Floating Point
-* AMD29K Directives:: AMD 29K Machine Directives
-* AMD29K Opcodes:: Opcodes
-
-\1f
-File: as.info, Node: AMD29K Options, Next: AMD29K Syntax, Up: AMD29K-Dependent
-
-Options
--------
-
- `as' has no additional command-line options for the AMD 29K family.
-
-\1f
-File: as.info, Node: AMD29K Syntax, Next: AMD29K Floating Point, Prev: AMD29K Options, Up: AMD29K-Dependent
-
-Syntax
-------
-
-* Menu:
-
-* AMD29K-Chars:: Special Characters
-* AMD29K-Regs:: Register Names
-
-\1f
-File: as.info, Node: AMD29K-Chars, Next: AMD29K-Regs, Up: AMD29K Syntax
-
-Special Characters
-..................
-
- `;' is the line comment character.
-
- `@' can be used instead of a newline to separate statements.
-
- The character `?' is permitted in identifiers (but may not begin an
-identifier).
-
+++ /dev/null
-This is Info file as.info, produced by Makeinfo-1.55 from the input
-file ./as.texinfo.
-
-START-INFO-DIR-ENTRY
-* As:: The GNU assembler.
-END-INFO-DIR-ENTRY
-
- This file documents the GNU Assembler "as".
-
- Copyright (C) 1991, 1992, 1993 Free Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the section entitled "GNU General Public License" is included
-exactly as in the original, and provided that the entire resulting
-derived work is distributed under the terms of a permission notice
-identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the section entitled "GNU General Public License"
-may be included in a translation approved by the Free Software
-Foundation instead of in the original English.
-
-\1f
-File: as.info, Node: AMD29K-Regs, Prev: AMD29K-Chars, Up: AMD29K Syntax
-
-Register Names
-..............
-
- General-purpose registers are represented by predefined symbols of
-the form `GRNNN' (for global registers) or `LRNNN' (for local
-registers), where NNN represents a number between `0' and `127',
-written with no leading zeros. The leading letters may be in either
-upper or lower case; for example, `gr13' and `LR7' are both valid
-register names.
-
- You may also refer to general-purpose registers by specifying the
-register number as the result of an expression (prefixed with `%%' to
-flag the expression as a register number):
- %%EXPRESSION
-
---where EXPRESSION must be an absolute expression evaluating to a
-number between `0' and `255'. The range [0, 127] refers to global
-registers, and the range [128, 255] to local registers.
-
- In addition, `as' understands the following protected
-special-purpose register names for the AMD 29K family:
-
- vab chd pc0
- ops chc pc1
- cps rbp pc2
- cfg tmc mmu
- cha tmr lru
-
- These unprotected special-purpose register names are also recognized:
- ipc alu fpe
- ipa bp inte
- ipb fc fps
- q cr exop
-
-\1f
-File: as.info, Node: AMD29K Floating Point, Next: AMD29K Directives, Prev: AMD29K Syntax, Up: AMD29K-Dependent
-
-Floating Point
---------------
-
- The AMD 29K family uses IEEE floating-point numbers.
-
-\1f
-File: as.info, Node: AMD29K Directives, Next: AMD29K Opcodes, Prev: AMD29K Floating Point, Up: AMD29K-Dependent
-
-AMD 29K Machine Directives
---------------------------
-
-`.block SIZE , FILL'
- This directive emits SIZE bytes, each of value FILL. Both SIZE
- and FILL are absolute expressions. If the comma and FILL are
- omitted, FILL is assumed to be zero.
-
- In other versions of the GNU assembler, this directive is called
- `.space'.
-
-`.cputype'
- This directive is ignored; it is accepted for compatibility with
- other AMD 29K assemblers.
-
-`.file'
- This directive is ignored; it is accepted for compatibility with
- other AMD 29K assemblers.
-
- *Warning:* in other versions of the GNU assembler, `.file' is
- used for the directive called `.app-file' in the AMD 29K
- support.
-
-`.line'
- This directive is ignored; it is accepted for compatibility with
- other AMD 29K assemblers.
-
-`.sect'
- This directive is ignored; it is accepted for compatibility with
- other AMD 29K assemblers.
-
-`.use SECTION NAME'
- Establishes the section and subsection for the following code;
- SECTION NAME may be one of `.text', `.data', `.data1', or `.lit'.
- With one of the first three SECTION NAME options, `.use' is
- equivalent to the machine directive SECTION NAME; the remaining
- case, `.use .lit', is the same as `.data 200'.
-
-\1f
-File: as.info, Node: AMD29K Opcodes, Prev: AMD29K Directives, Up: AMD29K-Dependent
-
-Opcodes
--------
-
- `as' implements all the standard AMD 29K opcodes. No additional
-pseudo-instructions are needed on this family.
-
- For information on the 29K machine instruction set, see `Am29000
-User's Manual', Advanced Micro Devices, Inc.
-
-\1f
-File: as.info, Node: H8/300-Dependent, Next: H8/500-Dependent, Prev: AMD29K-Dependent, Up: Machine Dependencies
-
-H8/300 Dependent Features
-=========================
-
-* Menu:
-
-* H8/300 Options:: Options
-* H8/300 Syntax:: Syntax
-* H8/300 Floating Point:: Floating Point
-* H8/300 Directives:: H8/300 Machine Directives
-* H8/300 Opcodes:: Opcodes
-
-\1f
-File: as.info, Node: H8/300 Options, Next: H8/300 Syntax, Up: H8/300-Dependent
-
-Options
--------
-
- `as' has no additional command-line options for the Hitachi H8/300
-family.
-
-\1f
-File: as.info, Node: H8/300 Syntax, Next: H8/300 Floating Point, Prev: H8/300 Options, Up: H8/300-Dependent
-
-Syntax
-------
-
-* Menu:
-
-* H8/300-Chars:: Special Characters
-* H8/300-Regs:: Register Names
-* H8/300-Addressing:: Addressing Modes
-
-\1f
-File: as.info, Node: H8/300-Chars, Next: H8/300-Regs, Up: H8/300 Syntax
-
-Special Characters
-..................
-
- `;' is the line comment character.
-
- `$' can be used instead of a newline to separate statements.
-Therefore *you may not use `$' in symbol names* on the H8/300.
-
-\1f
-File: as.info, Node: H8/300-Regs, Next: H8/300-Addressing, Prev: H8/300-Chars, Up: H8/300 Syntax
-
-Register Names
-..............
-
- You can use predefined symbols of the form `rNh' and `rNl' to refer
-to the H8/300 registers as sixteen 8-bit general-purpose registers. N
-is a digit from `0' to `7'); for instance, both `r0h' and `r7l' are
-valid register names.
-
- You can also use the eight predefined symbols `rN' to refer to the
-H8/300 registers as 16-bit registers (you must use this form for
-addressing).
-
- On the H8/300H, you can also use the eight predefined symbols `erN'
-(`er0' ... `er7') to refer to the 32-bit general purpose registers.
-
- The two control registers are called `pc' (program counter; a 16-bit
-register, except on the H8/300H where it is 24 bits) and `ccr'
-(condition code register; an 8-bit register). `r7' is used as the
-stack pointer, and can also be called `sp'.
-
-\1f
-File: as.info, Node: H8/300-Addressing, Prev: H8/300-Regs, Up: H8/300 Syntax
-
-Addressing Modes
-................
-
- as understands the following addressing modes for the H8/300:
-`rN'
- Register direct
-
-`@rN'
- Register indirect
-
-`@(D, rN)'
-`@(D:16, rN)'
-`@(D:24, rN)'
- Register indirect: 16-bit or 24-bit displacement D from register
- N. (24-bit displacements are only meaningful on the H8/300H.)
-
-`@rN+'
- Register indirect with post-increment
-
-`@-rN'
- Register indirect with pre-decrement
-
-``@'AA'
-``@'AA:8'
-``@'AA:16'
-``@'AA:24'
- Absolute address `aa'. (The address size `:24' only makes sense
- on the H8/300H.)
-
-`#XX'
-`#XX:8'
-`#XX:16'
-`#XX:32'
- Immediate data XX. You may specify the `:8', `:16', or `:32' for
- clarity, if you wish; but `as' neither requires this nor uses
- it--the data size required is taken from context.
-
-``@'`@'AA'
-``@'`@'AA:8'
- Memory indirect. You may specify the `:8' for clarity, if you
- wish; but `as' neither requires this nor uses it.
-
-\1f
-File: as.info, Node: H8/300 Floating Point, Next: H8/300 Directives, Prev: H8/300 Syntax, Up: H8/300-Dependent
-
-Floating Point
---------------
-
- The H8/300 family has no hardware floating point, but the `.float'
-directive generates IEEE floating-point numbers for compatibility with
-other development tools.
-
-\1f
-File: as.info, Node: H8/300 Directives, Next: H8/300 Opcodes, Prev: H8/300 Floating Point, Up: H8/300-Dependent
-
-H8/300 Machine Directives
--------------------------
-
- `as' has only one machine-dependent directive for the H8/300:
-
-`.h300h'
- Recognize and emit additional instructions for the H8/300H
- variant, and also make `.int' emit 32-bit numbers rather than the
- usual (16-bit) for the H8/300 family.
-
- On the H8/300 family (including the H8/300H) `.word' directives
-generate 16-bit numbers.
-
-\1f
-File: as.info, Node: H8/300 Opcodes, Prev: H8/300 Directives, Up: H8/300-Dependent
-
-Opcodes
--------
-
- For detailed information on the H8/300 machine instruction set, see
-`H8/300 Series Programming Manual' (Hitachi ADE-602-025). For
-information specific to the H8/300H, see `H8/300H Series Programming
-Manual' (Hitachi).
-
- `as' implements all the standard H8/300 opcodes. No additional
-pseudo-instructions are needed on this family.
-
- The following table summarizes the H8/300 opcodes, and their
-arguments. Entries marked `*' are opcodes used only on the H8/300H.
-
- Legend:
- Rs source register
- Rd destination register
- abs absolute address
- imm immediate data
- disp:N N-bit displacement from a register
- pcrel:N N-bit displacement relative to program counter
-
- add.b #imm,rd * andc #imm,ccr
- add.b rs,rd band #imm,rd
- add.w rs,rd band #imm,@rd
- * add.w #imm,rd band #imm,@abs:8
- * add.l rs,rd bra pcrel:8
- * add.l #imm,rd * bra pcrel:16
- adds #imm,rd bt pcrel:8
- addx #imm,rd * bt pcrel:16
- addx rs,rd brn pcrel:8
- and.b #imm,rd * brn pcrel:16
- and.b rs,rd bf pcrel:8
- * and.w rs,rd * bf pcrel:16
- * and.w #imm,rd bhi pcrel:8
- * and.l #imm,rd * bhi pcrel:16
- * and.l rs,rd bls pcrel:8
-
- * bls pcrel:16 bld #imm,rd
- bcc pcrel:8 bld #imm,@rd
- * bcc pcrel:16 bld #imm,@abs:8
- bhs pcrel:8 bnot #imm,rd
- * bhs pcrel:16 bnot #imm,@rd
- bcs pcrel:8 bnot #imm,@abs:8
- * bcs pcrel:16 bnot rs,rd
- blo pcrel:8 bnot rs,@rd
- * blo pcrel:16 bnot rs,@abs:8
- bne pcrel:8 bor #imm,rd
- * bne pcrel:16 bor #imm,@rd
- beq pcrel:8 bor #imm,@abs:8
- * beq pcrel:16 bset #imm,rd
- bvc pcrel:8 bset #imm,@rd
- * bvc pcrel:16 bset #imm,@abs:8
- bvs pcrel:8 bset rs,rd
- * bvs pcrel:16 bset rs,@rd
- bpl pcrel:8 bset rs,@abs:8
- * bpl pcrel:16 bsr pcrel:8
- bmi pcrel:8 bsr pcrel:16
- * bmi pcrel:16 bst #imm,rd
- bge pcrel:8 bst #imm,@rd
- * bge pcrel:16 bst #imm,@abs:8
- blt pcrel:8 btst #imm,rd
- * blt pcrel:16 btst #imm,@rd
- bgt pcrel:8 btst #imm,@abs:8
- * bgt pcrel:16 btst rs,rd
- ble pcrel:8 btst rs,@rd
- * ble pcrel:16 btst rs,@abs:8
- bclr #imm,rd bxor #imm,rd
- bclr #imm,@rd bxor #imm,@rd
- bclr #imm,@abs:8 bxor #imm,@abs:8
- bclr rs,rd cmp.b #imm,rd
- bclr rs,@rd cmp.b rs,rd
- bclr rs,@abs:8 cmp.w rs,rd
- biand #imm,rd cmp.w rs,rd
- biand #imm,@rd * cmp.w #imm,rd
- biand #imm,@abs:8 * cmp.l #imm,rd
- bild #imm,rd * cmp.l rs,rd
- bild #imm,@rd daa rs
- bild #imm,@abs:8 das rs
- bior #imm,rd dec.b rs
- bior #imm,@rd * dec.w #imm,rd
- bior #imm,@abs:8 * dec.l #imm,rd
- bist #imm,rd divxu.b rs,rd
- bist #imm,@rd * divxu.w rs,rd
- bist #imm,@abs:8 * divxs.b rs,rd
- bixor #imm,rd * divxs.w rs,rd
- bixor #imm,@rd eepmov
- bixor #imm,@abs:8 * eepmovw
-
- * exts.w rd mov.w rs,@abs:16
- * exts.l rd * mov.l #imm,rd
- * extu.w rd * mov.l rs,rd
- * extu.l rd * mov.l @rs,rd
- inc rs * mov.l @(disp:16,rs),rd
- * inc.w #imm,rd * mov.l @(disp:24,rs),rd
- * inc.l #imm,rd * mov.l @rs+,rd
- jmp @rs * mov.l @abs:16,rd
- jmp abs * mov.l @abs:24,rd
- jmp @@abs:8 * mov.l rs,@rd
- jsr @rs * mov.l rs,@(disp:16,rd)
- jsr abs * mov.l rs,@(disp:24,rd)
- jsr @@abs:8 * mov.l rs,@-rd
- ldc #imm,ccr * mov.l rs,@abs:16
- ldc rs,ccr * mov.l rs,@abs:24
- * ldc @abs:16,ccr movfpe @abs:16,rd
- * ldc @abs:24,ccr movtpe rs,@abs:16
- * ldc @(disp:16,rs),ccr mulxu.b rs,rd
- * ldc @(disp:24,rs),ccr * mulxu.w rs,rd
- * ldc @rs+,ccr * mulxs.b rs,rd
- * ldc @rs,ccr * mulxs.w rs,rd
- * mov.b @(disp:24,rs),rd neg.b rs
- * mov.b rs,@(disp:24,rd) * neg.w rs
- mov.b @abs:16,rd * neg.l rs
- mov.b rs,rd nop
- mov.b @abs:8,rd not.b rs
- mov.b rs,@abs:8 * not.w rs
- mov.b rs,rd * not.l rs
- mov.b #imm,rd or.b #imm,rd
- mov.b @rs,rd or.b rs,rd
- mov.b @(disp:16,rs),rd * or.w #imm,rd
- mov.b @rs+,rd * or.w rs,rd
- mov.b @abs:8,rd * or.l #imm,rd
- mov.b rs,@rd * or.l rs,rd
- mov.b rs,@(disp:16,rd) orc #imm,ccr
- mov.b rs,@-rd pop.w rs
- mov.b rs,@abs:8 * pop.l rs
- mov.w rs,@rd push.w rs
- * mov.w @(disp:24,rs),rd * push.l rs
- * mov.w rs,@(disp:24,rd) rotl.b rs
- * mov.w @abs:24,rd * rotl.w rs
- * mov.w rs,@abs:24 * rotl.l rs
- mov.w rs,rd rotr.b rs
- mov.w #imm,rd * rotr.w rs
- mov.w @rs,rd * rotr.l rs
- mov.w @(disp:16,rs),rd rotxl.b rs
- mov.w @rs+,rd * rotxl.w rs
- mov.w @abs:16,rd * rotxl.l rs
- mov.w rs,@(disp:16,rd) rotxr.b rs
- mov.w rs,@-rd * rotxr.w rs
-
- * rotxr.l rs * stc ccr,@(disp:24,rd)
- bpt * stc ccr,@-rd
- rte * stc ccr,@abs:16
- rts * stc ccr,@abs:24
- shal.b rs sub.b rs,rd
- * shal.w rs sub.w rs,rd
- * shal.l rs * sub.w #imm,rd
- shar.b rs * sub.l rs,rd
- * shar.w rs * sub.l #imm,rd
- * shar.l rs subs #imm,rd
- shll.b rs subx #imm,rd
- * shll.w rs subx rs,rd
- * shll.l rs * trapa #imm
- shlr.b rs xor #imm,rd
- * shlr.w rs xor rs,rd
- * shlr.l rs * xor.w #imm,rd
- sleep * xor.w rs,rd
- stc ccr,rd * xor.l #imm,rd
- * stc ccr,@rs * xor.l rs,rd
- * stc ccr,@(disp:16,rd) xorc #imm,ccr
-
- Four H8/300 instructions (`add', `cmp', `mov', `sub') are defined
-with variants using the suffixes `.b', `.w', and `.l' to specify the
-size of a memory operand. `as' supports these suffixes, but does not
-require them; since one of the operands is always a register, `as' can
-deduce the correct size.
-
- For example, since `r0' refers to a 16-bit register,
- mov r0,@foo
-is equivalent to
- mov.w r0,@foo
-
- If you use the size suffixes, `as' issues a warning when the suffix
-and the register size do not match.
-
-\1f
-File: as.info, Node: H8/500-Dependent, Next: SH-Dependent, Prev: H8/300-Dependent, Up: Machine Dependencies
-
-H8/500 Dependent Features
-=========================
-
-* Menu:
-
-* H8/500 Options:: Options
-* H8/500 Syntax:: Syntax
-* H8/500 Floating Point:: Floating Point
-* H8/500 Directives:: H8/500 Machine Directives
-* H8/500 Opcodes:: Opcodes
-
-\1f
-File: as.info, Node: H8/500 Options, Next: H8/500 Syntax, Up: H8/500-Dependent
-
-Options
--------
-
- `as' has no additional command-line options for the Hitachi H8/500
-family.
-
-\1f
-File: as.info, Node: H8/500 Syntax, Next: H8/500 Floating Point, Prev: H8/500 Options, Up: H8/500-Dependent
-
-Syntax
-------
-
-* Menu:
-
-* H8/500-Chars:: Special Characters
-* H8/500-Regs:: Register Names
-* H8/500-Addressing:: Addressing Modes
-
-\1f
-File: as.info, Node: H8/500-Chars, Next: H8/500-Regs, Up: H8/500 Syntax
-
-Special Characters
-..................
-
- `!' is the line comment character.
-
- `;' can be used instead of a newline to separate statements.
-
- Since `$' has no special meaning, you may use it in symbol names.
-
-\1f
-File: as.info, Node: H8/500-Regs, Next: H8/500-Addressing, Prev: H8/500-Chars, Up: H8/500 Syntax
-
-Register Names
-..............
-
- You can use the predefined symbols `r0', `r1', `r2', `r3', `r4',
-`r5', `r6', and `r7' to refer to the H8/500 registers.
-
- The H8/500 also has these control registers:
-
-`cp'
- code pointer
-
-`dp'
- data pointer
-
-`bp'
- base pointer
-
-`tp'
- stack top pointer
-
-`ep'
- extra pointer
-
-`sr'
- status register
-
-`ccr'
- condition code register
-
- All registers are 16 bits long. To represent 32 bit numbers, use two
-adjacent registers; for distant memory addresses, use one of the segment
-pointers (`cp' for the program counter; `dp' for `r0'-`r3'; `ep' for
-`r4' and `r5'; and `tp' for `r6' and `r7'.
-
-\1f
-File: as.info, Node: H8/500-Addressing, Prev: H8/500-Regs, Up: H8/500 Syntax
-
-Addressing Modes
-................
-
- as understands the following addressing modes for the H8/500:
-`RN'
- Register direct
-
-`@RN'
- Register indirect
-
-`@(d:8, RN)'
- Register indirect with 8 bit signed displacement
-
-`@(d:16, RN)'
- Register indirect with 16 bit signed displacement
-
-`@-RN'
- Register indirect with pre-decrement
-
-`@RN+'
- Register indirect with post-increment
-
-`@AA:8'
- 8 bit absolute address
-
-`@AA:16'
- 16 bit absolute address
-
-`#XX:8'
- 8 bit immediate
-
-`#XX:16'
- 16 bit immediate
-
-\1f
-File: as.info, Node: H8/500 Floating Point, Next: H8/500 Directives, Prev: H8/500 Syntax, Up: H8/500-Dependent
-
-Floating Point
---------------
-
- The H8/500 family uses IEEE floating-point numbers.
-
-\1f
-File: as.info, Node: H8/500 Directives, Next: H8/500 Opcodes, Prev: H8/500 Floating Point, Up: H8/500-Dependent
-
-H8/500 Machine Directives
--------------------------
-
- `as' has no machine-dependent directives for the H8/500. However,
-on this platform the `.int' and `.word' directives generate 16-bit
-numbers.
-
-\1f
-File: as.info, Node: H8/500 Opcodes, Prev: H8/500 Directives, Up: H8/500-Dependent
-
-Opcodes
--------
-
- For detailed information on the H8/500 machine instruction set, see
-`H8/500 Series Programming Manual' (Hitachi M21T001).
-
- `as' implements all the standard H8/500 opcodes. No additional
-pseudo-instructions are needed on this family.
-
- The following table summarizes H8/500 opcodes and their operands:
-
- Legend:
- abs8 8-bit absolute address
- abs16 16-bit absolute address
- abs24 24-bit absolute address
- crb `ccr', `br', `ep', `dp', `tp', `dp'
- disp8 8-bit displacement
- ea `rn', `@rn', `@(d:8, rn)', `@(d:16, rn)',
- `@-rn', `@rn+', `@aa:8', `@aa:16',
- `#xx:8', `#xx:16'
- ea_mem `@rn', `@(d:8, rn)', `@(d:16, rn)',
- `@-rn', `@rn+', `@aa:8', `@aa:16'
- ea_noimm `rn', `@rn', `@(d:8, rn)', `@(d:16, rn)',
- `@-rn', `@rn+', `@aa:8', `@aa:16'
- fp r6
- imm4 4-bit immediate data
- imm8 8-bit immediate data
- imm16 16-bit immediate data
- pcrel8 8-bit offset from program counter
- pcrel16 16-bit offset from program counter
- qim `-2', `-1', `1', `2'
- rd any register
- rs a register distinct from rd
- rlist comma-separated list of registers in parentheses;
- register ranges `rd-rs' are allowed
- sp stack pointer (`r7')
- sr status register
- sz size; `.b' or `.w'. If omitted, default `.w'
-
- ldc[.b] ea,crb bcc[.w] pcrel16
- ldc[.w] ea,sr bcc[.b] pcrel8
- add[:q] sz qim,ea_noimm bhs[.w] pcrel16
- add[:g] sz ea,rd bhs[.b] pcrel8
- adds sz ea,rd bcs[.w] pcrel16
- addx sz ea,rd bcs[.b] pcrel8
- and sz ea,rd blo[.w] pcrel16
- andc[.b] imm8,crb blo[.b] pcrel8
- andc[.w] imm16,sr bne[.w] pcrel16
- bpt bne[.b] pcrel8
- bra[.w] pcrel16 beq[.w] pcrel16
- bra[.b] pcrel8 beq[.b] pcrel8
- bt[.w] pcrel16 bvc[.w] pcrel16
- bt[.b] pcrel8 bvc[.b] pcrel8
- brn[.w] pcrel16 bvs[.w] pcrel16
- brn[.b] pcrel8 bvs[.b] pcrel8
- bf[.w] pcrel16 bpl[.w] pcrel16
- bf[.b] pcrel8 bpl[.b] pcrel8
- bhi[.w] pcrel16 bmi[.w] pcrel16
- bhi[.b] pcrel8 bmi[.b] pcrel8
- bls[.w] pcrel16 bge[.w] pcrel16
- bls[.b] pcrel8 bge[.b] pcrel8
-
- blt[.w] pcrel16 mov[:g][.b] imm8,ea_mem
- blt[.b] pcrel8 mov[:g][.w] imm16,ea_mem
- bgt[.w] pcrel16 movfpe[.b] ea,rd
- bgt[.b] pcrel8 movtpe[.b] rs,ea_noimm
- ble[.w] pcrel16 mulxu sz ea,rd
- ble[.b] pcrel8 neg sz ea
- bclr sz imm4,ea_noimm nop
- bclr sz rs,ea_noimm not sz ea
- bnot sz imm4,ea_noimm or sz ea,rd
- bnot sz rs,ea_noimm orc[.b] imm8,crb
- bset sz imm4,ea_noimm orc[.w] imm16,sr
- bset sz rs,ea_noimm pjmp abs24
- bsr[.b] pcrel8 pjmp @rd
- bsr[.w] pcrel16 pjsr abs24
- btst sz imm4,ea_noimm pjsr @rd
- btst sz rs,ea_noimm prtd imm8
- clr sz ea prtd imm16
- cmp[:e][.b] imm8,rd prts
- cmp[:i][.w] imm16,rd rotl sz ea
- cmp[:g].b imm8,ea_noimm rotr sz ea
- cmp[:g][.w] imm16,ea_noimm rotxl sz ea
- Cmp[:g] sz ea,rd rotxr sz ea
- dadd rs,rd rtd imm8
- divxu sz ea,rd rtd imm16
- dsub rs,rd rts
- exts[.b] rd scb/f rs,pcrel8
- extu[.b] rd scb/ne rs,pcrel8
- jmp @rd scb/eq rs,pcrel8
- jmp @(imm8,rd) shal sz ea
- jmp @(imm16,rd) shar sz ea
- jmp abs16 shll sz ea
- jsr @rd shlr sz ea
- jsr @(imm8,rd) sleep
- jsr @(imm16,rd) stc[.b] crb,ea_noimm
- jsr abs16 stc[.w] sr,ea_noimm
- ldm @sp+,(rlist) stm (rlist),@-sp
- link fp,imm8 sub sz ea,rd
- link fp,imm16 subs sz ea,rd
- mov[:e][.b] imm8,rd subx sz ea,rd
- mov[:i][.w] imm16,rd swap[.b] rd
- mov[:l][.w] abs8,rd tas[.b] ea
- mov[:l].b abs8,rd trapa imm4
- mov[:s][.w] rs,abs8 trap/vs
- mov[:s].b rs,abs8 tst sz ea
- mov[:f][.w] @(disp8,fp),rd unlk fp
- mov[:f][.w] rs,@(disp8,fp) xch[.w] rs,rd
- mov[:f].b @(disp8,fp),rd xor sz ea,rd
- mov[:f].b rs,@(disp8,fp) xorc.b imm8,crb
- mov[:g] sz rs,ea_mem xorc.w imm16,sr
- mov[:g] sz ea,rd
-
-\1f
-File: as.info, Node: SH-Dependent, Next: i960-Dependent, Prev: H8/500-Dependent, Up: Machine Dependencies
-
-Hitachi SH Dependent Features
-=============================
-
-* Menu:
-
-* SH Options:: Options
-* SH Syntax:: Syntax
-* SH Floating Point:: Floating Point
-* SH Directives:: SH Machine Directives
-* SH Opcodes:: Opcodes
-
-\1f
-File: as.info, Node: SH Options, Next: SH Syntax, Up: SH-Dependent
-
-Options
--------
-
- `as' has no additional command-line options for the Hitachi SH
-family.
-
-\1f
-File: as.info, Node: SH Syntax, Next: SH Floating Point, Prev: SH Options, Up: SH-Dependent
-
-Syntax
-------
-
-* Menu:
-
-* SH-Chars:: Special Characters
-* SH-Regs:: Register Names
-* SH-Addressing:: Addressing Modes
-
-\1f
-File: as.info, Node: SH-Chars, Next: SH-Regs, Up: SH Syntax
-
-Special Characters
-..................
-
- `!' is the line comment character.
-
- You can use `;' instead of a newline to separate statements.
-
- Since `$' has no special meaning, you may use it in symbol names.
-
-\1f
-File: as.info, Node: SH-Regs, Next: SH-Addressing, Prev: SH-Chars, Up: SH Syntax
-
-Register Names
-..............
-
- You can use the predefined symbols `r0', `r1', `r2', `r3', `r4',
-`r5', `r6', `r7', `r8', `r9', `r10', `r11', `r12', `r13', `r14', and
-`r15' to refer to the SH registers.
-
- The SH also has these control registers:
-
-`pr'
- procedure register (holds return address)
-
-`pc'
- program counter
-
-`mach'
-`macl'
- high and low multiply accumulator registers
-
-`sr'
- status register
-
-`gbr'
- global base register
-
-`vbr'
- vector base register (for interrupt vectors)
-
-\1f
-File: as.info, Node: SH-Addressing, Prev: SH-Regs, Up: SH Syntax
-
-Addressing Modes
-................
-
- `as' understands the following addressing modes for the SH. `RN' in
-the following refers to any of the numbered registers, but *not* the
-control registers.
-
-`RN'
- Register direct
-
-`@RN'
- Register indirect
-
-`@-RN'
- Register indirect with pre-decrement
-
-`@RN+'
- Register indirect with post-increment
-
-`@(DISP, RN)'
- Register indirect with displacement
-
-`@(R0, RN)'
- Register indexed
-
-`@(DISP, GBR)'
- `GBR' offset
-
-`@(R0, GBR)'
- GBR indexed
-
-`ADDR'
-`@(DISP, PC)'
- PC relative address (for branch or for addressing memory). The
- `as' implementation allows you to use the simpler form ADDR
- anywhere a PC relative address is called for; the alternate form
- is supported for compatibility with other assemblers.
-
-`#IMM'
- Immediate data
-
-\1f
-File: as.info, Node: SH Floating Point, Next: SH Directives, Prev: SH Syntax, Up: SH-Dependent
-
-Floating Point
---------------
-
- The SH family uses IEEE floating-point numbers.
-
-\1f
-File: as.info, Node: SH Directives, Next: SH Opcodes, Prev: SH Floating Point, Up: SH-Dependent
-
-SH Machine Directives
----------------------
-
- `as' has no machine-dependent directives for the SH.
-
-\1f
-File: as.info, Node: SH Opcodes, Prev: SH Directives, Up: SH-Dependent
-
-Opcodes
--------
-
- For detailed information on the SH machine instruction set, see
-`SH-Microcomputer User's Manual' (Hitachi Micro Systems, Inc.).
-
- `as' implements all the standard SH opcodes. No additional
-pseudo-instructions are needed on this family. Note, however, that
-because `as' supports a simpler form of PC-relative addressing, you may
-simply write (for example)
-
- mov.l bar,r0
-
-where other assemblers might require an explicit displacement to `bar'
-from the program counter:
-
- mov.l @(DISP, PC)
-
- Here is a summary of SH opcodes:
-
- Legend:
- Rn a numbered register
- Rm another numbered register
- #imm immediate data
- disp displacement
- disp8 8-bit displacement
- disp12 12-bit displacement
-
- add #imm,Rn lds.l @Rn+,PR
- add Rm,Rn mac.w @Rm+,@Rn+
- addc Rm,Rn mov #imm,Rn
- addv Rm,Rn mov Rm,Rn
- and #imm,R0 mov.b Rm,@(R0,Rn)
- and Rm,Rn mov.b Rm,@-Rn
- and.b #imm,@(R0,GBR) mov.b Rm,@Rn
- bf disp8 mov.b @(disp,Rm),R0
- bra disp12 mov.b @(disp,GBR),R0
- bsr disp12 mov.b @(R0,Rm),Rn
- bt disp8 mov.b @Rm+,Rn
- clrm mov.b @Rm,Rn
- clrt mov.b R0,@(disp,Rm)
- cmp/eq #imm,R0 mov.b R0,@(disp,GBR)
- cmp/eq Rm,Rn mov.l Rm,@(disp,Rn)
- cmp/ge Rm,Rn mov.l Rm,@(R0,Rn)
- cmp/gt Rm,Rn mov.l Rm,@-Rn
- cmp/hi Rm,Rn mov.l Rm,@Rn
- cmp/hs Rm,Rn mov.l @(disp,Rn),Rm
- cmp/pl Rn mov.l @(disp,GBR),R0
- cmp/pz Rn mov.l @(disp,PC),Rn
- cmp/str Rm,Rn mov.l @(R0,Rm),Rn
- div0s Rm,Rn mov.l @Rm+,Rn
- div0u mov.l @Rm,Rn
- div1 Rm,Rn mov.l R0,@(disp,GBR)
- exts.b Rm,Rn mov.w Rm,@(R0,Rn)
- exts.w Rm,Rn mov.w Rm,@-Rn
- extu.b Rm,Rn mov.w Rm,@Rn
- extu.w Rm,Rn mov.w @(disp,Rm),R0
- jmp @Rn mov.w @(disp,GBR),R0
- jsr @Rn mov.w @(disp,PC),Rn
- ldc Rn,GBR mov.w @(R0,Rm),Rn
- ldc Rn,SR mov.w @Rm+,Rn
- ldc Rn,VBR mov.w @Rm,Rn
- ldc.l @Rn+,GBR mov.w R0,@(disp,Rm)
- ldc.l @Rn+,SR mov.w R0,@(disp,GBR)
- ldc.l @Rn+,VBR mova @(disp,PC),R0
- lds Rn,MACH movt Rn
- lds Rn,MACL muls Rm,Rn
- lds Rn,PR mulu Rm,Rn
- lds.l @Rn+,MACH neg Rm,Rn
- lds.l @Rn+,MACL negc Rm,Rn
-
- nop stc VBR,Rn
- not Rm,Rn stc.l GBR,@-Rn
- or #imm,R0 stc.l SR,@-Rn
- or Rm,Rn stc.l VBR,@-Rn
- or.b #imm,@(R0,GBR) sts MACH,Rn
- rotcl Rn sts MACL,Rn
- rotcr Rn sts PR,Rn
- rotl Rn sts.l MACH,@-Rn
- rotr Rn sts.l MACL,@-Rn
- rte sts.l PR,@-Rn
- rts sub Rm,Rn
- sett subc Rm,Rn
- shal Rn subv Rm,Rn
- shar Rn swap.b Rm,Rn
- shll Rn swap.w Rm,Rn
- shll16 Rn tas.b @Rn
- shll2 Rn trapa #imm
- shll8 Rn tst #imm,R0
- shlr Rn tst Rm,Rn
- shlr16 Rn tst.b #imm,@(R0,GBR)
- shlr2 Rn xor #imm,R0
- shlr8 Rn xor Rm,Rn
- sleep xor.b #imm,@(R0,GBR)
- stc GBR,Rn xtrct Rm,Rn
- stc SR,Rn
-
-\1f
-File: as.info, Node: i960-Dependent, Next: M68K-Dependent, Prev: SH-Dependent, Up: Machine Dependencies
-
-Intel 80960 Dependent Features
-==============================
-
-* Menu:
-
-* Options-i960:: i960 Command-line Options
-* Floating Point-i960:: Floating Point
-* Directives-i960:: i960 Machine Directives
-* Opcodes for i960:: i960 Opcodes
-
-\1f
-File: as.info, Node: Options-i960, Next: Floating Point-i960, Up: i960-Dependent
-
-i960 Command-line Options
--------------------------
-
-`-ACA | -ACA_A | -ACB | -ACC | -AKA | -AKB | -AKC | -AMC'
- Select the 80960 architecture. Instructions or features not
- supported by the selected architecture cause fatal errors.
-
- `-ACA' is equivalent to `-ACA_A'; `-AKC' is equivalent to `-AMC'.
- Synonyms are provided for compatibility with other tools.
-
- If none of these options is specified, `as' will generate code for
- any instruction or feature that is supported by *some* version of
- the 960 (even if this means mixing architectures!). In principle,
- `as' will attempt to deduce the minimal sufficient processor type
- if none is specified; depending on the object code format, the
- processor type may be recorded in the object file. If it is
- critical that the `as' output match a specific architecture,
- specify that architecture explicitly.
-
-`-b'
- Add code to collect information about conditional branches taken,
- for later optimization using branch prediction bits. (The
- conditional branch instructions have branch prediction bits in the
- CA, CB, and CC architectures.) If BR represents a conditional
- branch instruction, the following represents the code generated by
- the assembler when `-b' is specified:
-
- call INCREMENT ROUTINE
- .word 0 # pre-counter
- Label: BR
- call INCREMENT ROUTINE
- .word 0 # post-counter
-
- The counter following a branch records the number of times that
- branch was *not* taken; the differenc between the two counters is
- the number of times the branch *was* taken.
-
- A table of every such `Label' is also generated, so that the
- external postprocessor `gbr960' (supplied by Intel) can locate all
- the counters. This table is always labelled `__BRANCH_TABLE__';
- this is a local symbol to permit collecting statistics for many
- separate object files. The table is word aligned, and begins with
- a two-word header. The first word, initialized to 0, is used in
- maintaining linked lists of branch tables. The second word is a
- count of the number of entries in the table, which follow
- immediately: each is a word, pointing to one of the labels
- illustrated above.
-
- +------------+------------+------------+ ... +------------+
- | | | | | |
- | *NEXT | COUNT: N | *BRLAB 1 | | *BRLAB N |
- | | | | | |
- +------------+------------+------------+ ... +------------+
-
- __BRANCH_TABLE__ layout
-
- The first word of the header is used to locate multiple branch
- tables, since each object file may contain one. Normally the links
- are maintained with a call to an initialization routine, placed at
- the beginning of each function in the file. The GNU C compiler
- will generate these calls automatically when you give it a `-b'
- option. For further details, see the documentation of `gbr960'.
-
-`-norelax'
- Normally, Compare-and-Branch instructions with targets that require
- displacements greater than 13 bits (or that have external targets)
- are replaced with the corresponding compare (or `chkbit') and
- branch instructions. You can use the `-norelax' option to specify
- that `as' should generate errors instead, if the target
- displacement is larger than 13 bits.
-
- This option does not affect the Compare-and-Jump instructions; the
- code emitted for them is *always* adjusted when necessary
- (depending on displacement size), regardless of whether you use
- `-norelax'.
-
-\1f
-File: as.info, Node: Floating Point-i960, Next: Directives-i960, Prev: Options-i960, Up: i960-Dependent
-
-Floating Point
---------------
-
- `as' generates IEEE floating-point numbers for the directives
-`.float', `.double', `.extended', and `.single'.
-
-\1f
-File: as.info, Node: Directives-i960, Next: Opcodes for i960, Prev: Floating Point-i960, Up: i960-Dependent
-
-i960 Machine Directives
------------------------
-
-`.bss SYMBOL, LENGTH, ALIGN'
- Reserve LENGTH bytes in the bss section for a local SYMBOL,
- aligned to the power of two specified by ALIGN. LENGTH and ALIGN
- must be positive absolute expressions. This directive differs
- from `.lcomm' only in that it permits you to specify an alignment.
- *Note `.lcomm': Lcomm.
-
-`.extended FLONUMS'
- `.extended' expects zero or more flonums, separated by commas; for
- each flonum, `.extended' emits an IEEE extended-format (80-bit)
- floating-point number.
-
-`.leafproc CALL-LAB, BAL-LAB'
- You can use the `.leafproc' directive in conjunction with the
- optimized `callj' instruction to enable faster calls of leaf
- procedures. If a procedure is known to call no other procedures,
- you may define an entry point that skips procedure prolog code
- (and that does not depend on system-supplied saved context), and
- declare it as the BAL-LAB using `.leafproc'. If the procedure
- also has an entry point that goes through the normal prolog, you
- can specify that entry point as CALL-LAB.
-
- A `.leafproc' declaration is meant for use in conjunction with the
- optimized call instruction `callj'; the directive records the data
- needed later to choose between converting the `callj' into a `bal'
- or a `call'.
-
- CALL-LAB is optional; if only one argument is present, or if the
- two arguments are identical, the single argument is assumed to be
- the `bal' entry point.
-
-`.sysproc NAME, INDEX'
- The `.sysproc' directive defines a name for a system procedure.
- After you define it using `.sysproc', you can use NAME to refer to
- the system procedure identified by INDEX when calling procedures
- with the optimized call instruction `callj'.
-
- Both arguments are required; INDEX must be between 0 and 31
- (inclusive).
-
-\1f
-File: as.info, Node: Opcodes for i960, Prev: Directives-i960, Up: i960-Dependent
-
-i960 Opcodes
-------------
-
- All Intel 960 machine instructions are supported; *note i960
-Command-line Options: Options-i960. for a discussion of selecting the
-instruction subset for a particular 960 architecture.
-
- Some opcodes are processed beyond simply emitting a single
-corresponding instruction: `callj', and Compare-and-Branch or
-Compare-and-Jump instructions with target displacements larger than 13
-bits.
-
-* Menu:
-
-* callj-i960:: `callj'
-* Compare-and-branch-i960:: Compare-and-Branch
-
-\1f
-File: as.info, Node: callj-i960, Next: Compare-and-branch-i960, Up: Opcodes for i960
-
-`callj'
-.......
-
- You can write `callj' to have the assembler or the linker determine
-the most appropriate form of subroutine call: `call', `bal', or
-`calls'. If the assembly source contains enough information--a
-`.leafproc' or `.sysproc' directive defining the operand--then `as'
-will translate the `callj'; if not, it will simply emit the `callj',
-leaving it for the linker to resolve.
-
-\1f
-File: as.info, Node: Compare-and-branch-i960, Prev: callj-i960, Up: Opcodes for i960
-
-Compare-and-Branch
-..................
-
- The 960 architectures provide combined Compare-and-Branch
-instructions that permit you to store the branch target in the lower 13
-bits of the instruction word itself. However, if you specify a branch
-target far enough away that its address won't fit in 13 bits, the
-assembler can either issue an error, or convert your Compare-and-Branch
-instruction into separate instructions to do the compare and the branch.
-
- Whether `as' gives an error or expands the instruction depends on
-two choices you can make: whether you use the `-norelax' option, and
-whether you use a "Compare and Branch" instruction or a "Compare and
-Jump" instruction. The "Jump" instructions are *always* expanded if
-necessary; the "Branch" instructions are expanded when necessary
-*unless* you specify `-norelax'--in which case `as' gives an error
-instead.
-
- These are the Compare-and-Branch instructions, their "Jump" variants,
-and the instruction pairs they may expand into:
-
- Compare and
- Branch Jump Expanded to
- ------ ------ ------------
- bbc chkbit; bno
- bbs chkbit; bo
- cmpibe cmpije cmpi; be
- cmpibg cmpijg cmpi; bg
- cmpibge cmpijge cmpi; bge
- cmpibl cmpijl cmpi; bl
- cmpible cmpijle cmpi; ble
- cmpibno cmpijno cmpi; bno
- cmpibne cmpijne cmpi; bne
- cmpibo cmpijo cmpi; bo
- cmpobe cmpoje cmpo; be
- cmpobg cmpojg cmpo; bg
- cmpobge cmpojge cmpo; bge
- cmpobl cmpojl cmpo; bl
- cmpoble cmpojle cmpo; ble
- cmpobne cmpojne cmpo; bne
-
-\1f
-File: as.info, Node: M68K-Dependent, Next: Sparc-Dependent, Prev: i960-Dependent, Up: Machine Dependencies
-
-M680x0 Dependent Features
-=========================
-
-* Menu:
-
-* M68K-Opts:: M680x0 Options
-* M68K-Syntax:: Syntax
-* M68K-Moto-Syntax:: Motorola Syntax
-* M68K-Float:: Floating Point
-* M68K-Directives:: 680x0 Machine Directives
-* M68K-opcodes:: Opcodes
-
-\1f
-File: as.info, Node: M68K-Opts, Next: M68K-Syntax, Up: M68K-Dependent
-
-M680x0 Options
---------------
-
- The Motorola 680x0 version of `as' has two machine dependent options.
-One shortens undefined references from 32 to 16 bits, while the other
-is used to tell `as' what kind of machine it is assembling for.
-
- You can use the `-l' option to shorten the size of references to
-undefined symbols. If the `-l' option is not given, references to
-undefined symbols will be a full long (32 bits) wide. (Since `as'
-cannot know where these symbols will end up, `as' can only allocate
-space for the linker to fill in later. Since `as' doesn't know how far
-away these symbols will be, it allocates as much space as it can.) If
-this option is given, the references will only be one word wide (16
-bits). This may be useful if you want the object file to be as small as
-possible, and you know that the relevant symbols will be less than 17
-bits away.
-
- The 680x0 version of `as' is most frequently used to assemble
-programs for the Motorola MC68020 microprocessor. Occasionally it is
-used to assemble programs for the mostly similar, but slightly different
-MC68000 or MC68010 microprocessors. You can give `as' the options
-`-m68000', `-mc68000', `-m68010', `-mc68010', `-m68020', and `-mc68020'
-to tell it what processor is the target.
-
-\1f
-File: as.info, Node: M68K-Syntax, Next: M68K-Moto-Syntax, Prev: M68K-Opts, Up: M68K-Dependent
-
-Syntax
-------
-
- This syntax for the Motorola 680x0 was developed at MIT.
-
- The 680x0 version of `as' uses syntax similar to the Sun assembler.
-Intervening periods are now ignored; for example, `movl' is equivalent
-to `move.l'.
-
- In the following table "apc" stands for any of the address registers
-(`a0' through `a7'), nothing, (`'), the Program Counter (`pc'), or the
-zero-address relative to the program counter (`zpc').
-
- The following addressing modes are understood:
-"Immediate"
- `#DIGITS'
-
-"Data Register"
- `d0' through `d7'
-
-"Address Register"
- `a0' through `a7'
-
-"Address Register Indirect"
- `a0@' through `a7@'
- `a7' is also known as `sp', i.e. the Stack Pointer. `a6' is also
- known as `fp', the Frame Pointer.
-
-"Address Register Postincrement"
- `a0@+' through `a7@+'
-
-"Address Register Predecrement"
- `a0@-' through `a7@-'
-
-"Indirect Plus Offset"
- `APC@(DIGITS)'
-
-"Index"
- `APC@(DIGITS,REGISTER:SIZE:SCALE)'
-
- or `APC@(REGISTER:SIZE:SCALE)'
-
-"Postindex"
- `APC@(DIGITS)@(DIGITS,REGISTER:SIZE:SCALE)'
-
- or `APC@(DIGITS)@(REGISTER:SIZE:SCALE)'
-
-"Preindex"
- `APC@(DIGITS,REGISTER:SIZE:SCALE)@(DIGITS)'
-
- or `APC@(REGISTER:SIZE:SCALE)@(DIGITS)'
-
-"Memory Indirect"
- `APC@(DIGITS)@(DIGITS)'
-
-"Absolute"
- `SYMBOL', or `DIGITS'
-
- For some configurations, especially those where the compiler normally
-does not prepend an underscore to the names of user variables, the
-assembler requires a `%' before any use of a register name. This is
-intended to let the assembler distinguish between user variables and
-registers named `a0' through `a7', et cetera. The `%' is always
-accepted, but is only required for some configurations, notably
-`m68k-coff'.
-
-\1f
-File: as.info, Node: M68K-Moto-Syntax, Next: M68K-Float, Prev: M68K-Syntax, Up: M68K-Dependent
-
-Motorola Syntax
----------------
-
- The standard Motorola syntax for this chip differs from the syntax
-already discussed (*note Syntax: M68K-Syntax.). `as' can accept both
-kinds of syntax, even within a single instruction. The syntaxes are
-fully compatible, because the Motorola syntax never uses the `@'
-character and the MIT syntax always does, except in cases where the
-syntaxes are identical.
-
- In particular, you may write or generate M68K assembler with the
-following conventions:
-
- (In the following table "apc" stands for any of the address
-registers (`a0' through `a7'), nothing, (`'), the Program Counter
-(`pc'), or the zero-address relative to the program counter (`zpc').)
-
- The following additional addressing modes are understood:
-"Address Register Indirect"
- `a0' through `a7'
- `a7' is also known as `sp', i.e. the Stack Pointer. `a6' is also
- known as `fp', the Frame Pointer.
-
-"Address Register Postincrement"
- `(a0)+' through `(a7)+'
-
-"Address Register Predecrement"
- `-(a0)' through `-(a7)'
-
-"Indirect Plus Offset"
- `DIGITS(APC)'
-
-"Index"
- `DIGITS(APC,(REGISTER.SIZE*SCALE)'
- or `(APC,REGISTER.SIZE*SCALE)'
- In either case, SIZE and SCALE are optional (SCALE defaults to
- `1', SIZE defaults to `l'). SCALE can be `1', `2', `4', or `8'.
- SIZE can be `w' or `l'. SCALE is only supported on the 68020 and
- greater.
-
-\1f
-File: as.info, Node: M68K-Float, Next: M68K-Directives, Prev: M68K-Moto-Syntax, Up: M68K-Dependent
-
-Floating Point
---------------
-
- The floating point code is not too well tested, and may have subtle
-bugs in it.
-
- Packed decimal (P) format floating literals are not supported. Feel
-free to add the code!
-
- The floating point formats generated by directives are these.
-
-`.float'
- `Single' precision floating point constants.
-
-`.double'
- `Double' precision floating point constants.
-
- There is no directive to produce regions of memory holding extended
-precision numbers, however they can be used as immediate operands to
-floating-point instructions. Adding a directive to create extended
-precision numbers would not be hard, but it has not yet seemed
-necessary.
-
-\1f
-File: as.info, Node: M68K-Directives, Next: M68K-opcodes, Prev: M68K-Float, Up: M68K-Dependent
-
-680x0 Machine Directives
-------------------------
-
- In order to be compatible with the Sun assembler the 680x0 assembler
-understands the following directives.
-
-`.data1'
- This directive is identical to a `.data 1' directive.
-
-`.data2'
- This directive is identical to a `.data 2' directive.
-
-`.even'
- This directive is identical to a `.align 1' directive.
-
-`.skip'
- This directive is identical to a `.space' directive.
-
-\1f
-File: as.info, Node: M68K-opcodes, Prev: M68K-Directives, Up: M68K-Dependent
-
-Opcodes
--------
-
-* Menu:
-
-* M68K-Branch:: Branch Improvement
-* M68K-Chars:: Special Characters
-
-\1f
-File: as.info, Node: M68K-Branch, Next: M68K-Chars, Up: M68K-opcodes
-
-Branch Improvement
-..................
-
- Certain pseudo opcodes are permitted for branch instructions. They
-expand to the shortest branch instruction that will reach the target.
-Generally these mnemonics are made by substituting `j' for `b' at the
-start of a Motorola mnemonic.
-
- The following table summarizes the pseudo-operations. A `*' flags
-cases that are more fully described after the table:
-
- Displacement
- +-------------------------------------------------
- | 68020 68000/10
- Pseudo-Op |BYTE WORD LONG LONG non-PC relative
- +-------------------------------------------------
- jbsr |bsrs bsr bsrl jsr jsr
- jra |bras bra bral jmp jmp
- * jXX |bXXs bXX bXXl bNXs;jmpl bNXs;jmp
- * dbXX |dbXX dbXX dbXX; bra; jmpl
- * fjXX |fbXXw fbXXw fbXXl fbNXw;jmp
-
- XX: condition
- NX: negative of condition XX
-
- `*'--see full description below
-
-`jbsr'
-`jra'
- These are the simplest jump pseudo-operations; they always map to
- one particular machine instruction, depending on the displacement
- to the branch target.
-
-`jXX'
- Here, `jXX' stands for an entire family of pseudo-operations,
- where XX is a conditional branch or condition-code test. The full
- list of pseudo-ops in this family is:
- jhi jls jcc jcs jne jeq jvc
- jvs jpl jmi jge jlt jgt jle
-
- For the cases of non-PC relative displacements and long
- displacements on the 68000 or 68010, `as' will issue a longer code
- fragment in terms of NX, the opposite condition to XX. For
- example, for the non-PC relative case:
- jXX foo
- gives
- bNXs oof
- jmp foo
- oof:
-
-`dbXX'
- The full family of pseudo-operations covered here is
- dbhi dbls dbcc dbcs dbne dbeq dbvc
- dbvs dbpl dbmi dbge dblt dbgt dble
- dbf dbra dbt
-
- Other than for word and byte displacements, when the source reads
- `dbXX foo', `as' will emit
- dbXX oo1
- bra oo2
- oo1:jmpl foo
- oo2:
-
-`fjXX'
- This family includes
- fjne fjeq fjge fjlt fjgt fjle fjf
- fjt fjgl fjgle fjnge fjngl fjngle fjngt
- fjnle fjnlt fjoge fjogl fjogt fjole fjolt
- fjor fjseq fjsf fjsne fjst fjueq fjuge
- fjugt fjule fjult fjun
-
- For branch targets that are not PC relative, `as' emits
- fbNX oof
- jmp foo
- oof:
- when it encounters `fjXX foo'.
-
+++ /dev/null
-This is Info file as.info, produced by Makeinfo-1.55 from the input
-file ./as.texinfo.
-
-START-INFO-DIR-ENTRY
-* As:: The GNU assembler.
-END-INFO-DIR-ENTRY
-
- This file documents the GNU Assembler "as".
-
- Copyright (C) 1991, 1992, 1993 Free Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the section entitled "GNU General Public License" is included
-exactly as in the original, and provided that the entire resulting
-derived work is distributed under the terms of a permission notice
-identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the section entitled "GNU General Public License"
-may be included in a translation approved by the Free Software
-Foundation instead of in the original English.
-
-\1f
-File: as.info, Node: M68K-Chars, Prev: M68K-Branch, Up: M68K-opcodes
-
-Special Characters
-..................
-
- The immediate character is `#' for Sun compatibility. The
-line-comment character is `|'. If a `#' appears at the beginning of a
-line, it is treated as a comment unless it looks like `# line file', in
-which case it is treated normally.
-
-\1f
-File: as.info, Node: Sparc-Dependent, Next: Z8000-Dependent, Prev: M68K-Dependent, Up: Machine Dependencies
-
-SPARC Dependent Features
-========================
-
-* Menu:
-
-* Sparc-Opts:: Options
-* Sparc-Float:: Floating Point
-* Sparc-Directives:: Sparc Machine Directives
-
-\1f
-File: as.info, Node: Sparc-Opts, Next: Sparc-Float, Up: Sparc-Dependent
-
-Options
--------
-
- The SPARC chip family includes several successive levels (or other
-variants) of chip, using the same core instruction set, but including a
-few additional instructions at each level.
-
- By default, `as' assumes the core instruction set (SPARC v6), but
-"bumps" the architecture level as needed: it switches to successively
-higher architectures as it encounters instructions that only exist in
-the higher levels.
-
-`-Av6 | -Av7 | -Av8 | -Asparclite'
- Use one of the `-A' options to select one of the SPARC
- architectures explicitly. If you select an architecture
- explicitly, `as' reports a fatal error if it encounters an
- instruction or feature requiring a higher level.
-
-`-bump'
- Permit the assembler to "bump" the architecture level as required,
- but warn whenever it is necessary to switch to another level.
-
-\1f
-File: as.info, Node: Sparc-Float, Next: Sparc-Directives, Prev: Sparc-Opts, Up: Sparc-Dependent
-
-Floating Point
---------------
-
- The Sparc uses IEEE floating-point numbers.
-
-\1f
-File: as.info, Node: Sparc-Directives, Prev: Sparc-Float, Up: Sparc-Dependent
-
-Sparc Machine Directives
-------------------------
-
- The Sparc version of `as' supports the following additional machine
-directives:
-
-`.common'
- This must be followed by a symbol name, a positive number, and
- `"bss"'. This behaves somewhat like `.comm', but the syntax is
- different.
-
-`.half'
- This is functionally identical to `.short'.
-
-`.proc'
- This directive is ignored. Any text following it on the same line
- is also ignored.
-
-`.reserve'
- This must be followed by a symbol name, a positive number, and
- `"bss"'. This behaves somewhat like `.lcomm', but the syntax is
- different.
-
-`.seg'
- This must be followed by `"text"', `"data"', or `"data1"'. It
- behaves like `.text', `.data', or `.data 1'.
-
-`.skip'
- This is functionally identical to the `.space' directive.
-
-`.word'
- On the Sparc, the .word directive produces 32 bit values, instead
- of the 16 bit values it produces on many other machines.
-
-\1f
-File: as.info, Node: i386-Dependent, Prev: Z8000-Dependent, Up: Machine Dependencies
-
-80386 Dependent Features
-========================
-
-* Menu:
-
-* i386-Options:: Options
-* i386-Syntax:: AT&T Syntax versus Intel Syntax
-* i386-Opcodes:: Opcode Naming
-* i386-Regs:: Register Naming
-* i386-prefixes:: Opcode Prefixes
-* i386-Memory:: Memory References
-* i386-jumps:: Handling of Jump Instructions
-* i386-Float:: Floating Point
-* i386-Notes:: Notes
-
-\1f
-File: as.info, Node: i386-Options, Next: i386-Syntax, Up: i386-Dependent
-
-Options
--------
-
- The 80386 has no machine dependent options.
-
-\1f
-File: as.info, Node: i386-Syntax, Next: i386-Opcodes, Prev: i386-Options, Up: i386-Dependent
-
-AT&T Syntax versus Intel Syntax
--------------------------------
-
- In order to maintain compatibility with the output of `gcc', `as'
-supports AT&T System V/386 assembler syntax. This is quite different
-from Intel syntax. We mention these differences because almost all
-80386 documents used only Intel syntax. Notable differences between
-the two syntaxes are:
-
- * AT&T immediate operands are preceded by `$'; Intel immediate
- operands are undelimited (Intel `push 4' is AT&T `pushl $4').
- AT&T register operands are preceded by `%'; Intel register operands
- are undelimited. AT&T absolute (as opposed to PC relative)
- jump/call operands are prefixed by `*'; they are undelimited in
- Intel syntax.
-
- * AT&T and Intel syntax use the opposite order for source and
- destination operands. Intel `add eax, 4' is `addl $4, %eax'. The
- `source, dest' convention is maintained for compatibility with
- previous Unix assemblers.
-
- * In AT&T syntax the size of memory operands is determined from the
- last character of the opcode name. Opcode suffixes of `b', `w',
- and `l' specify byte (8-bit), word (16-bit), and long (32-bit)
- memory references. Intel syntax accomplishes this by prefixes
- memory operands (*not* the opcodes themselves) with `byte ptr',
- `word ptr', and `dword ptr'. Thus, Intel `mov al, byte ptr FOO'
- is `movb FOO, %al' in AT&T syntax.
-
- * Immediate form long jumps and calls are `lcall/ljmp $SECTION,
- $OFFSET' in AT&T syntax; the Intel syntax is `call/jmp far
- SECTION:OFFSET'. Also, the far return instruction is `lret
- $STACK-ADJUST' in AT&T syntax; Intel syntax is `ret far
- STACK-ADJUST'.
-
- * The AT&T assembler does not provide support for multiple section
- programs. Unix style systems expect all programs to be single
- sections.
-
-\1f
-File: as.info, Node: i386-Opcodes, Next: i386-Regs, Prev: i386-Syntax, Up: i386-Dependent
-
-Opcode Naming
--------------
-
- Opcode names are suffixed with one character modifiers which specify
-the size of operands. The letters `b', `w', and `l' specify byte,
-word, and long operands. If no suffix is specified by an instruction
-and it contains no memory operands then `as' tries to fill in the
-missing suffix based on the destination register operand (the last one
-by convention). Thus, `mov %ax, %bx' is equivalent to `movw %ax, %bx';
-also, `mov $1, %bx' is equivalent to `movw $1, %bx'. Note that this is
-incompatible with the AT&T Unix assembler which assumes that a missing
-opcode suffix implies long operand size. (This incompatibility does
-not affect compiler output since compilers always explicitly specify
-the opcode suffix.)
-
- Almost all opcodes have the same names in AT&T and Intel format.
-There are a few exceptions. The sign extend and zero extend
-instructions need two sizes to specify them. They need a size to
-sign/zero extend *from* and a size to zero extend *to*. This is
-accomplished by using two opcode suffixes in AT&T syntax. Base names
-for sign extend and zero extend are `movs...' and `movz...' in AT&T
-syntax (`movsx' and `movzx' in Intel syntax). The opcode suffixes are
-tacked on to this base name, the *from* suffix before the *to* suffix.
-Thus, `movsbl %al, %edx' is AT&T syntax for "move sign extend *from*
-%al *to* %edx." Possible suffixes, thus, are `bl' (from byte to long),
-`bw' (from byte to word), and `wl' (from word to long).
-
- The Intel-syntax conversion instructions
-
- * `cbw' -- sign-extend byte in `%al' to word in `%ax',
-
- * `cwde' -- sign-extend word in `%ax' to long in `%eax',
-
- * `cwd' -- sign-extend word in `%ax' to long in `%dx:%ax',
-
- * `cdq' -- sign-extend dword in `%eax' to quad in `%edx:%eax',
-
-are called `cbtw', `cwtl', `cwtd', and `cltd' in AT&T naming. `as'
-accepts either naming for these instructions.
-
- Far call/jump instructions are `lcall' and `ljmp' in AT&T syntax,
-but are `call far' and `jump far' in Intel convention.
-
-\1f
-File: as.info, Node: i386-Regs, Next: i386-prefixes, Prev: i386-Opcodes, Up: i386-Dependent
-
-Register Naming
----------------
-
- Register operands are always prefixes with `%'. The 80386 registers
-consist of
-
- * the 8 32-bit registers `%eax' (the accumulator), `%ebx', `%ecx',
- `%edx', `%edi', `%esi', `%ebp' (the frame pointer), and `%esp'
- (the stack pointer).
-
- * the 8 16-bit low-ends of these: `%ax', `%bx', `%cx', `%dx', `%di',
- `%si', `%bp', and `%sp'.
-
- * the 8 8-bit registers: `%ah', `%al', `%bh', `%bl', `%ch', `%cl',
- `%dh', and `%dl' (These are the high-bytes and low-bytes of `%ax',
- `%bx', `%cx', and `%dx')
-
- * the 6 section registers `%cs' (code section), `%ds' (data
- section), `%ss' (stack section), `%es', `%fs', and `%gs'.
-
- * the 3 processor control registers `%cr0', `%cr2', and `%cr3'.
-
- * the 6 debug registers `%db0', `%db1', `%db2', `%db3', `%db6', and
- `%db7'.
-
- * the 2 test registers `%tr6' and `%tr7'.
-
- * the 8 floating point register stack `%st' or equivalently
- `%st(0)', `%st(1)', `%st(2)', `%st(3)', `%st(4)', `%st(5)',
- `%st(6)', and `%st(7)'.
-
-\1f
-File: as.info, Node: i386-prefixes, Next: i386-Memory, Prev: i386-Regs, Up: i386-Dependent
-
-Opcode Prefixes
----------------
-
- Opcode prefixes are used to modify the following opcode. They are
-used to repeat string instructions, to provide section overrides, to
-perform bus lock operations, and to give operand and address size
-(16-bit operands are specified in an instruction by prefixing what would
-normally be 32-bit operands with a "operand size" opcode prefix).
-Opcode prefixes are usually given as single-line instructions with no
-operands, and must directly precede the instruction they act upon. For
-example, the `scas' (scan string) instruction is repeated with:
- repne
- scas
-
- Here is a list of opcode prefixes:
-
- * Section override prefixes `cs', `ds', `ss', `es', `fs', `gs'.
- These are automatically added by specifying using the
- SECTION:MEMORY-OPERAND form for memory references.
-
- * Operand/Address size prefixes `data16' and `addr16' change 32-bit
- operands/addresses into 16-bit operands/addresses. Note that
- 16-bit addressing modes (i.e. 8086 and 80286 addressing modes) are
- not supported (yet).
-
- * The bus lock prefix `lock' inhibits interrupts during execution of
- the instruction it precedes. (This is only valid with certain
- instructions; see a 80386 manual for details).
-
- * The wait for coprocessor prefix `wait' waits for the coprocessor
- to complete the current instruction. This should never be needed
- for the 80386/80387 combination.
-
- * The `rep', `repe', and `repne' prefixes are added to string
- instructions to make them repeat `%ecx' times.
-
-\1f
-File: as.info, Node: i386-Memory, Next: i386-jumps, Prev: i386-prefixes, Up: i386-Dependent
-
-Memory References
------------------
-
- An Intel syntax indirect memory reference of the form
-
- SECTION:[BASE + INDEX*SCALE + DISP]
-
-is translated into the AT&T syntax
-
- SECTION:DISP(BASE, INDEX, SCALE)
-
-where BASE and INDEX are the optional 32-bit base and index registers,
-DISP is the optional displacement, and SCALE, taking the values 1, 2,
-4, and 8, multiplies INDEX to calculate the address of the operand. If
-no SCALE is specified, SCALE is taken to be 1. SECTION specifies the
-optional section register for the memory operand, and may override the
-default section register (see a 80386 manual for section register
-defaults). Note that section overrides in AT&T syntax *must* have be
-preceded by a `%'. If you specify a section override which coincides
-with the default section register, `as' will *not* output any section
-register override prefixes to assemble the given instruction. Thus,
-section overrides can be specified to emphasize which section register
-is used for a given memory operand.
-
- Here are some examples of Intel and AT&T style memory references:
-
-AT&T: `-4(%ebp)', Intel: `[ebp - 4]'
- BASE is `%ebp'; DISP is `-4'. SECTION is missing, and the default
- section is used (`%ss' for addressing with `%ebp' as the base
- register). INDEX, SCALE are both missing.
-
-AT&T: `foo(,%eax,4)', Intel: `[foo + eax*4]'
- INDEX is `%eax' (scaled by a SCALE 4); DISP is `foo'. All other
- fields are missing. The section register here defaults to `%ds'.
-
-AT&T: `foo(,1)'; Intel `[foo]'
- This uses the value pointed to by `foo' as a memory operand. Note
- that BASE and INDEX are both missing, but there is only *one* `,'.
- This is a syntactic exception.
-
-AT&T: `%gs:foo'; Intel `gs:foo'
- This selects the contents of the variable `foo' with section
- register SECTION being `%gs'.
-
- Absolute (as opposed to PC relative) call and jump operands must be
-prefixed with `*'. If no `*' is specified, `as' will always choose PC
-relative addressing for jump/call labels.
-
- Any instruction that has a memory operand *must* specify its size
-(byte, word, or long) with an opcode suffix (`b', `w', or `l',
-respectively).
-
-\1f
-File: as.info, Node: i386-jumps, Next: i386-Float, Prev: i386-Memory, Up: i386-Dependent
-
-Handling of Jump Instructions
------------------------------
-
- Jump instructions are always optimized to use the smallest possible
-displacements. This is accomplished by using byte (8-bit) displacement
-jumps whenever the target is sufficiently close. If a byte displacement
-is insufficient a long (32-bit) displacement is used. We do not support
-word (16-bit) displacement jumps (i.e. prefixing the jump instruction
-with the `addr16' opcode prefix), since the 80386 insists upon masking
-`%eip' to 16 bits after the word displacement is added.
-
- Note that the `jcxz', `jecxz', `loop', `loopz', `loope', `loopnz'
-and `loopne' instructions only come in byte displacements, so that it
-is possible that use of these instructions (`gcc' does not use them)
-will cause the assembler to print an error message (and generate
-incorrect code). The AT&T 80386 assembler tries to get around this
-problem by expanding `jcxz foo' to
- jcxz cx_zero
- jmp cx_nonzero
- cx_zero: jmp foo
- cx_nonzero:
-
-\1f
-File: as.info, Node: i386-Float, Next: i386-Notes, Prev: i386-jumps, Up: i386-Dependent
-
-Floating Point
---------------
-
- All 80387 floating point types except packed BCD are supported.
-(BCD support may be added without much difficulty). These data types
-are 16-, 32-, and 64- bit integers, and single (32-bit), double
-(64-bit), and extended (80-bit) precision floating point. Each
-supported type has an opcode suffix and a constructor associated with
-it. Opcode suffixes specify operand's data types. Constructors build
-these data types into memory.
-
- * Floating point constructors are `.float' or `.single', `.double',
- and `.tfloat' for 32-, 64-, and 80-bit formats. These correspond
- to opcode suffixes `s', `l', and `t'. `t' stands for temporary
- real, and that the 80387 only supports this format via the `fldt'
- (load temporary real to stack top) and `fstpt' (store temporary
- real and pop stack) instructions.
-
- * Integer constructors are `.word', `.long' or `.int', and `.quad'
- for the 16-, 32-, and 64-bit integer formats. The corresponding
- opcode suffixes are `s' (single), `l' (long), and `q' (quad). As
- with the temporary real format the 64-bit `q' format is only
- present in the `fildq' (load quad integer to stack top) and
- `fistpq' (store quad integer and pop stack) instructions.
-
- Register to register operations do not require opcode suffixes, so
-that `fst %st, %st(1)' is equivalent to `fstl %st, %st(1)'.
-
- Since the 80387 automatically synchronizes with the 80386 `fwait'
-instructions are almost never needed (this is not the case for the
-80286/80287 and 8086/8087 combinations). Therefore, `as' suppresses
-the `fwait' instruction whenever it is implicitly selected by one of
-the `fn...' instructions. For example, `fsave' and `fnsave' are
-treated identically. In general, all the `fn...' instructions are made
-equivalent to `f...' instructions. If `fwait' is desired it must be
-explicitly coded.
-
-\1f
-File: as.info, Node: i386-Notes, Prev: i386-Float, Up: i386-Dependent
-
-Notes
------
-
- There is some trickery concerning the `mul' and `imul' instructions
-that deserves mention. The 16-, 32-, and 64-bit expanding multiplies
-(base opcode `0xf6'; extension 4 for `mul' and 5 for `imul') can be
-output only in the one operand form. Thus, `imul %ebx, %eax' does
-*not* select the expanding multiply; the expanding multiply would
-clobber the `%edx' register, and this would confuse `gcc' output. Use
-`imul %ebx' to get the 64-bit product in `%edx:%eax'.
-
- We have added a two operand form of `imul' when the first operand is
-an immediate mode expression and the second operand is a register.
-This is just a shorthand, so that, multiplying `%eax' by 69, for
-example, can be done with `imul $69, %eax' rather than `imul $69, %eax,
-%eax'.
-
-\1f
-File: as.info, Node: Z8000-Dependent, Next: i386-Dependent, Prev: Sparc-Dependent, Up: Machine Dependencies
-
-Z8000 Dependent Features
-========================
-
- The Z8000 as supports both members of the Z8000 family: the
-unsegmented Z8002, with 16 bit addresses, and the segmented Z8001 with
-24 bit addresses.
-
- When the assembler is in unsegmented mode (specified with the
-`unsegm' directive), an address will take up one word (16 bit) sized
-register. When the assembler is in segmented mode (specified with the
-`segm' directive), a 24-bit address takes up a long (32 bit) register.
-*Note Assembler Directives for the Z8000: Z8000 Directives, for a list
-of other Z8000 specific assembler directives.
-
-* Menu:
-
-* Z8000 Options:: No special command-line options for Z8000
-* Z8000 Syntax:: Assembler syntax for the Z8000
-* Z8000 Directives:: Special directives for the Z8000
-* Z8000 Opcodes:: Opcodes
-
-\1f
-File: as.info, Node: Z8000 Options, Next: Z8000 Syntax, Up: Z8000-Dependent
-
-Options
--------
-
- `as' has no additional command-line options for the Zilog Z8000
-family.
-
-\1f
-File: as.info, Node: Z8000 Syntax, Next: Z8000 Directives, Prev: Z8000 Options, Up: Z8000-Dependent
-
-Syntax
-------
-
-* Menu:
-
-* Z8000-Chars:: Special Characters
-* Z8000-Regs:: Register Names
-* Z8000-Addressing:: Addressing Modes
-
-\1f
-File: as.info, Node: Z8000-Chars, Next: Z8000-Regs, Up: Z8000 Syntax
-
-Special Characters
-..................
-
- `!' is the line comment character.
-
- You can use `;' instead of a newline to separate statements.
-
-\1f
-File: as.info, Node: Z8000-Regs, Next: Z8000-Addressing, Prev: Z8000-Chars, Up: Z8000 Syntax
-
-Register Names
-..............
-
- The Z8000 has sixteen 16 bit registers, numbered 0 to 15. You can
-refer to different sized groups of registers by register number, with
-the prefix `r' for 16 bit registers, `rr' for 32 bit registers and `rq'
-for 64 bit registers. You can also refer to the contents of the first
-eight (of the sixteen 16 bit registers) by bytes. They are named `rNh'
-and `rNl'.
-
-*byte registers*
- r0l r0h r1h r1l r2h r2l r3h r3l
- r4h r4l r5h r5l r6h r6l r7h r7l
-*word registers*
- r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15
-*long word registers*
- rr0 rr2 rr4 rr6 rr8 rr10 rr12 rr14
-*quad word registers*
- rq0 rq4 rq8 rq12
-
-\1f
-File: as.info, Node: Z8000-Addressing, Prev: Z8000-Regs, Up: Z8000 Syntax
-
-Addressing Modes
-................
-
- as understands the following addressing modes for the Z8000:
-
-`rN'
- Register direct
-
-`@rN'
- Indirect register
-
-`ADDR'
- Direct: the 16 bit or 24 bit address (depending on whether the
- assembler is in segmented or unsegmented mode) of the operand is
- in the instruction.
-
-`address(rN)'
- Indexed: the 16 or 24 bit address is added to the 16 bit register
- to produce the final address in memory of the operand.
-
-`rN(#IMM)'
- Base Address: the 16 or 24 bit register is added to the 16 bit sign
- extended immediate displacement to produce the final address in
- memory of the operand.
-
-`rN(rM)'
- Base Index: the 16 or 24 bit register rN is added to the sign
- extended 16 bit index register rM to produce the final address in
- memory of the operand.
-
-`#XX'
- Immediate data XX.
-
-\1f
-File: as.info, Node: Z8000 Directives, Next: Z8000 Opcodes, Prev: Z8000 Syntax, Up: Z8000-Dependent
-
-Assembler Directives for the Z8000
-----------------------------------
-
- The Z8000 port of as includes these additional assembler directives,
-for compatibility with other Z8000 assemblers. As shown, these do not
-begin with `.' (unlike the ordinary as directives).
-
-`segm'
- Generates code for the segmented Z8001.
-
-`unsegm'
- Generates code for the unsegmented Z8002.
-
-`name'
- Synonym for `.file'
-
-`global'
- Synonum for `.global'
-
-`wval'
- Synonym for `.word'
-
-`lval'
- Synonym for `.long'
-
-`bval'
- Synonym for `.byte'
-
-`sval'
- Assemble a string. `sval' expects one string literal, delimited by
- single quotes. It assembles each byte of the string into
- consecutive addresses. You can use the escape sequence `%XX'
- (where XX represents a two-digit hexadecimal number) to represent
- the character whose ASCII value is XX. Use this feature to
- describe single quote and other characters that may not appear in
- string literals as themselves. For example, the C statement
- `char *a = "he said \"it's 50% off\"";' is represented in Z8000
- assembly language (shown with the assembler output in hex at the
- left) as
-
- 68652073 sval 'he said %22it%27s 50%25 off%22%00'
- 61696420
- 22697427
- 73203530
- 25206F66
- 662200
-
-`rsect'
- synonym for `.section'
-
-`block'
- synonym for `.space'
-
-`even'
- synonym for `.align 1'
-
-\1f
-File: as.info, Node: Z8000 Opcodes, Prev: Z8000 Directives, Up: Z8000-Dependent
-
-Opcodes
--------
-
- For detailed information on the Z8000 machine instruction set, see
-`Z8000 Technical Manual'.
-
- The following table summarizes the opcodes and their arguments:
-
- rs 16 bit source register
- rd 16 bit destination register
- rbs 8 bit source register
- rbd 8 bit destination register
- rrs 32 bit source register
- rrd 32 bit destination register
- rqs 64 bit source register
- rqd 64 bit destination register
- addr 16/24 bit address
- imm immediate data
-
- adc rd,rs clrb addr cpsir @rd,@rs,rr,cc
- adcb rbd,rbs clrb addr(rd) cpsirb @rd,@rs,rr,cc
- add rd,@rs clrb rbd dab rbd
- add rd,addr com @rd dbjnz rbd,disp7
- add rd,addr(rs) com addr dec @rd,imm4m1
- add rd,imm16 com addr(rd) dec addr(rd),imm4m1
- add rd,rs com rd dec addr,imm4m1
- addb rbd,@rs comb @rd dec rd,imm4m1
- addb rbd,addr comb addr decb @rd,imm4m1
- addb rbd,addr(rs) comb addr(rd) decb addr(rd),imm4m1
- addb rbd,imm8 comb rbd decb addr,imm4m1
- addb rbd,rbs comflg flags decb rbd,imm4m1
- addl rrd,@rs cp @rd,imm16 di i2
- addl rrd,addr cp addr(rd),imm16 div rrd,@rs
- addl rrd,addr(rs) cp addr,imm16 div rrd,addr
- addl rrd,imm32 cp rd,@rs div rrd,addr(rs)
- addl rrd,rrs cp rd,addr div rrd,imm16
- and rd,@rs cp rd,addr(rs) div rrd,rs
- and rd,addr cp rd,imm16 divl rqd,@rs
- and rd,addr(rs) cp rd,rs divl rqd,addr
- and rd,imm16 cpb @rd,imm8 divl rqd,addr(rs)
- and rd,rs cpb addr(rd),imm8 divl rqd,imm32
- andb rbd,@rs cpb addr,imm8 divl rqd,rrs
- andb rbd,addr cpb rbd,@rs djnz rd,disp7
- andb rbd,addr(rs) cpb rbd,addr ei i2
- andb rbd,imm8 cpb rbd,addr(rs) ex rd,@rs
- andb rbd,rbs cpb rbd,imm8 ex rd,addr
- bit @rd,imm4 cpb rbd,rbs ex rd,addr(rs)
- bit addr(rd),imm4 cpd rd,@rs,rr,cc ex rd,rs
- bit addr,imm4 cpdb rbd,@rs,rr,cc exb rbd,@rs
- bit rd,imm4 cpdr rd,@rs,rr,cc exb rbd,addr
- bit rd,rs cpdrb rbd,@rs,rr,cc exb rbd,addr(rs)
- bitb @rd,imm4 cpi rd,@rs,rr,cc exb rbd,rbs
- bitb addr(rd),imm4 cpib rbd,@rs,rr,cc ext0e imm8
- bitb addr,imm4 cpir rd,@rs,rr,cc ext0f imm8
- bitb rbd,imm4 cpirb rbd,@rs,rr,cc ext8e imm8
- bitb rbd,rs cpl rrd,@rs ext8f imm8
- bpt cpl rrd,addr exts rrd
- call @rd cpl rrd,addr(rs) extsb rd
- call addr cpl rrd,imm32 extsl rqd
- call addr(rd) cpl rrd,rrs halt
- calr disp12 cpsd @rd,@rs,rr,cc in rd,@rs
- clr @rd cpsdb @rd,@rs,rr,cc in rd,imm16
- clr addr cpsdr @rd,@rs,rr,cc inb rbd,@rs
- clr addr(rd) cpsdrb @rd,@rs,rr,cc inb rbd,imm16
- clr rd cpsi @rd,@rs,rr,cc inc @rd,imm4m1
- clrb @rd cpsib @rd,@rs,rr,cc inc addr(rd),imm4m1
- inc addr,imm4m1 ldb rbd,rs(rx) mult rrd,addr(rs)
- inc rd,imm4m1 ldb rd(imm16),rbs mult rrd,imm16
- incb @rd,imm4m1 ldb rd(rx),rbs mult rrd,rs
- incb addr(rd),imm4m1 ldctl ctrl,rs multl rqd,@rs
- incb addr,imm4m1 ldctl rd,ctrl multl rqd,addr
- incb rbd,imm4m1 ldd @rs,@rd,rr multl rqd,addr(rs)
- ind @rd,@rs,ra lddb @rs,@rd,rr multl rqd,imm32
- indb @rd,@rs,rba lddr @rs,@rd,rr multl rqd,rrs
- inib @rd,@rs,ra lddrb @rs,@rd,rr neg @rd
- inibr @rd,@rs,ra ldi @rd,@rs,rr neg addr
- iret ldib @rd,@rs,rr neg addr(rd)
- jp cc,@rd ldir @rd,@rs,rr neg rd
- jp cc,addr ldirb @rd,@rs,rr negb @rd
- jp cc,addr(rd) ldk rd,imm4 negb addr
- jr cc,disp8 ldl @rd,rrs negb addr(rd)
- ld @rd,imm16 ldl addr(rd),rrs negb rbd
- ld @rd,rs ldl addr,rrs nop
- ld addr(rd),imm16 ldl rd(imm16),rrs or rd,@rs
- ld addr(rd),rs ldl rd(rx),rrs or rd,addr
- ld addr,imm16 ldl rrd,@rs or rd,addr(rs)
- ld addr,rs ldl rrd,addr or rd,imm16
- ld rd(imm16),rs ldl rrd,addr(rs) or rd,rs
- ld rd(rx),rs ldl rrd,imm32 orb rbd,@rs
- ld rd,@rs ldl rrd,rrs orb rbd,addr
- ld rd,addr ldl rrd,rs(imm16) orb rbd,addr(rs)
- ld rd,addr(rs) ldl rrd,rs(rx) orb rbd,imm8
- ld rd,imm16 ldm @rd,rs,n orb rbd,rbs
- ld rd,rs ldm addr(rd),rs,n out @rd,rs
- ld rd,rs(imm16) ldm addr,rs,n out imm16,rs
- ld rd,rs(rx) ldm rd,@rs,n outb @rd,rbs
- lda rd,addr ldm rd,addr(rs),n outb imm16,rbs
- lda rd,addr(rs) ldm rd,addr,n outd @rd,@rs,ra
- lda rd,rs(imm16) ldps @rs outdb @rd,@rs,rba
- lda rd,rs(rx) ldps addr outib @rd,@rs,ra
- ldar rd,disp16 ldps addr(rs) outibr @rd,@rs,ra
- ldb @rd,imm8 ldr disp16,rs pop @rd,@rs
- ldb @rd,rbs ldr rd,disp16 pop addr(rd),@rs
- ldb addr(rd),imm8 ldrb disp16,rbs pop addr,@rs
- ldb addr(rd),rbs ldrb rbd,disp16 pop rd,@rs
- ldb addr,imm8 ldrl disp16,rrs popl @rd,@rs
- ldb addr,rbs ldrl rrd,disp16 popl addr(rd),@rs
- ldb rbd,@rs mbit popl addr,@rs
- ldb rbd,addr mreq rd popl rrd,@rs
- ldb rbd,addr(rs) mres push @rd,@rs
- ldb rbd,imm8 mset push @rd,addr
- ldb rbd,rbs mult rrd,@rs push @rd,addr(rs)
- ldb rbd,rs(imm16) mult rrd,addr push @rd,imm16
- push @rd,rs set addr,imm4 subl rrd,imm32
- pushl @rd,@rs set rd,imm4 subl rrd,rrs
- pushl @rd,addr set rd,rs tcc cc,rd
- pushl @rd,addr(rs) setb @rd,imm4 tccb cc,rbd
- pushl @rd,rrs setb addr(rd),imm4 test @rd
- res @rd,imm4 setb addr,imm4 test addr
- res addr(rd),imm4 setb rbd,imm4 test addr(rd)
- res addr,imm4 setb rbd,rs test rd
- res rd,imm4 setflg imm4 testb @rd
- res rd,rs sinb rbd,imm16 testb addr
- resb @rd,imm4 sinb rd,imm16 testb addr(rd)
- resb addr(rd),imm4 sind @rd,@rs,ra testb rbd
- resb addr,imm4 sindb @rd,@rs,rba testl @rd
- resb rbd,imm4 sinib @rd,@rs,ra testl addr
- resb rbd,rs sinibr @rd,@rs,ra testl addr(rd)
- resflg imm4 sla rd,imm8 testl rrd
- ret cc slab rbd,imm8 trdb @rd,@rs,rba
- rl rd,imm1or2 slal rrd,imm8 trdrb @rd,@rs,rba
- rlb rbd,imm1or2 sll rd,imm8 trib @rd,@rs,rbr
- rlc rd,imm1or2 sllb rbd,imm8 trirb @rd,@rs,rbr
- rlcb rbd,imm1or2 slll rrd,imm8 trtdrb @ra,@rb,rbr
- rldb rbb,rba sout imm16,rs trtib @ra,@rb,rr
- rr rd,imm1or2 soutb imm16,rbs trtirb @ra,@rb,rbr
- rrb rbd,imm1or2 soutd @rd,@rs,ra trtrb @ra,@rb,rbr
- rrc rd,imm1or2 soutdb @rd,@rs,rba tset @rd
- rrcb rbd,imm1or2 soutib @rd,@rs,ra tset addr
- rrdb rbb,rba soutibr @rd,@rs,ra tset addr(rd)
- rsvd36 sra rd,imm8 tset rd
- rsvd38 srab rbd,imm8 tsetb @rd
- rsvd78 sral rrd,imm8 tsetb addr
- rsvd7e srl rd,imm8 tsetb addr(rd)
- rsvd9d srlb rbd,imm8 tsetb rbd
- rsvd9f srll rrd,imm8 xor rd,@rs
- rsvdb9 sub rd,@rs xor rd,addr
- rsvdbf sub rd,addr xor rd,addr(rs)
- sbc rd,rs sub rd,addr(rs) xor rd,imm16
- sbcb rbd,rbs sub rd,imm16 xor rd,rs
- sc imm8 sub rd,rs xorb rbd,@rs
- sda rd,rs subb rbd,@rs xorb rbd,addr
- sdab rbd,rs subb rbd,addr xorb rbd,addr(rs)
- sdal rrd,rs subb rbd,addr(rs) xorb rbd,imm8
- sdl rd,rs subb rbd,imm8 xorb rbd,rbs
- sdlb rbd,rs subb rbd,rbs xorb rbd,rbs
- sdll rrd,rs subl rrd,@rs
- set @rd,imm4 subl rrd,addr
- set addr(rd),imm4 subl rrd,addr(rs)
-
-\1f
-File: as.info, Node: Acknowledgements, Next: Index, Prev: Copying, Up: Top
-
-Acknowledgements
-****************
-
- If you've contributed to `as' and your name isn't listed here, it is
-not meant as a slight. We just don't know about it. Send mail to the
-maintainer, and we'll correct the situation. Currently (June 1993), the
-maintainer is Ken Raeburn (email address `raeburn@cygnus.com').
-
- Dean Elsner wrote the original GNU assembler for the VAX.(1)
-
- Jay Fenlason maintained GAS for a while, adding support for
-gdb-specific debug information and the 68k series machines, most of the
-preprocessing pass, and extensive changes in messages.c, input-file.c,
-write.c.
-
- K. Richard Pixley maintained GAS for a while, adding various
-enhancements and many bug fixes, including merging support for several
-processors, breaking GAS up to handle multiple object file format
-backends (including heavy rewrite, testing, an integration of the coff
-and b.out backends), adding configuration including heavy testing and
-verification of cross assemblers and file splits and renaming,
-converted GAS to strictly ansi C including full prototypes, added
-support for m680[34]0 & cpu32, considerable work on i960 including a
-COFF port (including considerable amounts of reverse engineering), a
-SPARC opcode file rewrite, DECstation, rs6000, and hp300hpux host
-ports, updated "know" assertions and made them work, much other
-reorganization, cleanup, and lint.
-
- Ken Raeburn wrote the high-level BFD interface code to replace most
-of the code in format-specific I/O modules.
-
- The original VMS support was contributed by David L. Kashtan. Eric
-Youngdale has done much work with it since.
-
- The Intel 80386 machine description was written by Eliot Dresselhaus.
-
- Minh Tran-Le at IntelliCorp contributed some AIX 386 support.
-
- The Motorola 88k machine description was contributed by Devon Bowen
-of Buffalo University and Torbjorn Granlund of the Swedish Institute of
-Computer Science.
-
- Keith Knowles at the Open Software Foundation wrote the original
-MIPS back end (tc-mips.c, tc-mips.h), and contributed Rose format
-support (which hasn't been merged in yet). Ralph Campbell worked with
-the MIPS code to support a.out format.
-
- Support for the Zilog Z8k and Hitachi H8/300 and H8/500 processors
-(tc-z8k, tc-h8300, tc-h8500), and IEEE 695 object file format
-(obj-ieee), was written by Steve Chamberlain of Cygnus Support. Steve
-also modified the COFF back end to use BFD for some low-level
-operations, for use with the H8/300 and AMD 29k targets.
-
- John Gilmore built the AMD 29000 support, added .include support, and
-simplified the configuration of which versions accept which pseudo-ops.
-He updated the 68k machine description so that Motorola's opcodes
-always produced fixed-size instructions (e.g. jsr), while synthetic
-instructions remained shrinkable (jbsr). John fixed many bugs,
-including true tested cross-compilation support, and one bug in
-relaxation that took a week and required the apocryphal one-bit fix.
-
- Ian Lance Taylor of Cygnus Support merged the Motorola and MIT
-syntaxes for the 68k, completed support for some COFF targets (68k,
-i386 SVR3, and SCO Unix), and made a few other minor patches.
-
- Steve Chamberlain made `as' able to generate listings.
-
- Support for the HP9000/300 was contributed by Hewlett-Packard.
-
- Support for ELF format files has been worked on by Mark Eichin of
-Cygnus Support (original, incomplete implementation for SPARC), Pete
-Hoogenboom and Jeff Law at the University of Utah (HPPA mainly),
-Michael Meissner of the Open Software Foundation (i386 mainly), and Ken
-Raeburn of Cygnus Support (sparc, and some initial 64-bit support).
-
- Several engineers at Cygnus Support have also provided many small
-bug fixes and configuration enhancements.
-
- Many others have contributed large or small bugfixes and
-enhancements. If you've contributed significant work and are not
-mentioned on this list, and want to be, let us know. Some of the
-history has been lost; we aren't intentionally leaving anyone out.
-
- ---------- Footnotes ----------
-
- (1) Any more details?
-
+++ /dev/null
-This is Info file as.info, produced by Makeinfo-1.55 from the input
-file ./as.texinfo.
-
-START-INFO-DIR-ENTRY
-* As:: The GNU assembler.
-END-INFO-DIR-ENTRY
-
- This file documents the GNU Assembler "as".
-
- Copyright (C) 1991, 1992, 1993 Free Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the section entitled "GNU General Public License" is included
-exactly as in the original, and provided that the entire resulting
-derived work is distributed under the terms of a permission notice
-identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the section entitled "GNU General Public License"
-may be included in a translation approved by the Free Software
-Foundation instead of in the original English.
-
-\1f
-File: as.info, Node: Copying, Next: Acknowledgements, Prev: Machine Dependencies, Up: Top
-
-
-
-GNU GENERAL PUBLIC LICENSE
-**************************
-
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc. 675
- Mass Ave, Cambridge, MA 02139, USA
-
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-Preamble
-========
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it in
-new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software,
-and (2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 1. This License applies to any program or other work which contains a
- notice placed by the copyright holder saying it may be distributed
- under the terms of this General Public License. The "Program",
- below, refers to any such program or work, and a "work based on
- the Program" means either the Program or any derivative work under
- copyright law: that is to say, a work containing the Program or a
- portion of it, either verbatim or with modifications and/or
- translated into another language. (Hereinafter, translation is
- included without limitation in the term "modification".) Each
- licensee is addressed as "you".
-
- Activities other than copying, distribution and modification are
- not covered by this License; they are outside its scope. The act
- of running the Program is not restricted, and the output from the
- Program is covered only if its contents constitute a work based on
- the Program (independent of having been made by running the
- Program). Whether that is true depends on what the Program does.
-
- 2. You may copy and distribute verbatim copies of the Program's
- source code as you receive it, in any medium, provided that you
- conspicuously and appropriately publish on each copy an appropriate
- copyright notice and disclaimer of warranty; keep intact all the
- notices that refer to this License and to the absence of any
- warranty; and give any other recipients of the Program a copy of
- this License along with the Program.
-
- You may charge a fee for the physical act of transferring a copy,
- and you may at your option offer warranty protection in exchange
- for a fee.
-
- 3. You may modify your copy or copies of the Program or any portion
- of it, thus forming a work based on the Program, and copy and
- distribute such modifications or work under the terms of Section 1
- above, provided that you also meet all of these conditions:
-
- a. You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b. You must cause any work that you distribute or publish, that
- in whole or in part contains or is derived from the Program
- or any part thereof, to be licensed as a whole at no charge
- to all third parties under the terms of this License.
-
- c. If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display
- an announcement including an appropriate copyright notice and
- a notice that there is no warranty (or else, saying that you
- provide a warranty) and that users may redistribute the
- program under these conditions, and telling the user how to
- view a copy of this License. (Exception: if the Program
- itself is interactive but does not normally print such an
- announcement, your work based on the Program is not required
- to print an announcement.)
-
- These requirements apply to the modified work as a whole. If
- identifiable sections of that work are not derived from the
- Program, and can be reasonably considered independent and separate
- works in themselves, then this License, and its terms, do not
- apply to those sections when you distribute them as separate
- works. But when you distribute the same sections as part of a
- whole which is a work based on the Program, the distribution of
- the whole must be on the terms of this License, whose permissions
- for other licensees extend to the entire whole, and thus to each
- and every part regardless of who wrote it.
-
- Thus, it is not the intent of this section to claim rights or
- contest your rights to work written entirely by you; rather, the
- intent is to exercise the right to control the distribution of
- derivative or collective works based on the Program.
-
- In addition, mere aggregation of another work not based on the
- Program with the Program (or with a work based on the Program) on
- a volume of a storage or distribution medium does not bring the
- other work under the scope of this License.
-
- 4. You may copy and distribute the Program (or a work based on it,
- under Section 2) in object code or executable form under the terms
- of Sections 1 and 2 above provided that you also do one of the
- following:
-
- a. Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of
- Sections 1 and 2 above on a medium customarily used for
- software interchange; or,
-
- b. Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a
- medium customarily used for software interchange; or,
-
- c. Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with
- such an offer, in accord with Subsection b above.)
-
- The source code for a work means the preferred form of the work for
- making modifications to it. For an executable work, complete
- source code means all the source code for all modules it contains,
- plus any associated interface definition files, plus the scripts
- used to control compilation and installation of the executable.
- However, as a special exception, the source code distributed need
- not include anything that is normally distributed (in either
- source or binary form) with the major components (compiler,
- kernel, and so on) of the operating system on which the executable
- runs, unless that component itself accompanies the executable.
-
- If distribution of executable or object code is made by offering
- access to copy from a designated place, then offering equivalent
- access to copy the source code from the same place counts as
- distribution of the source code, even though third parties are not
- compelled to copy the source along with the object code.
-
- 5. You may not copy, modify, sublicense, or distribute the Program
- except as expressly provided under this License. Any attempt
- otherwise to copy, modify, sublicense or distribute the Program is
- void, and will automatically terminate your rights under this
- License. However, parties who have received copies, or rights,
- from you under this License will not have their licenses
- terminated so long as such parties remain in full compliance.
-
- 6. You are not required to accept this License, since you have not
- signed it. However, nothing else grants you permission to modify
- or distribute the Program or its derivative works. These actions
- are prohibited by law if you do not accept this License.
- Therefore, by modifying or distributing the Program (or any work
- based on the Program), you indicate your acceptance of this
- License to do so, and all its terms and conditions for copying,
- distributing or modifying the Program or works based on it.
-
- 7. Each time you redistribute the Program (or any work based on the
- Program), the recipient automatically receives a license from the
- original licensor to copy, distribute or modify the Program
- subject to these terms and conditions. You may not impose any
- further restrictions on the recipients' exercise of the rights
- granted herein. You are not responsible for enforcing compliance
- by third parties to this License.
-
- 8. If, as a consequence of a court judgment or allegation of patent
- infringement or for any other reason (not limited to patent
- issues), conditions are imposed on you (whether by court order,
- agreement or otherwise) that contradict the conditions of this
- License, they do not excuse you from the conditions of this
- License. If you cannot distribute so as to satisfy simultaneously
- your obligations under this License and any other pertinent
- obligations, then as a consequence you may not distribute the
- Program at all. For example, if a patent license would not permit
- royalty-free redistribution of the Program by all those who
- receive copies directly or indirectly through you, then the only
- way you could satisfy both it and this License would be to refrain
- entirely from distribution of the Program.
-
- If any portion of this section is held invalid or unenforceable
- under any particular circumstance, the balance of the section is
- intended to apply and the section as a whole is intended to apply
- in other circumstances.
-
- It is not the purpose of this section to induce you to infringe any
- patents or other property right claims or to contest validity of
- any such claims; this section has the sole purpose of protecting
- the integrity of the free software distribution system, which is
- implemented by public license practices. Many people have made
- generous contributions to the wide range of software distributed
- through that system in reliance on consistent application of that
- system; it is up to the author/donor to decide if he or she is
- willing to distribute software through any other system and a
- licensee cannot impose that choice.
-
- This section is intended to make thoroughly clear what is believed
- to be a consequence of the rest of this License.
-
- 9. If the distribution and/or use of the Program is restricted in
- certain countries either by patents or by copyrighted interfaces,
- the original copyright holder who places the Program under this
- License may add an explicit geographical distribution limitation
- excluding those countries, so that distribution is permitted only
- in or among countries not thus excluded. In such case, this
- License incorporates the limitation as if written in the body of
- this License.
-
- 10. The Free Software Foundation may publish revised and/or new
- versions of the General Public License from time to time. Such
- new versions will be similar in spirit to the present version, but
- may differ in detail to address new problems or concerns.
-
- Each version is given a distinguishing version number. If the
- Program specifies a version number of this License which applies
- to it and "any later version", you have the option of following
- the terms and conditions either of that version or of any later
- version published by the Free Software Foundation. If the Program
- does not specify a version number of this License, you may choose
- any version ever published by the Free Software Foundation.
-
- 11. If you wish to incorporate parts of the Program into other free
- programs whose distribution conditions are different, write to the
- author to ask for permission. For software which is copyrighted
- by the Free Software Foundation, write to the Free Software
- Foundation; we sometimes make exceptions for this. Our decision
- will be guided by the two goals of preserving the free status of
- all derivatives of our free software and of promoting the sharing
- and reuse of software generally.
-
- NO WARRANTY
-
- 12. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO
- WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE
- LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
- HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT
- WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT
- NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE
- QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
- PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY
- SERVICING, REPAIR OR CORRECTION.
-
- 13. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
- WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY
- MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE
- LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL,
- INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
- INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
- DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU
- OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY
- OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
-How to Apply These Terms to Your New Programs
-=============================================
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these
-terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- ONE LINE TO GIVE THE PROGRAM'S NAME AND AN IDEA OF WHAT IT DOES.
- Copyright (C) 19YY NAME OF AUTHOR
-
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License
- as published by the Free Software Foundation; either version 2
- of the License, or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
- Also add information on how to contact you by electronic and paper
-mail.
-
- If the program is interactive, make it output a short notice like
-this when it starts in an interactive mode:
-
- Gnomovision version 69, Copyright (C) 19YY NAME OF AUTHOR
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
- type `show w'. This is free software, and you are welcome
- to redistribute it under certain conditions; type `show c'
- for details.
-
- The hypothetical commands `show w' and `show c' should show the
-appropriate parts of the General Public License. Of course, the
-commands you use may be called something other than `show w' and `show
-c'; they could even be mouse-clicks or menu items--whatever suits your
-program.
-
- You should also get your employer (if you work as a programmer) or
-your school, if any, to sign a "copyright disclaimer" for the program,
-if necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright
- interest in the program `Gnomovision'
- (which makes passes at compilers) written
- by James Hacker.
-
- SIGNATURE OF TY COON, 1 April 1989
- Ty Coon, President of Vice
-
- This General Public License does not permit incorporating your
-program into proprietary programs. If your program is a subroutine
-library, you may consider it more useful to permit linking proprietary
-applications with the library. If this is what you want to do, use the
-GNU Library General Public License instead of this License.
-