<sect1><title>Inline assembly</title>
<sect2><title>Definition</title>
<para>
<emphasis>GCC</emphasis> provides support for inline assembly with the following construct:
</para>

<programlisting>
asm ( assembler template
	    : output operands			 	(optional)
	    : input operands			 	(optional)
	    : list of clobbered registers 	  	(optional)
	    );	
</programlisting>

<para>
In addition, constraints may be applied to operands to force them to use specific <emphasis>register</emphasis>s or <emphasis>memory</emphasis> <emphasis>address</emphasis>es. Constrains may be as follows:
</para>

<itemizedlist>
<listitem><para><command>r</command> any register</para></listitem>

<listitem><para><command>a</command> %eax</para></listitem>
<listitem><para><command>b</command> %ebx</para></listitem>
<listitem><para><command>c</command> %ecx</para></listitem>
<listitem><para><command>d</command> %edx</para></listitem>
<listitem><para><command>S</command> %esi</para></listitem>
<listitem><para><command>D</command> %edi</para></listitem>

<listitem><para><command>m</command> in memory</para></listitem>

<listitem><para><command>Numeric</command> same constraint as that numbered input variable</para></listitem>
</itemizedlist>

<para>
See the excellent article in the references below for more information.
</para>
</sect2>

<sect2><title>References</title>
<itemizedlist>
<listitem><para>Article: http://www-106.ibm.com/developerworks/library/l-ia.html</para></listitem>
</itemizedlist>
</sect2>

<sect2><title>Entry history</title>
<itemizedlist>
<listitem><para>Entry created: Wed Mar 19 21:28:22 EST 2003</para></listitem>
<listitem><para>Entry owner: <emphasis>Michael Still</emphasis> (mikal@stillhq.com)</para></listitem>
<listitem><para>Status: Finalized</para></listitem>
</itemizedlist>
</sect1>