| This is as.info, produced by makeinfo version 4.3 from as.texinfo. |
| |
| START-INFO-DIR-ENTRY |
| * As: (as). The GNU assembler. |
| * Gas: (as). The GNU assembler. |
| END-INFO-DIR-ENTRY |
| |
| This file documents the GNU Assembler "as". |
| |
| Copyright (C) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001, 2002 |
| Free Software Foundation, Inc. |
| |
| Permission is granted to copy, distribute and/or modify this document |
| under the terms of the GNU Free Documentation License, Version 1.1 or |
| any later version published by the Free Software Foundation; with no |
| Invariant Sections, with no Front-Cover Texts, and with no Back-Cover |
| Texts. A copy of the license is included in the section entitled "GNU |
| Free Documentation License". |
| |
| |
| File: as.info, Node: SH64 Opcodes, Prev: SH64 Directives, Up: SH64-Dependent |
| |
| Opcodes |
| ------- |
| |
| For detailed information on the SH64 machine instruction set, see |
| `SuperH 64 bit RISC Series Architecture Manual' (SuperH, Inc.). |
| |
| `as' implements all the standard SH64 opcodes. In addition, the |
| following pseudo-opcodes may be expanded into one or more alternate |
| opcodes: |
| |
| `movi' |
| If the value doesn't fit into a standard `movi' opcode, `as' will |
| replace the `movi' with a sequence of `movi' and `shori' opcodes. |
| |
| `pt' |
| This expands to a sequence of `movi' and `shori' opcode, followed |
| by a `ptrel' opcode, or to a `pta' or `ptb' opcode, depending on |
| the label referenced. |
| |
| |
| File: as.info, Node: Sparc-Dependent, Next: TIC54X-Dependent, Prev: PPC-Dependent, Up: Machine Dependencies |
| |
| SPARC Dependent Features |
| ======================== |
| |
| * Menu: |
| |
| * Sparc-Opts:: Options |
| * Sparc-Aligned-Data:: Option to enforce aligned data |
| * Sparc-Float:: Floating Point |
| * Sparc-Directives:: Sparc Machine Directives |
| |
| |
| File: as.info, Node: Sparc-Opts, Next: Sparc-Aligned-Data, Up: Sparc-Dependent |
| |
| Options |
| ------- |
| |
| The SPARC chip family includes several successive levels, using the |
| same core instruction set, but including a few additional instructions |
| at each level. There are exceptions to this however. For details on |
| what instructions each variant supports, please see the chip's |
| architecture reference manual. |
| |
| 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. |
| |
| If not configured for SPARC v9 (`sparc64-*-*') GAS will not bump |
| passed sparclite by default, an option must be passed to enable the v9 |
| instructions. |
| |
| GAS treats sparclite as being compatible with v8, unless an |
| architecture is explicitly requested. SPARC v9 is always incompatible |
| with sparclite. |
| |
| `-Av6 | -Av7 | -Av8 | -Asparclet | -Asparclite' |
| `-Av8plus | -Av8plusa | -Av9 | -Av9a' |
| 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 an incompatible or higher level. |
| |
| `-Av8plus' and `-Av8plusa' select a 32 bit environment. |
| |
| `-Av9' and `-Av9a' select a 64 bit environment and are not |
| available unless GAS is explicitly configured with 64 bit |
| environment support. |
| |
| `-Av8plusa' and `-Av9a' enable the SPARC V9 instruction set with |
| UltraSPARC extensions. |
| |
| `-xarch=v8plus | -xarch=v8plusa' |
| For compatibility with the Solaris v9 assembler. These options are |
| equivalent to -Av8plus and -Av8plusa, respectively. |
| |
| `-bump' |
| Warn whenever it is necessary to switch to another level. If an |
| architecture level is explicitly requested, GAS will not issue |
| warnings until that level is reached, and will then bump the level |
| as required (except between incompatible levels). |
| |
| `-32 | -64' |
| Select the word size, either 32 bits or 64 bits. These options |
| are only available with the ELF object file format, and require |
| that the necessary BFD support has been included. |
| |
| |
| File: as.info, Node: Sparc-Aligned-Data, Next: Sparc-Float, Prev: Sparc-Opts, Up: Sparc-Dependent |
| |
| Enforcing aligned data |
| ---------------------- |
| |
| SPARC GAS normally permits data to be misaligned. For example, it |
| permits the `.long' pseudo-op to be used on a byte boundary. However, |
| the native SunOS and Solaris assemblers issue an error when they see |
| misaligned data. |
| |
| You can use the `--enforce-aligned-data' option to make SPARC GAS |
| also issue an error about misaligned data, just as the SunOS and Solaris |
| assemblers do. |
| |
| The `--enforce-aligned-data' option is not the default because gcc |
| issues misaligned data pseudo-ops when it initializes certain packed |
| data structures (structures defined using the `packed' attribute). You |
| may have to assemble with GAS in order to initialize packed data |
| structures in your own code. |
| |
| |
| File: as.info, Node: Sparc-Float, Next: Sparc-Directives, Prev: Sparc-Aligned-Data, Up: Sparc-Dependent |
| |
| Floating Point |
| -------------- |
| |
| The Sparc uses IEEE floating-point numbers. |
| |
| |
| 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: |
| |
| `.align' |
| This must be followed by the desired alignment in bytes. |
| |
| `.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'. |
| |
| `.nword' |
| On the Sparc, the `.nword' directive produces native word sized |
| value, ie. if assembling with -32 it is equivalent to `.word', if |
| assembling with -64 it is equivalent to `.xword'. |
| |
| `.proc' |
| This directive is ignored. Any text following it on the same line |
| is also ignored. |
| |
| `.register' |
| This directive declares use of a global application or system |
| register. It must be followed by a register name %g2, %g3, %g6 or |
| %g7, comma and the symbol name for that register. If symbol name |
| is `#scratch', it is a scratch register, if it is `#ignore', it |
| just suppresses any errors about using undeclared global register, |
| but does not emit any information about it into the object file. |
| This can be useful e.g. if you save the register before use and |
| restore it after. |
| |
| `.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. |
| |
| `.xword' |
| On the Sparc V9 processor, the `.xword' directive produces 64 bit |
| values. |
| |
| |
| File: as.info, Node: TIC54X-Dependent, Next: V850-Dependent, Prev: Sparc-Dependent, Up: Machine Dependencies |
| |
| TIC54X Dependent Features |
| ========================= |
| |
| * Menu: |
| |
| * TIC54X-Opts:: Command-line Options |
| * TIC54X-Block:: Blocking |
| * TIC54X-Env:: Environment Settings |
| * TIC54X-Constants:: Constants Syntax |
| * TIC54X-Subsyms:: String Substitution |
| * TIC54X-Locals:: Local Label Syntax |
| * TIC54X-Builtins:: Builtin Assembler Math Functions |
| * TIC54X-Ext:: Extended Addressing Support |
| * TIC54X-Directives:: Directives |
| * TIC54X-Macros:: Macro Features |
| * TIC54X-MMRegs:: Memory-mapped Registers |
| |
| |
| File: as.info, Node: TIC54X-Opts, Next: TIC54X-Block, Up: TIC54X-Dependent |
| |
| Options |
| ------- |
| |
| The TMS320C54x version of `as' has a few machine-dependent options. |
| |
| You can use the `-mfar-mode' option to enable extended addressing |
| mode. All addresses will be assumed to be > 16 bits, and the |
| appropriate relocation types will be used. This option is equivalent |
| to using the `.far_mode' directive in the assembly code. If you do not |
| use the `-mfar-mode' option, all references will be assumed to be 16 |
| bits. This option may be abbreviated to `-mf'. |
| |
| You can use the `-mcpu' option to specify a particular CPU. This |
| option is equivalent to using the `.version' directive in the assembly |
| code. For recognized CPU codes, see *Note `.version': |
| TIC54X-Directives. The default CPU version is `542'. |
| |
| You can use the `-merrors-to-file' option to redirect error output |
| to a file (this provided for those deficient environments which don't |
| provide adequate output redirection). This option may be abbreviated to |
| `-me'. |
| |
| |
| File: as.info, Node: TIC54X-Block, Next: TIC54X-Env, Prev: TIC54X-Opts, Up: TIC54X-Dependent |
| |
| Blocking |
| -------- |
| |
| A blocked section or memory block is guaranteed not to cross the |
| blocking boundary (usually a page, or 128 words) if it is smaller than |
| the blocking size, or to start on a page boundary if it is larger than |
| the blocking size. |
| |
| |
| File: as.info, Node: TIC54X-Env, Next: TIC54X-Constants, Prev: TIC54X-Block, Up: TIC54X-Dependent |
| |
| Environment Settings |
| -------------------- |
| |
| `C54XDSP_DIR' and `A_DIR' are semicolon-separated paths which are |
| added to the list of directories normally searched for source and |
| include files. `C54XDSP_DIR' will override `A_DIR'. |
| |
| |
| File: as.info, Node: TIC54X-Constants, Next: TIC54X-Subsyms, Prev: TIC54X-Env, Up: TIC54X-Dependent |
| |
| Constants Syntax |
| ---------------- |
| |
| The TIC54X version of `as' allows the following additional constant |
| formats, using a suffix to indicate the radix: |
| |
| Binary `000000B, 011000b' |
| Octal `10Q, 224q' |
| Hexadecimal `45h, 0FH' |
| |
| |
| File: as.info, Node: TIC54X-Subsyms, Next: TIC54X-Locals, Prev: TIC54X-Constants, Up: TIC54X-Dependent |
| |
| String Substitution |
| ------------------- |
| |
| A subset of allowable symbols (which we'll call subsyms) may be |
| assigned arbitrary string values. This is roughly equivalent to C |
| preprocessor #define macros. When `as' encounters one of these |
| symbols, the symbol is replaced in the input stream by its string value. |
| Subsym names *must* begin with a letter. |
| |
| Subsyms may be defined using the `.asg' and `.eval' directives |
| (*Note `.asg': TIC54X-Directives, *Note `.eval': TIC54X-Directives. |
| |
| Expansion is recursive until a previously encountered symbol is |
| seen, at which point substitution stops. |
| |
| In this example, x is replaced with SYM2; SYM2 is replaced with |
| SYM1, and SYM1 is replaced with x. At this point, x has already been |
| encountered and the substitution stops. |
| |
| .asg "x",SYM1 |
| .asg "SYM1",SYM2 |
| .asg "SYM2",x |
| add x,a ; final code assembled is "add x, a" |
| |
| Macro parameters are converted to subsyms; a side effect of this is |
| the normal `as' '\ARG' dereferencing syntax is unnecessary. Subsyms |
| defined within a macro will have global scope, unless the `.var' |
| directive is used to identify the subsym as a local macro variable |
| *note `.var': TIC54X-Directives.. |
| |
| Substitution may be forced in situations where replacement might be |
| ambiguous by placing colons on either side of the subsym. The following |
| code: |
| |
| .eval "10",x |
| LAB:X: add #x, a |
| |
| When assembled becomes: |
| |
| LAB10 add #10, a |
| |
| Smaller parts of the string assigned to a subsym may be accessed with |
| the following syntax: |
| |
| ``:SYMBOL(CHAR_INDEX):'' |
| Evaluates to a single-character string, the character at |
| CHAR_INDEX. |
| |
| ``:SYMBOL(START,LENGTH):'' |
| Evaluates to a substring of SYMBOL beginning at START with length |
| LENGTH. |
| |
| |
| File: as.info, Node: TIC54X-Locals, Next: TIC54X-Builtins, Prev: TIC54X-Subsyms, Up: TIC54X-Dependent |
| |
| Local Labels |
| ------------ |
| |
| Local labels may be defined in two ways: |
| |
| * $N, where N is a decimal number between 0 and 9 |
| |
| * LABEL?, where LABEL is any legal symbol name. |
| |
| Local labels thus defined may be redefined or automatically |
| generated. The scope of a local label is based on when it may be |
| undefined or reset. This happens when one of the following situations |
| is encountered: |
| |
| * .newblock directive *note `.newblock': TIC54X-Directives. |
| |
| * The current section is changed (.sect, .text, or .data) |
| |
| * Entering or leaving an included file |
| |
| * The macro scope where the label was defined is exited |
| |
| |
| File: as.info, Node: TIC54X-Builtins, Next: TIC54X-Ext, Prev: TIC54X-Locals, Up: TIC54X-Dependent |
| |
| Math Builtins |
| ------------- |
| |
| The following built-in functions may be used to generate a |
| floating-point value. All return a floating-point value except `$cvi', |
| `$int', and `$sgn', which return an integer value. |
| |
| ``$acos(EXPR)'' |
| Returns the floating point arccosine of EXPR. |
| |
| ``$asin(EXPR)'' |
| Returns the floating point arcsine of EXPR. |
| |
| ``$atan(EXPR)'' |
| Returns the floating point arctangent of EXPR. |
| |
| ``$atan2(EXPR1,EXPR2)'' |
| Returns the floating point arctangent of EXPR1 / EXPR2. |
| |
| ``$ceil(EXPR)'' |
| Returns the smallest integer not less than EXPR as floating point. |
| |
| ``$cosh(EXPR)'' |
| Returns the floating point hyperbolic cosine of EXPR. |
| |
| ``$cos(EXPR)'' |
| Returns the floating point cosine of EXPR. |
| |
| ``$cvf(EXPR)'' |
| Returns the integer value EXPR converted to floating-point. |
| |
| ``$cvi(EXPR)'' |
| Returns the floating point value EXPR converted to integer. |
| |
| ``$exp(EXPR)'' |
| Returns the floating point value e ^ EXPR. |
| |
| ``$fabs(EXPR)'' |
| Returns the floating point absolute value of EXPR. |
| |
| ``$floor(EXPR)'' |
| Returns the largest integer that is not greater than EXPR as |
| floating point. |
| |
| ``$fmod(EXPR1,EXPR2)'' |
| Returns the floating point remainder of EXPR1 / EXPR2. |
| |
| ``$int(EXPR)'' |
| Returns 1 if EXPR evaluates to an integer, zero otherwise. |
| |
| ``$ldexp(EXPR1,EXPR2)'' |
| Returns the floating point value EXPR1 * 2 ^ EXPR2. |
| |
| ``$log10(EXPR)'' |
| Returns the base 10 logarithm of EXPR. |
| |
| ``$log(EXPR)'' |
| Returns the natural logarithm of EXPR. |
| |
| ``$max(EXPR1,EXPR2)'' |
| Returns the floating point maximum of EXPR1 and EXPR2. |
| |
| ``$min(EXPR1,EXPR2)'' |
| Returns the floating point minimum of EXPR1 and EXPR2. |
| |
| ``$pow(EXPR1,EXPR2)'' |
| Returns the floating point value EXPR1 ^ EXPR2. |
| |
| ``$round(EXPR)'' |
| Returns the nearest integer to EXPR as a floating point number. |
| |
| ``$sgn(EXPR)'' |
| Returns -1, 0, or 1 based on the sign of EXPR. |
| |
| ``$sin(EXPR)'' |
| Returns the floating point sine of EXPR. |
| |
| ``$sinh(EXPR)'' |
| Returns the floating point hyperbolic sine of EXPR. |
| |
| ``$sqrt(EXPR)'' |
| Returns the floating point square root of EXPR. |
| |
| ``$tan(EXPR)'' |
| Returns the floating point tangent of EXPR. |
| |
| ``$tanh(EXPR)'' |
| Returns the floating point hyperbolic tangent of EXPR. |
| |
| ``$trunc(EXPR)'' |
| Returns the integer value of EXPR truncated towards zero as |
| floating point. |
| |
| |
| File: as.info, Node: TIC54X-Ext, Next: TIC54X-Directives, Prev: TIC54X-Builtins, Up: TIC54X-Dependent |
| |
| Extended Addressing |
| ------------------- |
| |
| The `LDX' pseudo-op is provided for loading the extended addressing |
| bits of a label or address. For example, if an address `_label' resides |
| in extended program memory, the value of `_label' may be loaded as |
| follows: |
| ldx #_label,16,a ; loads extended bits of _label |
| or #_label,a ; loads lower 16 bits of _label |
| bacc a ; full address is in accumulator A |
| |
| |
| File: as.info, Node: TIC54X-Directives, Next: TIC54X-Macros, Prev: TIC54X-Ext, Up: TIC54X-Dependent |
| |
| Directives |
| ---------- |
| |
| `.align [SIZE]' |
| `.even' |
| Align the section program counter on the next boundary, based on |
| SIZE. SIZE may be any power of 2. `.even' is equivalent to |
| `.align' with a SIZE of 2. |
| `1' |
| Align SPC to word boundary |
| |
| `2' |
| Align SPC to longword boundary (same as .even) |
| |
| `128' |
| Align SPC to page boundary |
| |
| `.asg STRING, NAME' |
| Assign NAME the string STRING. String replacement is performed on |
| STRING before assignment. |
| |
| `.eval STRING, NAME' |
| Evaluate the contents of string STRING and assign the result as a |
| string to the subsym NAME. String replacement is performed on |
| STRING before assignment. |
| |
| `.bss SYMBOL, SIZE [, [BLOCKING_FLAG] [,ALIGNMENT_FLAG]]' |
| Reserve space for SYMBOL in the .bss section. SIZE is in words. |
| If present, BLOCKING_FLAG indicates the allocated space should be |
| aligned on a page boundary if it would otherwise cross a page |
| boundary. If present, ALIGNMENT_FLAG causes the assembler to |
| allocate SIZE on a long word boundary. |
| |
| `.byte VALUE [,...,VALUE_N]' |
| `.ubyte VALUE [,...,VALUE_N]' |
| `.char VALUE [,...,VALUE_N]' |
| `.uchar VALUE [,...,VALUE_N]' |
| Place one or more bytes into consecutive words of the current |
| section. The upper 8 bits of each word is zero-filled. If a |
| label is used, it points to the word allocated for the first byte |
| encountered. |
| |
| `.clink ["SECTION_NAME"]' |
| Set STYP_CLINK flag for this section, which indicates to the |
| linker that if no symbols from this section are referenced, the |
| section should not be included in the link. If SECTION_NAME is |
| omitted, the current section is used. |
| |
| `.c_mode' |
| TBD. |
| |
| `.copy "FILENAME" | FILENAME' |
| `.include "FILENAME" | FILENAME' |
| Read source statements from FILENAME. The normal include search |
| path is used. Normally .copy will cause statements from the |
| included file to be printed in the assembly listing and .include |
| will not, but this distinction is not currently implemented. |
| |
| `.data' |
| Begin assembling code into the .data section. |
| |
| `.double VALUE [,...,VALUE_N]' |
| `.ldouble VALUE [,...,VALUE_N]' |
| `.float VALUE [,...,VALUE_N]' |
| `.xfloat VALUE [,...,VALUE_N]' |
| Place an IEEE single-precision floating-point representation of |
| one or more floating-point values into the current section. All |
| but `.xfloat' align the result on a longword boundary. Values are |
| stored most-significant word first. |
| |
| `.drlist' |
| `.drnolist' |
| Control printing of directives to the listing file. Ignored. |
| |
| `.emsg STRING' |
| `.mmsg STRING' |
| `.wmsg STRING' |
| Emit a user-defined error, message, or warning, respectively. |
| |
| `.far_mode' |
| Use extended addressing when assembling statements. This should |
| appear only once per file, and is equivalent to the -mfar-mode |
| option *note `-mfar-mode': TIC54X-Opts.. |
| |
| `.fclist' |
| `.fcnolist' |
| Control printing of false conditional blocks to the listing file. |
| |
| `.field VALUE [,SIZE]' |
| Initialize a bitfield of SIZE bits in the current section. If |
| VALUE is relocatable, then SIZE must be 16. SIZE defaults to 16 |
| bits. If VALUE does not fit into SIZE bits, the value will be |
| truncated. Successive `.field' directives will pack starting at |
| the current word, filling the most significant bits first, and |
| aligning to the start of the next word if the field size does not |
| fit into the space remaining in the current word. A `.align' |
| directive with an operand of 1 will force the next `.field' |
| directive to begin packing into a new word. If a label is used, it |
| points to the word that contains the specified field. |
| |
| `.global SYMBOL [,...,SYMBOL_N]' |
| `.def SYMBOL [,...,SYMBOL_N]' |
| `.ref SYMBOL [,...,SYMBOL_N]' |
| `.def' nominally identifies a symbol defined in the current file |
| and availalbe to other files. `.ref' identifies a symbol used in |
| the current file but defined elsewhere. Both map to the standard |
| `.global' directive. |
| |
| `.half VALUE [,...,VALUE_N]' |
| `.uhalf VALUE [,...,VALUE_N]' |
| `.short VALUE [,...,VALUE_N]' |
| `.ushort VALUE [,...,VALUE_N]' |
| `.int VALUE [,...,VALUE_N]' |
| `.uint VALUE [,...,VALUE_N]' |
| `.word VALUE [,...,VALUE_N]' |
| `.uword VALUE [,...,VALUE_N]' |
| Place one or more values into consecutive words of the current |
| section. If a label is used, it points to the word allocated for |
| the first value encountered. |
| |
| `.label SYMBOL' |
| Define a special SYMBOL to refer to the load time address of the |
| current section program counter. |
| |
| `.length' |
| `.width' |
| Set the page length and width of the output listing file. Ignored. |
| |
| `.list' |
| `.nolist' |
| Control whether the source listing is printed. Ignored. |
| |
| `.long VALUE [,...,VALUE_N]' |
| `.ulong VALUE [,...,VALUE_N]' |
| `.xlong VALUE [,...,VALUE_N]' |
| Place one or more 32-bit values into consecutive words in the |
| current section. The most significant word is stored first. |
| `.long' and `.ulong' align the result on a longword boundary; |
| `xlong' does not. |
| |
| `.loop [COUNT]' |
| `.break [CONDITION]' |
| `.endloop' |
| Repeatedly assemble a block of code. `.loop' begins the block, and |
| `.endloop' marks its termination. COUNT defaults to 1024, and |
| indicates the number of times the block should be repeated. |
| `.break' terminates the loop so that assembly begins after the |
| `.endloop' directive. The optional CONDITION will cause the loop |
| to terminate only if it evaluates to zero. |
| |
| `MACRO_NAME .macro [PARAM1][,...PARAM_N]' |
| `[.mexit]' |
| `.endm' |
| See the section on macros for more explanation (*Note |
| TIC54X-Macros::. |
| |
| `.mlib "FILENAME" | FILENAME' |
| Load the macro library FILENAME. FILENAME must be an archived |
| library (BFD ar-compatible) of text files, expected to contain |
| only macro definitions. The standard include search path is used. |
| |
| `.mlist' |
| |
| `.mnolist' |
| Control whether to include macro and loop block expansions in the |
| listing output. Ignored. |
| |
| `.mmregs' |
| Define global symbolic names for the 'c54x registers. Supposedly |
| equivalent to executing `.set' directives for each register with |
| its memory-mapped value, but in reality is provided only for |
| compatibility and does nothing. |
| |
| `.newblock' |
| This directive resets any TIC54X local labels currently defined. |
| Normal `as' local labels are unaffected. |
| |
| `.option OPTION_LIST' |
| Set listing options. Ignored. |
| |
| `.sblock "SECTION_NAME" | SECTION_NAME [,"NAME_N" | NAME_N]' |
| Designate SECTION_NAME for blocking. Blocking guarantees that a |
| section will start on a page boundary (128 words) if it would |
| otherwise cross a page boundary. Only initialized sections may be |
| designated with this directive. See also *Note TIC54X-Block::. |
| |
| `.sect "SECTION_NAME"' |
| Define a named initialized section and make it the current section. |
| |
| `SYMBOL .set "VALUE"' |
| `SYMBOL .equ "VALUE"' |
| Equate a constant VALUE to a SYMBOL, which is placed in the symbol |
| table. SYMBOL may not be previously defined. |
| |
| `.space SIZE_IN_BITS' |
| `.bes SIZE_IN_BITS' |
| Reserve the given number of bits in the current section and |
| zero-fill them. If a label is used with `.space', it points to the |
| *first* word reserved. With `.bes', the label points to the |
| *last* word reserved. |
| |
| `.sslist' |
| `.ssnolist' |
| Controls the inclusion of subsym replacement in the listing |
| output. Ignored. |
| |
| `.string "STRING" [,...,"STRING_N"]' |
| `.pstring "STRING" [,...,"STRING_N"]' |
| Place 8-bit characters from STRING into the current section. |
| `.string' zero-fills the upper 8 bits of each word, while |
| `.pstring' puts two characters into each word, filling the |
| most-significant bits first. Unused space is zero-filled. If a |
| label is used, it points to the first word initialized. |
| |
| `[STAG] .struct [OFFSET]' |
| `[NAME_1] element [COUNT_1]' |
| `[NAME_2] element [COUNT_2]' |
| `[TNAME] .tag STAGX [TCOUNT]' |
| `...' |
| `[NAME_N] element [COUNT_N]' |
| `[SSIZE] .endstruct' |
| `LABEL .tag [STAG]' |
| Assign symbolic offsets to the elements of a structure. STAG |
| defines a symbol to use to reference the structure. OFFSET |
| indicates a starting value to use for the first element |
| encountered; otherwise it defaults to zero. Each element can have |
| a named offset, NAME, which is a symbol assigned the value of the |
| element's offset into the structure. If STAG is missing, these |
| become global symbols. COUNT adjusts the offset that many times, |
| as if `element' were an array. `element' may be one of `.byte', |
| `.word', `.long', `.float', or any equivalent of those, and the |
| structure offset is adjusted accordingly. `.field' and `.string' |
| are also allowed; the size of `.field' is one bit, and `.string' |
| is considered to be one word in size. Only element descriptors, |
| structure/union tags, `.align' and conditional assembly directives |
| are allowed within `.struct'/`.endstruct'. `.align' aligns member |
| offsets to word boundaries only. SSIZE, if provided, will always |
| be assigned the size of the structure. |
| |
| The `.tag' directive, in addition to being used to define a |
| structure/union element within a structure, may be used to apply a |
| structure to a symbol. Once applied to LABEL, the individual |
| structure elements may be applied to LABEL to produce the desired |
| offsets using LABEL as the structure base. |
| |
| `.tab' |
| Set the tab size in the output listing. Ignored. |
| |
| `[UTAG] .union' |
| `[NAME_1] element [COUNT_1]' |
| `[NAME_2] element [COUNT_2]' |
| `[TNAME] .tag UTAGX[,TCOUNT]' |
| `...' |
| `[NAME_N] element [COUNT_N]' |
| `[USIZE] .endstruct' |
| `LABEL .tag [UTAG]' |
| Similar to `.struct', but the offset after each element is reset to |
| zero, and the USIZE is set to the maximum of all defined elements. |
| Starting offset for the union is always zero. |
| |
| `[SYMBOL] .usect "SECTION_NAME", SIZE, [,[BLOCKING_FLAG] [,ALIGNMENT_FLAG]]' |
| Reserve space for variables in a named, uninitialized section |
| (similar to .bss). `.usect' allows definitions sections |
| independent of .bss. SYMBOL points to the first location reserved |
| by this allocation. The symbol may be used as a variable name. |
| SIZE is the allocated size in words. BLOCKING_FLAG indicates |
| whether to block this section on a page boundary (128 words) |
| (*note TIC54X-Block::). ALIGNMENT FLAG indicates whether the |
| section should be longword-aligned. |
| |
| `.var SYM[,..., SYM_N]' |
| Define a subsym to be a local variable within a macro. See *Note |
| TIC54X-Macros::. |
| |
| `.version VERSION' |
| Set which processor to build instructions for. Though the |
| following values are accepted, the op is ignored. |
| `541' |
| `542' |
| `543' |
| `545' |
| `545LP' |
| `546LP' |
| `548' |
| `549' |
| |
| File: as.info, Node: TIC54X-Macros, Next: TIC54X-MMRegs, Prev: TIC54X-Directives, Up: TIC54X-Dependent |
| |
| Macros |
| ------ |
| |
| Macros do not require explicit dereferencing of arguments (i.e. |
| \ARG). |
| |
| During macro expansion, the macro parameters are converted to |
| subsyms. If the number of arguments passed the macro invocation |
| exceeds the number of parameters defined, the last parameter is |
| assigned the string equivalent of all remaining arguments. If fewer |
| arguments are given than parameters, the missing parameters are |
| assigned empty strings. To include a comma in an argument, you must |
| enclose the argument in quotes. |
| |
| The following built-in subsym functions allow examination of the |
| string value of subsyms (or ordinary strings). The arguments are |
| strings unless otherwise indicated (subsyms passed as args will be |
| replaced by the strings they represent). |
| ``$symlen(STR)'' |
| Returns the length of STR. |
| |
| ``$symcmp(STR1,STR2)'' |
| Returns 0 if STR1 == STR2, non-zero otherwise. |
| |
| ``$firstch(STR,CH)'' |
| Returns index of the first occurrence of character constant CH in |
| STR. |
| |
| ``$lastch(STR,CH)'' |
| Returns index of the last occurrence of character constant CH in |
| STR. |
| |
| ``$isdefed(SYMBOL)'' |
| Returns zero if the symbol SYMBOL is not in the symbol table, |
| non-zero otherwise. |
| |
| ``$ismember(SYMBOL,LIST)'' |
| Assign the first member of comma-separated string LIST to SYMBOL; |
| LIST is reassigned the remainder of the list. Returns zero if |
| LIST is a null string. Both arguments must be subsyms. |
| |
| ``$iscons(EXPR)'' |
| Returns 1 if string EXPR is binary, 2 if octal, 3 if hexadecimal, |
| 4 if a character, 5 if decimal, and zero if not an integer. |
| |
| ``$isname(NAME)'' |
| Returns 1 if NAME is a valid symbol name, zero otherwise. |
| |
| ``$isreg(REG)'' |
| Returns 1 if REG is a valid predefined register name (AR0-AR7 |
| only). |
| |
| ``$structsz(STAG)'' |
| Returns the size of the structure or union represented by STAG. |
| |
| ``$structacc(STAG)'' |
| Returns the reference point of the structure or union represented |
| by STAG. Always returns zero. |
| |
| |
| File: as.info, Node: TIC54X-MMRegs, Prev: TIC54X-Macros, Up: TIC54X-Dependent |
| |
| Memory-mapped Registers |
| ----------------------- |
| |
| The following symbols are recognized as memory-mapped registers: |
| |
| |
| File: as.info, Node: Z8000-Dependent, Next: Vax-Dependent, Prev: Xtensa-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 takes 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 |
| |
| |
| 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. |
| |
| |
| 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 |
| |
| |
| 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. |
| |
| |
| 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 |
| |
| |
| 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. |
| |
| |
| 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' |
| Synonym 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' |
| special case of `.align'; aligns output to even byte boundary. |
| |
| |
| 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) |
| |
| |
| File: as.info, Node: Vax-Dependent, Prev: Z8000-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 |
| |
| |
| 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 additional options when |
| compiled for VMS: |
| |
| `-h N' |
| External symbol or section (used for global variables) names are |
| not case sensitive on VAX/VMS and always mapped to upper case. |
| This is contrary to the C language definition which explicitly |
| distinguishes upper and lower case. To implement a standard |
| conforming C compiler, names must be changed (mapped) to preserve |
| the case information. The default mapping is to convert all lower |
| case characters to uppercase and adding an underscore followed by |
| a 6 digit hex value, representing a 24 digit binary value. The |
| one digits in the binary value represent which characters are |
| uppercase in the original symbol name. |
| |
| The `-h N' option determines how we map names. This takes several |
| values. No `-h' switch at all allows case hacking as described |
| above. A value of zero (`-h0') implies names should be upper |
| case, and inhibits the case hack. A value of 2 (`-h2') implies |
| names should be all lower case, with no case hack. A value of 3 |
| (`-h3') implies that case should be preserved. The value 1 is |
| unused. The `-H' option directs `as' to display every mapped |
| symbol during assembly. |
| |
| Symbols whose names include a dollar sign `$' are exceptions to the |
| general name mapping. These symbols are normally only used to |
| reference VMS library names. Such symbols are always mapped to |
| upper case. |
| |
| `-+' |
| The `-+' option causes `as' to truncate any symbol name larger |
| than 31 characters. The `-+' option also prevents some code |
| following the `_main' symbol normally added to make the object |
| file compatible with Vax-11 "C". |
| |
| `-1' |
| This option is ignored for backward compatibility with `as' |
| version 1.x. |
| |
| `-H' |
| The `-H' option causes `as' to print every symbol which was |
| changed by case mapping. |
| |
| |
| 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. |
| |
| |
| 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. |
| |
| |
| 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. |
| |