| <html lang="en"> |
| <head> |
| <title>MMIX-Pseudos - Using as</title> |
| <meta http-equiv="Content-Type" content="text/html"> |
| <meta name="description" content="Using as"> |
| <meta name="generator" content="makeinfo 4.13"> |
| <link title="Top" rel="start" href="index.html#Top"> |
| <link rel="up" href="MMIX_002dSyntax.html#MMIX_002dSyntax" title="MMIX-Syntax"> |
| <link rel="prev" href="MMIX_002dRegs.html#MMIX_002dRegs" title="MMIX-Regs"> |
| <link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage"> |
| <!-- |
| This file documents the GNU Assembler "as". |
| |
| Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, |
| 2000, 2001, 2002, 2006, 2007, 2008, 2009, 2010 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.3 |
| 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''. |
| |
| --> |
| <meta http-equiv="Content-Style-Type" content="text/css"> |
| <style type="text/css"><!-- |
| pre.display { font-family:inherit } |
| pre.format { font-family:inherit } |
| pre.smalldisplay { font-family:inherit; font-size:smaller } |
| pre.smallformat { font-family:inherit; font-size:smaller } |
| pre.smallexample { font-size:smaller } |
| pre.smalllisp { font-size:smaller } |
| span.sc { font-variant:small-caps } |
| span.roman { font-family:serif; font-weight:normal; } |
| span.sansserif { font-family:sans-serif; font-weight:normal; } |
| --></style> |
| <link rel="stylesheet" type="text/css" href="../cs.css"> |
| </head> |
| <body> |
| <div class="node"> |
| <a name="MMIX-Pseudos"></a> |
| <a name="MMIX_002dPseudos"></a> |
| <p> |
| Previous: <a rel="previous" accesskey="p" href="MMIX_002dRegs.html#MMIX_002dRegs">MMIX-Regs</a>, |
| Up: <a rel="up" accesskey="u" href="MMIX_002dSyntax.html#MMIX_002dSyntax">MMIX-Syntax</a> |
| <hr> |
| </div> |
| |
| <h5 class="subsubsection">9.25.3.4 Assembler Directives</h5> |
| |
| <p><a name="index-assembler-directives_002c-MMIX-1330"></a><a name="index-pseudo_002dops_002c-MMIX-1331"></a><a name="index-MMIX-assembler-directives-1332"></a><a name="index-MMIX-pseudo_002dops-1333"></a> |
| <dl> |
| <dt><code>LOC</code><dd><a name="index-assembler-directive-LOC_002c-MMIX-1334"></a><a name="index-pseudo_002dop-LOC_002c-MMIX-1335"></a><a name="index-MMIX-assembler-directive-LOC-1336"></a><a name="index-MMIX-pseudo_002dop-LOC-1337"></a> |
| <a name="MMIX_002dloc"></a>The <code>LOC</code> 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</code> if the value is |
| <code>0x2000000000000000</code> or larger, else it is set to <code>.text</code>. |
| 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. |
| |
| <p>An example, which sets the label <var>prev</var> to the current location, and |
| updates the current location to eight bytes forward: |
| <pre class="smallexample"> prev LOC @+8 |
| </pre> |
| <p>When a LOC has a constant as its operand, a symbol |
| <code>__.MMIX.start..text</code> or <code>__.MMIX.start..data</code> 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). |
| |
| <br><dt><code>LOCAL</code><dd><a name="index-assembler-directive-LOCAL_002c-MMIX-1338"></a><a name="index-pseudo_002dop-LOCAL_002c-MMIX-1339"></a><a name="index-MMIX-assembler-directive-LOCAL-1340"></a><a name="index-MMIX-pseudo_002dop-LOCAL-1341"></a> |
| <a name="MMIX_002dlocal"></a>Example: |
| <pre class="smallexample"> LOCAL external_symbol |
| LOCAL 42 |
| .local asymbol |
| </pre> |
| <p>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. |
| |
| <br><dt><code>IS</code><dd><a name="index-assembler-directive-IS_002c-MMIX-1342"></a><a name="index-pseudo_002dop-IS_002c-MMIX-1343"></a><a name="index-MMIX-assembler-directive-IS-1344"></a><a name="index-MMIX-pseudo_002dop-IS-1345"></a> |
| <a name="MMIX_002dis"></a>The <code>IS</code> directive: |
| <pre class="smallexample"> asymbol IS an_expression |
| </pre> |
| <p>sets the symbol ‘<samp><span class="samp">asymbol</span></samp>’ to ‘<samp><span class="samp">an_expression</span></samp>’. A symbol may not |
| be set more than once using this directive. Local labels may be set using |
| this directive, for example: |
| <pre class="smallexample"> 5H IS @+4 |
| </pre> |
| <br><dt><code>GREG</code><dd><a name="index-assembler-directive-GREG_002c-MMIX-1346"></a><a name="index-pseudo_002dop-GREG_002c-MMIX-1347"></a><a name="index-MMIX-assembler-directive-GREG-1348"></a><a name="index-MMIX-pseudo_002dop-GREG-1349"></a> |
| <a name="MMIX_002dgreg"></a>This directive reserves a global register, gives it an initial value and |
| optionally gives it a symbolic name. Some examples: |
| |
| <pre class="smallexample"> areg GREG |
| breg GREG data_value |
| GREG data_buffer |
| .greg creg, another_data_value |
| </pre> |
| <p>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><span class="samp">--no-merge-gregs</span></samp>’ is specified, non-zero registers allocated |
| with this directive may be eliminated by <code>as</code>; another |
| register with the same value used in its place. |
| Any of the instructions |
| ‘<samp><span class="samp">CSWAP</span></samp>’, |
| ‘<samp><span class="samp">GO</span></samp>’, |
| ‘<samp><span class="samp">LDA</span></samp>’, |
| ‘<samp><span class="samp">LDBU</span></samp>’, |
| ‘<samp><span class="samp">LDB</span></samp>’, |
| ‘<samp><span class="samp">LDHT</span></samp>’, |
| ‘<samp><span class="samp">LDOU</span></samp>’, |
| ‘<samp><span class="samp">LDO</span></samp>’, |
| ‘<samp><span class="samp">LDSF</span></samp>’, |
| ‘<samp><span class="samp">LDTU</span></samp>’, |
| ‘<samp><span class="samp">LDT</span></samp>’, |
| ‘<samp><span class="samp">LDUNC</span></samp>’, |
| ‘<samp><span class="samp">LDVTS</span></samp>’, |
| ‘<samp><span class="samp">LDWU</span></samp>’, |
| ‘<samp><span class="samp">LDW</span></samp>’, |
| ‘<samp><span class="samp">PREGO</span></samp>’, |
| ‘<samp><span class="samp">PRELD</span></samp>’, |
| ‘<samp><span class="samp">PREST</span></samp>’, |
| ‘<samp><span class="samp">PUSHGO</span></samp>’, |
| ‘<samp><span class="samp">STBU</span></samp>’, |
| ‘<samp><span class="samp">STB</span></samp>’, |
| ‘<samp><span class="samp">STCO</span></samp>’, |
| ‘<samp><span class="samp">STHT</span></samp>’, |
| ‘<samp><span class="samp">STOU</span></samp>’, |
| ‘<samp><span class="samp">STSF</span></samp>’, |
| ‘<samp><span class="samp">STTU</span></samp>’, |
| ‘<samp><span class="samp">STT</span></samp>’, |
| ‘<samp><span class="samp">STUNC</span></samp>’, |
| ‘<samp><span class="samp">SYNCD</span></samp>’, |
| ‘<samp><span class="samp">SYNCID</span></samp>’, |
| can have a value nearby <a name="GREG_002dbase"></a>an initial value in place of its |
| second and third operands. Here, “nearby” is defined as within the |
| range 0<small class="dots">...</small>255 from the initial value of such an allocated register. |
| |
| <pre class="smallexample"> buffer1 BYTE 0,0,0,0,0 |
| buffer2 BYTE 0,0,0,0,0 |
| ... |
| GREG buffer1 |
| LDOU $42,buffer2 |
| </pre> |
| <p>In the example above, the ‘<samp><span class="samp">Y</span></samp>’ field of the <code>LDOUI</code> instruction |
| (LDOU with a constant Z) will be replaced with the global register |
| allocated for ‘<samp><span class="samp">buffer1</span></samp>’, and the ‘<samp><span class="samp">Z</span></samp>’ field will have the value |
| 5, the offset from ‘<samp><span class="samp">buffer1</span></samp>’ to ‘<samp><span class="samp">buffer2</span></samp>’. The result is |
| equivalent to this code: |
| <pre class="smallexample"> buffer1 BYTE 0,0,0,0,0 |
| buffer2 BYTE 0,0,0,0,0 |
| ... |
| tmpreg GREG buffer1 |
| LDOU $42,tmpreg,(buffer2-buffer1) |
| </pre> |
| <p>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><span class="samp">-x</span></samp>’ and ‘<samp><span class="samp">--linker-allocated-gregs</span></samp>’, |
| ‘<samp><span class="samp">GREG</span></samp>’ directives for two-operand cases like the one mentioned above |
| can be omitted. Sufficient global registers will then be allocated by the |
| linker. |
| |
| <br><dt><code>BYTE</code><dd><a name="index-assembler-directive-BYTE_002c-MMIX-1350"></a><a name="index-pseudo_002dop-BYTE_002c-MMIX-1351"></a><a name="index-MMIX-assembler-directive-BYTE-1352"></a><a name="index-MMIX-pseudo_002dop-BYTE-1353"></a> |
| <a name="MMIX_002dbyte"></a>The ‘<samp><span class="samp">BYTE</span></samp>’ directive takes a series of operands separated by a comma. |
| If an operand is a string (see <a href="Strings.html#Strings">Strings</a>), each character of that string |
| is emitted as a byte. Other operands must be constant expressions without |
| forward references, in the range 0<small class="dots">...</small>255. If you need operands having |
| expressions with forward references, use ‘<samp><span class="samp">.byte</span></samp>’ (see <a href="Byte.html#Byte">Byte</a>). An |
| operand can be omitted, defaulting to a zero value. |
| |
| <br><dt><code>WYDE</code><dt><code>TETRA</code><dt><code>OCTA</code><dd><a name="index-assembler-directive-WYDE_002c-MMIX-1354"></a><a name="index-pseudo_002dop-WYDE_002c-MMIX-1355"></a><a name="index-MMIX-assembler-directive-WYDE-1356"></a><a name="index-MMIX-pseudo_002dop-WYDE-1357"></a><a name="index-assembler-directive-TETRA_002c-MMIX-1358"></a><a name="index-pseudo_002dop-TETRA_002c-MMIX-1359"></a><a name="index-MMIX-assembler-directive-TETRA-1360"></a><a name="index-MMIX-pseudo_002dop-TETRA-1361"></a><a name="index-assembler-directive-OCTA_002c-MMIX-1362"></a><a name="index-pseudo_002dop-OCTA_002c-MMIX-1363"></a><a name="index-MMIX-assembler-directive-OCTA-1364"></a><a name="index-MMIX-pseudo_002dop-OCTA-1365"></a> |
| <a name="MMIX_002dconstants"></a>The directives ‘<samp><span class="samp">WYDE</span></samp>’, ‘<samp><span class="samp">TETRA</span></samp>’ and ‘<samp><span class="samp">OCTA</span></samp>’ 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 (see <a href="Strings.html#Strings">Strings</a>), in which case each |
| character in the string is emitted as a separate constant of the size |
| indicated by the directive. |
| |
| <br><dt><code>PREFIX</code><dd><a name="index-assembler-directive-PREFIX_002c-MMIX-1366"></a><a name="index-pseudo_002dop-PREFIX_002c-MMIX-1367"></a><a name="index-MMIX-assembler-directive-PREFIX-1368"></a><a name="index-MMIX-pseudo_002dop-PREFIX-1369"></a> |
| <a name="MMIX_002dprefix"></a>The ‘<samp><span class="samp">PREFIX</span></samp>’ directive sets a symbol name prefix to be prepended to |
| all symbols (except local symbols, see <a href="MMIX_002dSymbols.html#MMIX_002dSymbols">MMIX-Symbols</a>), that are not |
| prefixed with ‘<samp><span class="samp">:</span></samp>’, until the next ‘<samp><span class="samp">PREFIX</span></samp>’ directive. Such |
| prefixes accumulate. For example, |
| <pre class="smallexample"> PREFIX a |
| PREFIX b |
| c IS 0 |
| </pre> |
| <p>defines a symbol ‘<samp><span class="samp">abc</span></samp>’ with the value 0. |
| |
| <br><dt><code>BSPEC</code><dt><code>ESPEC</code><dd><a name="index-assembler-directive-BSPEC_002c-MMIX-1370"></a><a name="index-pseudo_002dop-BSPEC_002c-MMIX-1371"></a><a name="index-MMIX-assembler-directive-BSPEC-1372"></a><a name="index-MMIX-pseudo_002dop-BSPEC-1373"></a><a name="index-assembler-directive-ESPEC_002c-MMIX-1374"></a><a name="index-pseudo_002dop-ESPEC_002c-MMIX-1375"></a><a name="index-MMIX-assembler-directive-ESPEC-1376"></a><a name="index-MMIX-pseudo_002dop-ESPEC-1377"></a> |
| <a name="MMIX_002dspec"></a>A pair of ‘<samp><span class="samp">BSPEC</span></samp>’ and ‘<samp><span class="samp">ESPEC</span></samp>’ directives delimit a section of |
| special contents (without specified semantics). Example: |
| <pre class="smallexample"> BSPEC 42 |
| TETRA 1,2,3 |
| ESPEC |
| </pre> |
| <p>The single operand to ‘<samp><span class="samp">BSPEC</span></samp>’ must be number in the range |
| 0<small class="dots">...</small>255. The ‘<samp><span class="samp">BSPEC</span></samp>’ number 80 is used by the GNU binutils |
| implementation. |
| </dl> |
| |
| </body></html> |
| |