Files
hustoj/web/cppreference-zh/chmhelp/c-language-asm.html
2025-08-01 12:57:54 +08:00

140 lines
11 KiB
HTML

<!DOCTYPE html>
<html lang="zh" dir="ltr" class="client-nojs" xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh">
<head><meta http-equiv="x-ua-compatible" content="ie=edge">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>&#20869;&#32852;&#27719;&#32534;</title>
<link rel="stylesheet" href="ext.css" />
<link rel="stylesheet" href="site_modules.css" />
</head>
<body class="mediawiki ltr sitedir-ltr ns-0 ns-subject page-c_language_asm skin-cppreference2 action-view cpp-navbar">
<div id="cpp-content-base">
<div id="content"><a id="top"></a>
<h1 id="firstHeading" class="firstHeading">&#20869;&#32852;&#27719;&#32534;</h1>
<div id="bodyContent">
<div id="contentSub"><span class="subpages">&lt; <a href="c.html">c</a>&lrm; | <a href="c-language.html">language</a></span></div>
<div id="mw-content-text" lang="zh" dir="ltr" class="mw-content-ltr" xml:lang="zh">
<p>&#20869;&#32852;&#27719;&#32534;&#65288;&#24120;&#30001; <span class="t-c"><span class="mw-geshi c source-c">asm</span></span> &#20851;&#38190;&#35789;&#24341;&#20837;&#65289;&#32473;&#20104;&#22312; C &#31243;&#24207;&#20013;&#23884;&#20837;&#27719;&#32534;&#35821;&#35328;&#28304;&#20195;&#30721;&#30340;&#33021;&#21147;&#12290;</p>
<p>&#19981;&#21516;&#20110; C++ &#20013;&#65292;&#20869;&#32852;&#27719;&#32534;&#22312; C &#20013;&#34987;&#24403;&#20316;&#25193;&#23637;&#12290;&#23427;&#26159;&#26465;&#20214;&#24615;&#25903;&#25345;&#21450;&#30001;&#23454;&#29616;&#23450;&#20041;&#30340;&#65292;&#24847;&#24605;&#26159;&#23427;&#21487;&#20197;&#19981;&#23384;&#22312;&#65292;&#32780;&#19988;&#21363;&#20351;&#23454;&#29616;&#26377;&#25152;&#25552;&#20379;&#65292;&#23427;&#20063;&#24182;&#19981;&#25317;&#26377;&#22266;&#23450;&#30340;&#21547;&#20041;&#12290;</p>
<h3><span class="mw-headline" id=".E8.AF.AD.E6.B3.95">&#35821;&#27861;</span></h3>
<table class="t-sdsc-begin">
<tr>
<td colspan="10" class="t-sdsc-sep"></td>
</tr>
<tr class="t-sdsc">
<td class="t-sdsc-nopad"><code><b>asm (</b></code> <span class="t-spar">&#23383;&#31526;&#20018;&#23383;&#38754;&#37327;</span> <code><b>)</b></code> <code><b>;</b></code></td>
<td class="t-sdsc-nopad"></td>
<td class="t-sdsc-nopad"></td>
</tr>
<tr>
<td colspan="10" class="t-sdsc-sep"></td>
</tr>
</table>
<table class="metadata plainlinks ambox mbox-small-left ambox-notice" style="">
<tr>
<td class="mbox-empty-cell"></td>
<td class="mbox-text" style="">&#26412;&#33410;&#26410;&#23436;&#25104;<br />
&#21407;&#22240;&#65306;&#20889;&#19979;&#20851;&#20110; GCC &#25193;&#23637;&#27719;&#32534;&#35821;&#27861;&#30340;&#27880;&#35299;&#65292;&#22240;&#20026;&#29616;&#22312; Intel&#12289;IBM&#12289;Sun&#65288;&#33258; v12 &#36215;&#65289;&#31561;&#22343;&#25903;&#25345;&#23427;</td>
</tr>
</table>
<h3><span class="mw-headline" id=".E8.A7.A3.E9.87.8A">&#35299;&#37322;</span></h3>
<p>&#36825;&#31181;&#20869;&#32852;&#27719;&#32534;&#35821;&#27861;&#20026; C++ &#26631;&#20934;&#25152;&#25509;&#21463;&#65292;&#32780;&#22312; C++ &#20013;&#31216;&#20026;<i>&#27719;&#32534;&#22768;&#26126;</i>&#12290; <span class="t-spar">&#23383;&#31526;&#20018;&#23383;&#38754;&#37327;</span> &#36890;&#24120;&#26159;&#20197;&#27719;&#32534;&#35821;&#35328;&#32534;&#20889;&#30340;&#30701;&#31243;&#24207;&#65292;&#27599;&#24403;&#25191;&#34892;&#36825;&#26465;&#22768;&#26126;&#26102;&#23545;&#20854;&#25191;&#34892;&#12290;&#19981;&#21516;&#30340; C &#32534;&#35793;&#22120;&#25317;&#26377;&#24046;&#24322;&#24040;&#22823;&#30340;&#27719;&#32534;&#22768;&#26126;&#35268;&#21017;&#65292;&#21644;&#19982;&#21608;&#22260;&#30340; C &#20195;&#30721;&#20043;&#38388;&#20132;&#20114;&#30340;&#19981;&#21516;&#32422;&#23450;&#12290;</p>
<p>&#27719;&#32534;&#22768;&#26126;&#21487;&#20986;&#29616;&#20110;&#22359;&#65288;&#20989;&#25968;&#20307;&#25110;&#20854;&#20182;&#22797;&#21512;&#35821;&#21477;&#65289;&#20869;&#65292;&#32780;&#19988;&#21516;&#25152;&#26377;&#20854;&#20182;&#22768;&#26126;&#65292;&#27492;&#22768;&#26126;&#20134;&#21487;&#20986;&#29616;&#20110;&#22359;&#22806;&#12290;</p>
<h3><span class="mw-headline" id=".E6.B3.A8.E8.A7.A3">&#27880;&#35299;</span></h3>
<p>MSVC &#22312; ARM &#19982; x64 &#22788;&#29702;&#22120;&#19978;&#19981;&#25903;&#25345;&#20869;&#32852;&#27719;&#32534;&#65292;&#32780;&#19988;&#22312; x86 &#22788;&#29702;&#22120;&#19978;&#20165;&#25903;&#25345;&#30001; <span class="t-c"><span class="mw-geshi c source-c">__asm</span></span> &#24341;&#20837;&#30340;&#24418;&#24335;&#12290;</p>
<p>&#20197; GCC &#25110; Clang &#29992; ISO C &#27169;&#24335;&#32534;&#35793;&#65288;&#20363;&#22914;&#20197;&#36873;&#39033; <span class="t-c"><span class="mw-geshi c source-c"><span class="sy2">-</span>std<span class="sy1">=</span>c11</span></span> &#65289;&#26102;&#65292;&#24517;&#39035;&#29992; <span class="t-c"><span class="mw-geshi c source-c">__asm__</span></span> &#20195;&#26367; <span class="t-c"><span class="mw-geshi c source-c">asm</span></span> &#12290;</p>
<h3><span class="mw-headline" id=".E7.A4.BA.E4.BE.8B">&#31034;&#20363;</span></h3>
<div class="t-example">
<p>&#28436;&#31034; GCC &#25552;&#20379;&#30340;&#20108;&#31181;&#20869;&#32852;&#27719;&#32534;&#35821;&#27861;&#12290;&#27492;&#31243;&#24207;&#23558;&#21482;&#22312; x86-64 &#19978;&#30340; Linux &#19979;&#27491;&#30830;&#24037;&#20316;&#12290;&#27880;&#24847;&ldquo;&#26631;&#20934;&#20869;&#32852;&#27719;&#32534;&rdquo;&#22312; C &#26631;&#20934;&#20013;&#20134;&#34987;&#24403;&#20316;&#25193;&#23637;&#12290;</p>
<div class="t-example-live-link"></div>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="c source-c">
<pre class="de1"><span class="co2">#include &lt;stdio.h&gt;</span>
<span class="kw2">extern</span> <span class="kw4">int</span> func<span class="br0">(</span><span class="kw4">void</span><span class="br0">)</span><span class="sy4">;</span>
<span class="co1">// func &#30340;&#23450;&#20041;&#20197;&#27719;&#32534;&#35821;&#35328;&#20070;&#20889;</span>
__asm__<span class="br0">(</span><span class="st0">&quot;.globl func<span class="es1">\n</span><span class="es1">\t</span>&quot;</span>
<span class="st0">&quot;.type func, @function<span class="es1">\n</span><span class="es1">\t</span>&quot;</span>
<span class="st0">&quot;func:<span class="es1">\n</span><span class="es1">\t</span>&quot;</span>
<span class="st0">&quot;.cfi_startproc<span class="es1">\n</span><span class="es1">\t</span>&quot;</span>
<span class="st0">&quot;movl $7, %eax<span class="es1">\n</span><span class="es1">\t</span>&quot;</span>
<span class="st0">&quot;ret<span class="es1">\n</span><span class="es1">\t</span>&quot;</span>
<span class="st0">&quot;.cfi_endproc&quot;</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw4">int</span> main<span class="br0">(</span><span class="kw4">void</span><span class="br0">)</span>
<span class="br0">{</span>
<span class="kw4">int</span> n <span class="sy1">=</span> func<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span>
<span class="co1">// gcc &#30340;&#25193;&#23637;&#20869;&#32852;&#27719;&#32534;</span>
__asm__ <span class="br0">(</span><span class="st0">&quot;leal (%0,%0,4),%0&quot;</span>
<span class="sy4">:</span> <span class="st0">&quot;=r&quot;</span> <span class="br0">(</span>n<span class="br0">)</span>
<span class="sy4">:</span> <span class="st0">&quot;0&quot;</span> <span class="br0">(</span>n<span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span>
<a href="c-io-fprintf.html"><span class="kw851">printf</span></a><span class="br0">(</span><span class="st0">&quot;7*5 = %d<span class="es1">\n</span>&quot;</span>, n<span class="br0">)</span><span class="sy4">;</span>
<a href="c-io-fflush.html"><span class="kw821">fflush</span></a><span class="br0">(</span><a href="c-io.html"><span class="kw887">stdout</span></a><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#20914;&#21047;&#26159;&#26377;&#24847;&#30340;</span>
<span class="co1">// C++ &#20013;&#30340;&#26631;&#20934;&#20869;&#32852;&#27719;&#32534;</span>
__asm__ <span class="br0">(</span><span class="st0">&quot;movq $60, %rax<span class="es1">\n</span><span class="es1">\t</span>&quot;</span> <span class="co1">// Linux &#19978;&#30340;&ldquo;&#36864;&#20986;&rdquo;&#30340;&#31995;&#32479;&#35843;&#29992;&#24207;&#21495;</span>
<span class="st0">&quot;movq $2, %rdi<span class="es1">\n</span><span class="es1">\t</span>&quot;</span> <span class="co1">// &#27492;&#31243;&#24207;&#36820;&#22238; 2</span>
<span class="st0">&quot;syscall&quot;</span><span class="br0">)</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<p>&#36755;&#20986;&#65306;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="text source-text">
<pre class="de1">7*5 = 35</pre></div>
</div>
</div>
<h3><span class="mw-headline" id=".E5.A4.96.E9.83.A8.E9.93.BE.E6.8E.A5">&#22806;&#37096;&#38142;&#25509;</span></h3>
<ul>
<li><a rel="nofollow" class="external text" href="http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html">GCC &#20869;&#32852;&#27719;&#32534; HOWTO</a></li>
<li><a rel="nofollow" class="external text" href="http://pic.dhe.ibm.com/infocenter/comphelp/v121v141/topic/com.ibm.xlcpp121.aix.doc/language_ref/asm.html">IBM XL C/C++ &#20869;&#32852;&#27719;&#32534;</a></li>
<li><a rel="nofollow" class="external text" href="https://software.intel.com/en-us/cpp-compiler-developer-guide-and-reference-inline-assembly">Intel C++ &#20869;&#32852;&#27719;&#32534;</a></li>
<li><a rel="nofollow" class="external text" href="http://msdn.microsoft.com/en-us/library/4ks26t93(v=vs.120).aspx">Visual Studio 2013 &#20869;&#32852;&#27719;&#32534;&#22120;</a></li>
<li><a rel="nofollow" class="external text" href="https://blogs.oracle.com/x86be/entry/gcc_style_asm_inlining_support">Sun Studio 12 Asm &#35821;&#21477;</a></li>
<li><a rel="nofollow" class="external text" href="http://h21007.www2.hp.com/portal/site/dspp/menuitem.863c3e4cbcdc3f3515b49c108973a801?ciid=4308e2f5bde02110e2f5bde02110275d6e10RCRD">&#22522;&#20110; Itanium &#30340; HP-UX &#30340;&#20869;&#32852;&#27719;&#32534;</a></li>
</ul>
<h3><span class="mw-headline" id=".E5.BC.95.E7.94.A8">&#24341;&#29992;</span></h3>
<div class="t-ref-std-11">
<ul>
<li>C11 &#26631;&#20934;&#65288;ISO/IEC 9899:2011&#65289;&#65306;</li>
</ul>
<dl>
<dd>
<ul>
<li>J.5.10 The asm keyword (p: 580)</li>
</ul>
</dd>
</dl>
</div>
<div class="t-ref-std-c99">
<ul>
<li>C99 &#26631;&#20934;&#65288;ISO/IEC 9899:1999&#65289;&#65306;</li>
</ul>
<dl>
<dd>
<ul>
<li>J.5.10 The asm keyword (p: 512)</li>
</ul>
</dd>
</dl>
</div>
<div class="t-ref-std-c89">
<ul>
<li>C89/C90 &#26631;&#20934;&#65288;ISO/IEC 9899:1990&#65289;&#65306;</li>
</ul>
<dl>
<dd>
<ul>
<li>G.5.10 The asm keyword</li>
</ul>
</dd>
</dl>
</div>
<h3><span class="mw-headline" id=".E5.8F.82.E9.98.85">&#21442;&#38405;</span></h3>
<table class="t-dsc-begin"></table>
</div>
<div class="visualClear"></div>
</div>
</div>
</div>
</body>
</html>