219 lines
		
	
	
	
		
			12 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
		
		
			
		
	
	
			219 lines
		
	
	
	
		
			12 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| 
								 | 
							
								<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.7">
							 | 
						||
| 
								 | 
							
								<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, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001, 2002,
							 | 
						||
| 
								 | 
							
								2006, 2007 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''.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								man end-->
							 | 
						||
| 
								 | 
							
								<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; } 
							 | 
						||
| 
								 | 
							
								--></style>
							 | 
						||
| 
								 | 
							
								</head>
							 | 
						||
| 
								 | 
							
								<body>
							 | 
						||
| 
								 | 
							
								<div class="node">
							 | 
						||
| 
								 | 
							
								<p>
							 | 
						||
| 
								 | 
							
								<a name="MMIX_002dPseudos"></a>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><br>
							 | 
						||
| 
								 | 
							
								</div>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<h5 class="subsubsection">9.23.3.4 Assembler Directives</h5>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<p><a name="index-assembler-directives_002c-MMIX-1268"></a><a name="index-pseudo_002dops_002c-MMIX-1269"></a><a name="index-MMIX-assembler-directives-1270"></a><a name="index-MMIX-pseudo_002dops-1271"></a>
							 | 
						||
| 
								 | 
							
								     <dl>
							 | 
						||
| 
								 | 
							
								<dt><code>LOC</code><dd><a name="index-assembler-directive-LOC_002c-MMIX-1272"></a><a name="index-pseudo_002dop-LOC_002c-MMIX-1273"></a><a name="index-MMIX-assembler-directive-LOC-1274"></a><a name="index-MMIX-pseudo_002dop-LOC-1275"></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-1276"></a><a name="index-pseudo_002dop-LOCAL_002c-MMIX-1277"></a><a name="index-MMIX-assembler-directive-LOCAL-1278"></a><a name="index-MMIX-pseudo_002dop-LOCAL-1279"></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-1280"></a><a name="index-pseudo_002dop-IS_002c-MMIX-1281"></a><a name="index-MMIX-assembler-directive-IS-1282"></a><a name="index-MMIX-pseudo_002dop-IS-1283"></a>
							 | 
						||
| 
								 | 
							
								<a name="MMIX_002dis"></a>
							 | 
						||
| 
								 | 
							
								The <code>IS</code> directive:
							 | 
						||
| 
								 | 
							
								     <pre class="smallexample">          asymbol IS an_expression
							 | 
						||
| 
								 | 
							
								     </pre>
							 | 
						||
| 
								 | 
							
								     <p>sets the symbol <span class="samp">asymbol</span> to <span class="samp">an_expression</span>.  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-1284"></a><a name="index-pseudo_002dop-GREG_002c-MMIX-1285"></a><a name="index-MMIX-assembler-directive-GREG-1286"></a><a name="index-MMIX-pseudo_002dop-GREG-1287"></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 <span class="samp">--no-merge-gregs</span> 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
							 | 
						||
| 
								 | 
							
								<span class="samp">CSWAP</span>,
							 | 
						||
| 
								 | 
							
								<span class="samp">GO</span>,
							 | 
						||
| 
								 | 
							
								<span class="samp">LDA</span>,
							 | 
						||
| 
								 | 
							
								<span class="samp">LDBU</span>,
							 | 
						||
| 
								 | 
							
								<span class="samp">LDB</span>,
							 | 
						||
| 
								 | 
							
								<span class="samp">LDHT</span>,
							 | 
						||
| 
								 | 
							
								<span class="samp">LDOU</span>,
							 | 
						||
| 
								 | 
							
								<span class="samp">LDO</span>,
							 | 
						||
| 
								 | 
							
								<span class="samp">LDSF</span>,
							 | 
						||
| 
								 | 
							
								<span class="samp">LDTU</span>,
							 | 
						||
| 
								 | 
							
								<span class="samp">LDT</span>,
							 | 
						||
| 
								 | 
							
								<span class="samp">LDUNC</span>,
							 | 
						||
| 
								 | 
							
								<span class="samp">LDVTS</span>,
							 | 
						||
| 
								 | 
							
								<span class="samp">LDWU</span>,
							 | 
						||
| 
								 | 
							
								<span class="samp">LDW</span>,
							 | 
						||
| 
								 | 
							
								<span class="samp">PREGO</span>,
							 | 
						||
| 
								 | 
							
								<span class="samp">PRELD</span>,
							 | 
						||
| 
								 | 
							
								<span class="samp">PREST</span>,
							 | 
						||
| 
								 | 
							
								<span class="samp">PUSHGO</span>,
							 | 
						||
| 
								 | 
							
								<span class="samp">STBU</span>,
							 | 
						||
| 
								 | 
							
								<span class="samp">STB</span>,
							 | 
						||
| 
								 | 
							
								<span class="samp">STCO</span>,
							 | 
						||
| 
								 | 
							
								<span class="samp">STHT</span>,
							 | 
						||
| 
								 | 
							
								<span class="samp">STOU</span>,
							 | 
						||
| 
								 | 
							
								<span class="samp">STSF</span>,
							 | 
						||
| 
								 | 
							
								<span class="samp">STTU</span>,
							 | 
						||
| 
								 | 
							
								<span class="samp">STT</span>,
							 | 
						||
| 
								 | 
							
								<span class="samp">STUNC</span>,
							 | 
						||
| 
								 | 
							
								<span class="samp">SYNCD</span>,
							 | 
						||
| 
								 | 
							
								<span class="samp">SYNCID</span>,
							 | 
						||
| 
								 | 
							
								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 <span class="samp">Y</span> field of the <code>LDOUI</code> instruction
							 | 
						||
| 
								 | 
							
								(LDOU with a constant Z) will be replaced with the global register
							 | 
						||
| 
								 | 
							
								allocated for <span class="samp">buffer1</span>, and the <span class="samp">Z</span> field will have the value
							 | 
						||
| 
								 | 
							
								5, the offset from <span class="samp">buffer1</span> to <span class="samp">buffer2</span>.  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 <span class="samp">-x</span> and <span class="samp">--linker-allocated-gregs</span>,
							 | 
						||
| 
								 | 
							
								<span class="samp">GREG</span> 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-1288"></a><a name="index-pseudo_002dop-BYTE_002c-MMIX-1289"></a><a name="index-MMIX-assembler-directive-BYTE-1290"></a><a name="index-MMIX-pseudo_002dop-BYTE-1291"></a>
							 | 
						||
| 
								 | 
							
								<a name="MMIX_002dbyte"></a>
							 | 
						||
| 
								 | 
							
								The <span class="samp">BYTE</span> 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 <span class="samp">.byte</span> (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-1292"></a><a name="index-pseudo_002dop-WYDE_002c-MMIX-1293"></a><a name="index-MMIX-assembler-directive-WYDE-1294"></a><a name="index-MMIX-pseudo_002dop-WYDE-1295"></a><a name="index-assembler-directive-TETRA_002c-MMIX-1296"></a><a name="index-pseudo_002dop-TETRA_002c-MMIX-1297"></a><a name="index-MMIX-assembler-directive-TETRA-1298"></a><a name="index-MMIX-pseudo_002dop-TETRA-1299"></a><a name="index-assembler-directive-OCTA_002c-MMIX-1300"></a><a name="index-pseudo_002dop-OCTA_002c-MMIX-1301"></a><a name="index-MMIX-assembler-directive-OCTA-1302"></a><a name="index-MMIX-pseudo_002dop-OCTA-1303"></a>
							 | 
						||
| 
								 | 
							
								<a name="MMIX_002dconstants"></a>
							 | 
						||
| 
								 | 
							
								The directives <span class="samp">WYDE</span>, <span class="samp">TETRA</span> and <span class="samp">OCTA</span> 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-1304"></a><a name="index-pseudo_002dop-PREFIX_002c-MMIX-1305"></a><a name="index-MMIX-assembler-directive-PREFIX-1306"></a><a name="index-MMIX-pseudo_002dop-PREFIX-1307"></a>
							 | 
						||
| 
								 | 
							
								<a name="MMIX_002dprefix"></a>
							 | 
						||
| 
								 | 
							
								The <span class="samp">PREFIX</span> 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 <span class="samp">:</span>, until the next <span class="samp">PREFIX</span> directive.  Such
							 | 
						||
| 
								 | 
							
								prefixes accumulate.  For example,
							 | 
						||
| 
								 | 
							
								     <pre class="smallexample">           PREFIX a
							 | 
						||
| 
								 | 
							
								           PREFIX b
							 | 
						||
| 
								 | 
							
								          c IS 0
							 | 
						||
| 
								 | 
							
								     </pre>
							 | 
						||
| 
								 | 
							
								     <p>defines a symbol <span class="samp">abc</span> with the value 0.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								     <br><dt><code>BSPEC</code><dt><code>ESPEC</code><dd><a name="index-assembler-directive-BSPEC_002c-MMIX-1308"></a><a name="index-pseudo_002dop-BSPEC_002c-MMIX-1309"></a><a name="index-MMIX-assembler-directive-BSPEC-1310"></a><a name="index-MMIX-pseudo_002dop-BSPEC-1311"></a><a name="index-assembler-directive-ESPEC_002c-MMIX-1312"></a><a name="index-pseudo_002dop-ESPEC_002c-MMIX-1313"></a><a name="index-MMIX-assembler-directive-ESPEC-1314"></a><a name="index-MMIX-pseudo_002dop-ESPEC-1315"></a>
							 | 
						||
| 
								 | 
							
								<a name="MMIX_002dspec"></a>
							 | 
						||
| 
								 | 
							
								A pair of <span class="samp">BSPEC</span> and <span class="samp">ESPEC</span> 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 <span class="samp">BSPEC</span> must be number in the range
							 | 
						||
| 
								 | 
							
								0<small class="dots">...</small>255.  The <span class="samp">BSPEC</span> number 80 is used by the GNU binutils
							 | 
						||
| 
								 | 
							
								implementation. 
							 | 
						||
| 
								 | 
							
								</dl>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   </body></html>
							 | 
						||
| 
								 | 
							
								
							 |