123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589 |
- @c Copyright (C) 2001-2022 Free Software Foundation, Inc.
- @c This is part of the GAS manual.
- @c For copying conditions, see the file as.texinfo.
- @c MMIX description by Hans-Peter Nilsson, hp@bitrange.com
- @ifset GENERIC
- @page
- @node MMIX-Dependent
- @chapter MMIX Dependent Features
- @end ifset
- @ifclear GENERIC
- @node Machine Dependencies
- @chapter MMIX Dependent Features
- @end ifclear
- @cindex MMIX support
- @menu
- * MMIX-Opts:: Command-line Options
- * MMIX-Expand:: Instruction expansion
- * MMIX-Syntax:: Syntax
- * MMIX-mmixal:: Differences to @code{mmixal} syntax and semantics
- @end menu
- @node MMIX-Opts
- @section Command-line Options
- @cindex options, MMIX
- @cindex MMIX options
- The MMIX version of @code{@value{AS}} has some machine-dependent options.
- @cindex @samp{--fixed-special-register-names} command-line option, MMIX
- When @samp{--fixed-special-register-names} is specified, only the register
- names specified in @ref{MMIX-Regs} are recognized in the instructions
- @code{PUT} and @code{GET}.
- @cindex @samp{--globalize-symbols} command-line option, MMIX
- You can use the @samp{--globalize-symbols} to make all symbols global.
- This option is useful when splitting up a @code{mmixal} program into
- several files.
- @cindex @samp{--gnu-syntax} command-line option, MMIX
- The @samp{--gnu-syntax} turns off most syntax compatibility with
- @code{mmixal}. Its usability is currently doubtful.
- @cindex @samp{--relax} command-line option, MMIX
- The @samp{--relax} option is not fully supported, but will eventually make
- the object file prepared for linker relaxation.
- @cindex @samp{--no-predefined-syms} command-line option, MMIX
- If you want to avoid inadvertently calling a predefined symbol and would
- rather get an error, for example when using @code{@value{AS}} with a
- compiler or other machine-generated code, specify
- @samp{--no-predefined-syms}. This turns off built-in predefined
- definitions of all such symbols, including rounding-mode symbols, segment
- symbols, @samp{BIT} symbols, and @code{TRAP} symbols used in @code{mmix}
- ``system calls''. It also turns off predefined special-register names,
- except when used in @code{PUT} and @code{GET} instructions.
- @cindex @samp{--no-expand} command-line option, MMIX
- By default, some instructions are expanded to fit the size of the operand
- or an external symbol (@pxref{MMIX-Expand}). By passing
- @samp{--no-expand}, no such expansion will be done, instead causing errors
- at link time if the operand does not fit.
- @cindex @samp{--no-merge-gregs} command-line option, MMIX
- The @code{mmixal} documentation (@pxref{mmixsite}) specifies that global
- registers allocated with the @samp{GREG} directive (@pxref{MMIX-greg}) and
- initialized to the same non-zero value, will refer to the same global
- register. This isn't strictly enforceable in @code{@value{AS}} since the
- final addresses aren't known until link-time, but it will do an effort
- unless the @samp{--no-merge-gregs} option is specified. (Register merging
- isn't yet implemented in @code{@value{LD}}.)
- @cindex @samp{-x} command-line option, MMIX
- @code{@value{AS}} will warn every time it expands an instruction to fit an
- operand unless the option @samp{-x} is specified. It is believed that
- this behaviour is more useful than just mimicking @code{mmixal}'s
- behaviour, in which instructions are only expanded if the @samp{-x} option
- is specified, and assembly fails otherwise, when an instruction needs to
- be expanded. It needs to be kept in mind that @code{mmixal} is both an
- assembler and linker, while @code{@value{AS}} will expand instructions
- that at link stage can be contracted. (Though linker relaxation isn't yet
- implemented in @code{@value{LD}}.) The option @samp{-x} also implies
- @samp{--linker-allocated-gregs}.
- @cindex @samp{--no-pushj-stubs} command-line option, MMIX
- @cindex @samp{--no-stubs} command-line option, MMIX
- If instruction expansion is enabled, @code{@value{AS}} can expand a
- @samp{PUSHJ} instruction into a series of instructions. The shortest
- expansion is to not expand it, but just mark the call as redirectable to a
- stub, which @code{@value{LD}} creates at link-time, but only if the
- original @samp{PUSHJ} instruction is found not to reach the target. The
- stub consists of the necessary instructions to form a jump to the target.
- This happens if @code{@value{AS}} can assert that the @samp{PUSHJ}
- instruction can reach such a stub. The option @samp{--no-pushj-stubs}
- disables this shorter expansion, and the longer series of instructions is
- then created at assembly-time. The option @samp{--no-stubs} is a synonym,
- intended for compatibility with future releases, where generation of stubs
- for other instructions may be implemented.
- @cindex @samp{--linker-allocated-gregs} command-line option, MMIX
- Usually a two-operand-expression (@pxref{GREG-base}) without a matching
- @samp{GREG} directive is treated as an error by @code{@value{AS}}. When
- the option @samp{--linker-allocated-gregs} is in effect, they are instead
- passed through to the linker, which will allocate as many global registers
- as is needed.
- @node MMIX-Expand
- @section Instruction expansion
- @cindex instruction expansion, MMIX
- When @code{@value{AS}} encounters an instruction with an operand that is
- either not known or does not fit the operand size of the instruction,
- @code{@value{AS}} (and @code{@value{LD}}) will expand the instruction into
- a sequence of instructions semantically equivalent to the operand fitting
- the instruction. Expansion will take place for the following
- instructions:
- @table @asis
- @item @samp{GETA}
- Expands to a sequence of four instructions: @code{SETL}, @code{INCML},
- @code{INCMH} and @code{INCH}. The operand must be a multiple of four.
- @item Conditional branches
- A branch instruction is turned into a branch with the complemented
- condition and prediction bit over five instructions; four instructions
- setting @code{$255} to the operand value, which like with @code{GETA} must
- be a multiple of four, and a final @code{GO $255,$255,0}.
- @item @samp{PUSHJ}
- Similar to expansion for conditional branches; four instructions set
- @code{$255} to the operand value, followed by a @code{PUSHGO $255,$255,0}.
- @item @samp{JMP}
- Similar to conditional branches and @code{PUSHJ}. The final instruction
- is @code{GO $255,$255,0}.
- @end table
- The linker @code{@value{LD}} is expected to shrink these expansions for
- code assembled with @samp{--relax} (though not currently implemented).
- @node MMIX-Syntax
- @section Syntax
- The assembly syntax is supposed to be upward compatible with that
- described in Sections 1.3 and 1.4 of @samp{The Art of Computer
- Programming, Volume 1}. Draft versions of those chapters as well as other
- MMIX information is located at
- @anchor{mmixsite}@url{http://www-cs-faculty.stanford.edu/~knuth/mmix-news.html}.
- Most code examples from the mmixal package located there should work
- unmodified when assembled and linked as single files, with a few
- noteworthy exceptions (@pxref{MMIX-mmixal}).
- Before an instruction is emitted, the current location is aligned to the
- next four-byte boundary. If a label is defined at the beginning of the
- line, its value will be the aligned value.
- In addition to the traditional hex-prefix @samp{0x}, a hexadecimal number
- can also be specified by the prefix character @samp{#}.
- After all operands to an MMIX instruction or directive have been
- specified, the rest of the line is ignored, treated as a comment.
- @menu
- * MMIX-Chars:: Special Characters
- * MMIX-Symbols:: Symbols
- * MMIX-Regs:: Register Names
- * MMIX-Pseudos:: Assembler Directives
- @end menu
- @node MMIX-Chars
- @subsection Special Characters
- @cindex line comment characters, MMIX
- @cindex MMIX line comment characters
- The characters @samp{*} and @samp{#} are line comment characters; each
- start a comment at the beginning of a line, but only at the beginning of a
- line. A @samp{#} prefixes a hexadecimal number if found elsewhere on a
- line. If a @samp{#} appears at the start of a line the whole line is
- treated as a comment, but the line can also act as a logical line
- number directive (@pxref{Comments}) or a preprocessor control command
- (@pxref{Preprocessing}).
- Two other characters, @samp{%} and @samp{!}, each start a comment anywhere
- on the line. Thus you can't use the @samp{modulus} and @samp{not}
- operators in expressions normally associated with these two characters.
- A @samp{;} is a line separator, treated as a new-line, so separate
- instructions can be specified on a single line.
- @node MMIX-Symbols
- @subsection Symbols
- The character @samp{:} is permitted in identifiers. There are two
- exceptions to it being treated as any other symbol character: if a symbol
- begins with @samp{:}, it means that the symbol is in the global namespace
- and that the current prefix should not be prepended to that symbol
- (@pxref{MMIX-prefix}). The @samp{:} is then not considered part of the
- symbol. For a symbol in the label position (first on a line), a @samp{:}
- at the end of a symbol is silently stripped off. A label is permitted,
- but not required, to be followed by a @samp{:}, as with many other
- assembly formats.
- The character @samp{@@} in an expression, is a synonym for @samp{.}, the
- current location.
- In addition to the common forward and backward local symbol formats
- (@pxref{Symbol Names}), they can be specified with upper-case @samp{B} and
- @samp{F}, as in @samp{8B} and @samp{9F}. A local label defined for the
- current position is written with a @samp{H} appended to the number:
- @smallexample
- 3H LDB $0,$1,2
- @end smallexample
- This and traditional local-label formats cannot be mixed: a label must be
- defined and referred to using the same format.
- There's a minor caveat: just as for the ordinary local symbols, the local
- symbols are translated into ordinary symbols using control characters are
- to hide the ordinal number of the symbol. Unfortunately, these symbols
- are not translated back in error messages. Thus you may see confusing
- error messages when local symbols are used. Control characters
- @samp{\003} (control-C) and @samp{\004} (control-D) are used for the
- MMIX-specific local-symbol syntax.
- The symbol @samp{Main} is handled specially; it is always global.
- By defining the symbols @samp{__.MMIX.start..text} and
- @samp{__.MMIX.start..data}, the address of respectively the @samp{.text}
- and @samp{.data} segments of the final program can be defined, though when
- linking more than one object file, the code or data in the object file
- containing the symbol is not guaranteed to be start at that position; just
- the final executable. @xref{MMIX-loc}.
- @node MMIX-Regs
- @subsection Register names
- @cindex register names, MMIX
- @cindex MMIX register names
- Local and global registers are specified as @samp{$0} to @samp{$255}.
- The recognized special register names are @samp{rJ}, @samp{rA}, @samp{rB},
- @samp{rC}, @samp{rD}, @samp{rE}, @samp{rF}, @samp{rG}, @samp{rH},
- @samp{rI}, @samp{rK}, @samp{rL}, @samp{rM}, @samp{rN}, @samp{rO},
- @samp{rP}, @samp{rQ}, @samp{rR}, @samp{rS}, @samp{rT}, @samp{rU},
- @samp{rV}, @samp{rW}, @samp{rX}, @samp{rY}, @samp{rZ}, @samp{rBB},
- @samp{rTT}, @samp{rWW}, @samp{rXX}, @samp{rYY} and @samp{rZZ}. A leading
- @samp{:} is optional for special register names.
- Local and global symbols can be equated to register names and used in
- place of ordinary registers.
- Similarly for special registers, local and global symbols can be used.
- Also, symbols equated from numbers and constant expressions are allowed in
- place of a special register, except when either of the options
- @code{--no-predefined-syms} and @code{--fixed-special-register-names} are
- specified. Then only the special register names above are allowed for the
- instructions having a special register operand; @code{GET} and @code{PUT}.
- @node MMIX-Pseudos
- @subsection Assembler Directives
- @cindex assembler directives, MMIX
- @cindex pseudo-ops, MMIX
- @cindex MMIX assembler directives
- @cindex MMIX pseudo-ops
- @table @code
- @item LOC
- @cindex assembler directive LOC, MMIX
- @cindex pseudo-op LOC, MMIX
- @cindex MMIX assembler directive LOC
- @cindex MMIX pseudo-op LOC
- @anchor{MMIX-loc}
- The @code{LOC} directive sets the current location to the value of the
- operand field, which may include changing sections. If the operand is a
- constant, the section is set to either @code{.data} if the value is
- @code{0x2000000000000000} or larger, else it is set to @code{.text}.
- Within a section, the current location may only be changed to
- monotonically higher addresses. A LOC expression must be a previously
- defined symbol or a ``pure'' constant.
- An example, which sets the label @var{prev} to the current location, and
- updates the current location to eight bytes forward:
- @smallexample
- prev LOC @@+8
- @end smallexample
- When a LOC has a constant as its operand, a symbol
- @code{__.MMIX.start..text} or @code{__.MMIX.start..data} is defined
- depending on the address as mentioned above. Each such symbol is
- interpreted as special by the linker, locating the section at that
- address. Note that if multiple files are linked, the first object file
- with that section will be mapped to that address (not necessarily the file
- with the LOC definition).
- @item LOCAL
- @cindex assembler directive LOCAL, MMIX
- @cindex pseudo-op LOCAL, MMIX
- @cindex MMIX assembler directive LOCAL
- @cindex MMIX pseudo-op LOCAL
- @anchor{MMIX-local}
- Example:
- @smallexample
- LOCAL external_symbol
- LOCAL 42
- .local asymbol
- @end smallexample
- This directive-operation generates a link-time assertion that the operand
- does not correspond to a global register. The operand is an expression
- that at link-time resolves to a register symbol or a number. A number is
- treated as the register having that number. There is one restriction on
- the use of this directive: the pseudo-directive must be placed in a
- section with contents, code or data.
- @item IS
- @cindex assembler directive IS, MMIX
- @cindex pseudo-op IS, MMIX
- @cindex MMIX assembler directive IS
- @cindex MMIX pseudo-op IS
- @anchor{MMIX-is}
- The @code{IS} directive:
- @smallexample
- asymbol IS an_expression
- @end smallexample
- sets the symbol @samp{asymbol} to @samp{an_expression}. A symbol may not
- be set more than once using this directive. Local labels may be set using
- this directive, for example:
- @smallexample
- 5H IS @@+4
- @end smallexample
- @item GREG
- @cindex assembler directive GREG, MMIX
- @cindex pseudo-op GREG, MMIX
- @cindex MMIX assembler directive GREG
- @cindex MMIX pseudo-op GREG
- @anchor{MMIX-greg}
- This directive reserves a global register, gives it an initial value and
- optionally gives it a symbolic name. Some examples:
- @smallexample
- areg GREG
- breg GREG data_value
- GREG data_buffer
- .greg creg, another_data_value
- @end smallexample
- The symbolic register name can be used in place of a (non-special)
- register. If a value isn't provided, it defaults to zero. Unless the
- option @samp{--no-merge-gregs} is specified, non-zero registers allocated
- with this directive may be eliminated by @code{@value{AS}}; another
- register with the same value used in its place.
- Any of the instructions
- @samp{CSWAP},
- @samp{GO},
- @samp{LDA},
- @samp{LDBU},
- @samp{LDB},
- @samp{LDHT},
- @samp{LDOU},
- @samp{LDO},
- @samp{LDSF},
- @samp{LDTU},
- @samp{LDT},
- @samp{LDUNC},
- @samp{LDVTS},
- @samp{LDWU},
- @samp{LDW},
- @samp{PREGO},
- @samp{PRELD},
- @samp{PREST},
- @samp{PUSHGO},
- @samp{STBU},
- @samp{STB},
- @samp{STCO},
- @samp{STHT},
- @samp{STOU},
- @samp{STSF},
- @samp{STTU},
- @samp{STT},
- @samp{STUNC},
- @samp{SYNCD},
- @samp{SYNCID},
- can have a value nearby @anchor{GREG-base}an initial value in place of its
- second and third operands. Here, ``nearby'' is defined as within the
- range 0@dots{}255 from the initial value of such an allocated register.
- @smallexample
- buffer1 BYTE 0,0,0,0,0
- buffer2 BYTE 0,0,0,0,0
- @dots{}
- GREG buffer1
- LDOU $42,buffer2
- @end smallexample
- In the example above, the @samp{Y} field of the @code{LDOUI} instruction
- (LDOU with a constant Z) will be replaced with the global register
- allocated for @samp{buffer1}, and the @samp{Z} field will have the value
- 5, the offset from @samp{buffer1} to @samp{buffer2}. The result is
- equivalent to this code:
- @smallexample
- buffer1 BYTE 0,0,0,0,0
- buffer2 BYTE 0,0,0,0,0
- @dots{}
- tmpreg GREG buffer1
- LDOU $42,tmpreg,(buffer2-buffer1)
- @end smallexample
- Global registers allocated with this directive are allocated in order
- higher-to-lower within a file. Other than that, the exact order of
- register allocation and elimination is undefined. For example, the order
- is undefined when more than one file with such directives are linked
- together. With the options @samp{-x} and @samp{--linker-allocated-gregs},
- @samp{GREG} directives for two-operand cases like the one mentioned above
- can be omitted. Sufficient global registers will then be allocated by the
- linker.
- @item BYTE
- @cindex assembler directive BYTE, MMIX
- @cindex pseudo-op BYTE, MMIX
- @cindex MMIX assembler directive BYTE
- @cindex MMIX pseudo-op BYTE
- @anchor{MMIX-byte}
- The @samp{BYTE} directive takes a series of operands separated by a comma.
- If an operand is a string (@pxref{Strings}), each character of that string
- is emitted as a byte. Other operands must be constant expressions without
- forward references, in the range 0@dots{}255. If you need operands having
- expressions with forward references, use @samp{.byte} (@pxref{Byte}). An
- operand can be omitted, defaulting to a zero value.
- @item WYDE
- @itemx TETRA
- @itemx OCTA
- @cindex assembler directive WYDE, MMIX
- @cindex pseudo-op WYDE, MMIX
- @cindex MMIX assembler directive WYDE
- @cindex MMIX pseudo-op WYDE
- @cindex assembler directive TETRA, MMIX
- @cindex pseudo-op TETRA, MMIX
- @cindex MMIX assembler directive TETRA
- @cindex MMIX pseudo-op TETRA
- @cindex assembler directive OCTA, MMIX
- @cindex pseudo-op OCTA, MMIX
- @cindex MMIX assembler directive OCTA
- @cindex MMIX pseudo-op OCTA
- @anchor{MMIX-constants}
- The directives @samp{WYDE}, @samp{TETRA} and @samp{OCTA} emit constants of
- two, four and eight bytes size respectively. Before anything else happens
- for the directive, the current location is aligned to the respective
- constant-size boundary. If a label is defined at the beginning of the
- line, its value will be that after the alignment. A single operand can be
- omitted, defaulting to a zero value emitted for the directive. Operands
- can be expressed as strings (@pxref{Strings}), in which case each
- character in the string is emitted as a separate constant of the size
- indicated by the directive.
- @item PREFIX
- @cindex assembler directive PREFIX, MMIX
- @cindex pseudo-op PREFIX, MMIX
- @cindex MMIX assembler directive PREFIX
- @cindex MMIX pseudo-op PREFIX
- @anchor{MMIX-prefix}
- The @samp{PREFIX} directive sets a symbol name prefix to be prepended to
- all symbols (except local symbols, @pxref{MMIX-Symbols}), that are not
- prefixed with @samp{:}, until the next @samp{PREFIX} directive. Such
- prefixes accumulate. For example,
- @smallexample
- PREFIX a
- PREFIX b
- c IS 0
- @end smallexample
- defines a symbol @samp{abc} with the value 0.
- @item BSPEC
- @itemx ESPEC
- @cindex assembler directive BSPEC, MMIX
- @cindex pseudo-op BSPEC, MMIX
- @cindex MMIX assembler directive BSPEC
- @cindex MMIX pseudo-op BSPEC
- @cindex assembler directive ESPEC, MMIX
- @cindex pseudo-op ESPEC, MMIX
- @cindex MMIX assembler directive ESPEC
- @cindex MMIX pseudo-op ESPEC
- @anchor{MMIX-spec}
- A pair of @samp{BSPEC} and @samp{ESPEC} directives delimit a section of
- special contents (without specified semantics). Example:
- @smallexample
- BSPEC 42
- TETRA 1,2,3
- ESPEC
- @end smallexample
- The single operand to @samp{BSPEC} must be number in the range
- 0@dots{}255. The @samp{BSPEC} number 80 is used by the GNU binutils
- implementation.
- @end table
- @node MMIX-mmixal
- @section Differences to @code{mmixal}
- @cindex mmixal differences
- @cindex differences, mmixal
- The binutils @code{@value{AS}} and @code{@value{LD}} combination has a few
- differences in function compared to @code{mmixal} (@pxref{mmixsite}).
- The replacement of a symbol with a GREG-allocated register
- (@pxref{GREG-base}) is not handled the exactly same way in
- @code{@value{AS}} as in @code{mmixal}. This is apparent in the
- @code{mmixal} example file @code{inout.mms}, where different registers
- with different offsets, eventually yielding the same address, are used in
- the first instruction. This type of difference should however not affect
- the function of any program unless it has specific assumptions about the
- allocated register number.
- Line numbers (in the @samp{mmo} object format) are currently not
- supported.
- Expression operator precedence is not that of mmixal: operator precedence
- is that of the C programming language. It's recommended to use
- parentheses to explicitly specify wanted operator precedence whenever more
- than one type of operators are used.
- The serialize unary operator @code{&}, the fractional division operator
- @samp{//}, the logical not operator @code{!} and the modulus operator
- @samp{%} are not available.
- Symbols are not global by default, unless the option
- @samp{--globalize-symbols} is passed. Use the @samp{.global} directive to
- globalize symbols (@pxref{Global}).
- Operand syntax is a bit stricter with @code{@value{AS}} than
- @code{mmixal}. For example, you can't say @code{addu 1,2,3}, instead you
- must write @code{addu $1,$2,3}.
- You can't LOC to a lower address than those already visited
- (i.e., ``backwards'').
- A LOC directive must come before any emitted code.
- Predefined symbols are visible as file-local symbols after use. (In the
- ELF file, that is---the linked mmo file has no notion of a file-local
- symbol.)
- Some mapping of constant expressions to sections in LOC expressions is
- attempted, but that functionality is easily confused and should be avoided
- unless compatibility with @code{mmixal} is required. A LOC expression to
- @samp{0x2000000000000000} or higher, maps to the @samp{.data} section and
- lower addresses map to the @samp{.text} section (@pxref{MMIX-loc}).
- The code and data areas are each contiguous. Sparse programs with
- far-away LOC directives will take up the same amount of space as a
- contiguous program with zeros filled in the gaps between the LOC
- directives. If you need sparse programs, you might try and get the wanted
- effect with a linker script and splitting up the code parts into sections
- (@pxref{Section}). Assembly code for this, to be compatible with
- @code{mmixal}, would look something like:
- @smallexample
- .if 0
- LOC away_expression
- .else
- .section away,"ax"
- .fi
- @end smallexample
- @code{@value{AS}} will not execute the LOC directive and @code{mmixal}
- ignores the lines with @code{.}. This construct can be used generally to
- help compatibility.
- Symbols can't be defined twice--not even to the same value.
- Instruction mnemonics are recognized case-insensitive, though the
- @samp{IS} and @samp{GREG} pseudo-operations must be specified in
- upper-case characters.
- There's no unicode support.
- The following is a list of programs in @samp{mmix.tar.gz}, available at
- @url{http://www-cs-faculty.stanford.edu/~knuth/mmix-news.html}, last
- checked with the version dated 2001-08-25 (md5sum
- c393470cfc86fac040487d22d2bf0172) that assemble with @code{mmixal} but do
- not assemble with @code{@value{AS}}:
- @table @code
- @item silly.mms
- LOC to a previous address.
- @item sim.mms
- Redefines symbol @samp{Done}.
- @item test.mms
- Uses the serial operator @samp{&}.
- @end table
|