牵挂一生 發表於 2020-11-15 11:22:00

linux下汇编语言汇总

<p>一、通用寄存器:</p>
<p>  16      32     64       </p>
<p>  AX      EAX    RAX    :累加器,所有IO指令都可用他来与外部设备通信</p>
<p>  BX      EBX    RBX    :计算存储单元地址时常用作基地址寄存器</p>
<p>  CX      ECX    RCX    :常用来保存计数值</p>
<p>  DX      EDX    RDX    :在某些IO操作时,常用来放置IO的端口地址;进行多字节计算时,常常与EAX合作存储高字节部分内容</p>
<p>  SP      ESP    RSP    :堆栈栈顶指针</p>
<p>  BP      EBP    RBP    :栈基址寄存器</p>
<p>  SI       ESI    &nbsp; RSI     :源变址</p>
<p>  DI       EDI    &nbsp; RDI     :目的变址</p>
<p>  段寄存器:</p>
<p>  CS      ECS    RCS    :代码段</p>
<p>  DS      EDS    RDS    :数据段</p>
<p>  SS      ESS    RSS    :堆栈段</p>
<p>  ES      EES    RES    :附加段</p>
<p>  FS      EFS    RFS    :附加段</p>
<p>  GS     &nbsp;&nbsp; EGS  &nbsp;&nbsp;  RGS    :附加段</p>
<p>  EFLAGS                :标志寄存器</p>
<p>  使用寄存器时:</p>
<p>  mov  %eax, %ebx      #表示把eax寄存器中的内容复制到ebx寄存器中</p>
<p>  mov  (%eax), %ebx      #表示把eax内地址所指内容复制到ebx寄存器中</p>
<p>  leal  myNum, %ebx    &nbsp;&nbsp; #表示吧myNum变量的地址复制到ebx寄存器中</p>
<p>二、变量存储分配:汇编语言的.data段存储初始化的变量,.bss段存储未初始化的变量,变量类型有:</p>
<p>  .ascii:    文本字符串</p>
<p>  .asciz:    以NULL结束的文本字符串</p>
<p>  .byte:     字节值</p>
<p>  .double:    双精度浮点数</p>
<p>  .float:  &nbsp;  单精度浮点数</p>
<p>  .single:   &nbsp; 单精度浮点数</p>
<p>  .short:    16位整型数</p>
<p>  .int:      32位整型数</p>
<p>  .long:    &nbsp; 32位整型数</p>
<p>  .quad:     8位整型数</p>
<p>  .octa:    &nbsp; 16位整型数</p>
<p>  定义动态变量格式:</p>
<p>  标签:</p>
<p>    变量类型   变量值列表</p>
<p>  定义静态变量格式:</p>
<p>  .equ  变量名  变量值列表</p>
<p>  .lcomm&nbsp; 变量名  变量值列表      本地内存区域</p>
<p>  .comm&nbsp;&nbsp; 变量名  变量值列表      通用内存区域</p>
<p>三、汇编指令:</p>
<p>  #后面的都是注释内容</p>
<p>  助记符  源数据  目标数据</p>
<p>  目标数据不能是立即数,可以是寄存器,内存地址,变量名</p>
<p>  源数据可以是立即数,可以是寄存器,内存地址,变量名</p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)"> .section .data
</span><span style="color: rgba(128, 0, 128, 1)">2</span>   <span style="color: rgba(0, 128, 128, 1)">myNum:</span>
<span style="color: rgba(128, 0, 128, 1)">3</span>   .<span style="color: rgba(0, 0, 255, 1)">int</span> <span style="color: rgba(128, 0, 128, 1)">8</span>
<span style="color: rgba(128, 0, 128, 1)">4</span>   <span style="color: rgba(0, 128, 128, 1)">myGs:</span>
<span style="color: rgba(128, 0, 128, 1)">5</span>   .asciz <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">%x----%x----%x\n</span><span style="color: rgba(128, 0, 0, 1)">"</span>
<span style="color: rgba(128, 0, 128, 1)">6</span><span style="color: rgba(0, 0, 0, 1)"> .section .text
</span><span style="color: rgba(128, 0, 128, 1)">7</span><span style="color: rgba(0, 0, 0, 1)">   .globl main
</span><span style="color: rgba(128, 0, 128, 1)">8</span>   <span style="color: rgba(0, 128, 128, 1)">main:</span>
<span style="color: rgba(128, 0, 128, 1)">9</span><span style="color: rgba(0, 0, 0, 1)">         leal myNum, %eax
</span><span style="color: rgba(128, 0, 128, 1)">10</span><span style="color: rgba(0, 0, 0, 1)">         movl (%eax), %ebx
</span><span style="color: rgba(128, 0, 128, 1)">11</span><span style="color: rgba(0, 0, 0, 1)">         movl myNum, %ecx
</span><span style="color: rgba(128, 0, 128, 1)">12</span>         <span style="color: rgba(0, 0, 255, 1)">push</span><span style="color: rgba(0, 0, 0, 1)"> %ecx                                                                     
</span><span style="color: rgba(128, 0, 128, 1)">13</span>         <span style="color: rgba(0, 0, 255, 1)">push</span><span style="color: rgba(0, 0, 0, 1)"> %ebx
</span><span style="color: rgba(128, 0, 128, 1)">14</span>         <span style="color: rgba(0, 0, 255, 1)">push</span><span style="color: rgba(0, 0, 0, 1)"> %eax
</span><span style="color: rgba(128, 0, 128, 1)">15</span>         <span style="color: rgba(0, 0, 255, 1)">push</span><span style="color: rgba(0, 0, 0, 1)"> $myGs
</span><span style="color: rgba(128, 0, 128, 1)">16</span>         <span style="color: rgba(0, 0, 255, 1)">call</span><span style="color: rgba(0, 0, 0, 1)"> printf
</span><span style="color: rgba(128, 0, 128, 1)">17</span>         <span style="color: rgba(0, 0, 255, 1)">push</span> $<span style="color: rgba(128, 0, 128, 1)">0</span>
<span style="color: rgba(128, 0, 128, 1)">18</span>         <span style="color: rgba(0, 0, 255, 1)">call</span> exit</pre>
</div>
<p>编译方法:</p>
<p> <span style="font-family: monospace"><span style="color: rgba(0, 0, 0, 1)">gcc -m32 tests16.s -o tests16       //我是64位系统,为了编译32代码,加上了-m32,默认是64位代码<br></span></span></p>
<p><span style="font-family: monospace"><span style="color: rgba(0, 0, 0, 1)">结果:</span></span></p>
<div class="cnblogs_code">
<pre>565bb020----<span style="color: rgba(128, 0, 128, 1)">8</span>----<span style="color: rgba(128, 0, 128, 1)">8</span></pre>
</div>
<p> 其他比较简单,不多说了。注意,上边的代码中实际上调用了C库函数,再看testsE.s</p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)"> .section .data
</span><span style="color: rgba(128, 0, 128, 1)">2</span>   <span style="color: rgba(0, 128, 128, 1)">myValue:</span>
<span style="color: rgba(128, 0, 128, 1)">3</span>         .byte <span style="color: rgba(128, 0, 128, 1)">67</span>, <span style="color: rgba(128, 0, 128, 1)">68</span>, <span style="color: rgba(128, 0, 128, 1)">69</span>, <span style="color: rgba(128, 0, 128, 1)">70</span>, <span style="color: rgba(128, 0, 128, 1)">0</span>
<span style="color: rgba(128, 0, 128, 1)">4</span>   <span style="color: rgba(0, 128, 128, 1)">myGs:</span>
<span style="color: rgba(128, 0, 128, 1)">5</span>         .asciz <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">%s\n</span><span style="color: rgba(128, 0, 0, 1)">"</span>
<span style="color: rgba(128, 0, 128, 1)">6</span><span style="color: rgba(0, 0, 0, 1)"> .section .text
</span><span style="color: rgba(128, 0, 128, 1)">7</span><span style="color: rgba(0, 0, 0, 1)"> .globl main
</span><span style="color: rgba(128, 0, 128, 1)">8</span> <span style="color: rgba(0, 128, 128, 1)">main:</span>
<span style="color: rgba(128, 0, 128, 1)">9</span><span style="color: rgba(0, 0, 0, 1)">   #movl $myValue, %ecx
</span><span style="color: rgba(128, 0, 128, 1)">10</span>   #<span style="color: rgba(0, 0, 255, 1)">push</span><span style="color: rgba(0, 0, 0, 1)"> %ecx
</span><span style="color: rgba(128, 0, 128, 1)">11</span>   <span style="color: rgba(0, 0, 255, 1)">push</span><span style="color: rgba(0, 0, 0, 1)"> $myValue                                                                     
</span><span style="color: rgba(128, 0, 128, 1)">12</span>   <span style="color: rgba(0, 0, 255, 1)">push</span><span style="color: rgba(0, 0, 0, 1)"> $myGs
</span><span style="color: rgba(128, 0, 128, 1)">13</span>   <span style="color: rgba(0, 0, 255, 1)">call</span><span style="color: rgba(0, 0, 0, 1)"> printf
</span><span style="color: rgba(128, 0, 128, 1)">14</span>   <span style="color: rgba(0, 0, 255, 1)">push</span> $<span style="color: rgba(128, 0, 128, 1)">0</span>
<span style="color: rgba(128, 0, 128, 1)">15</span>   <span style="color: rgba(0, 0, 255, 1)">call</span> exit</pre>
</div>
<p>  编译和运行:</p>
<p>  <span style="font-family: monospace"><span style="color: rgba(0, 0, 0, 1)">gcc -m32 testsE.s -o testsE<br></span></span></p>
<p><span style="font-family: monospace"><span style="color: rgba(0, 0, 0, 1)">  CDEF</span></span></p>
<p><span style="font-family: monospace"><span style="color: rgba(0, 0, 0, 1)">  其中第9、10行和第11行的代码作用一样</span></span></p>
<p><span style="font-family: monospace"><span style="color: rgba(0, 0, 0, 1)">四、C內联汇编:在C语言中直接嵌入asm语句块,实现汇编代码和C代码的交互,既可以享受汇编的高效和直接,又能借助C语言的特点实现特定的应用。</span></span></p>
<p><span style="font-family: monospace"><span style="color: rgba(0, 0, 0, 1)">  1、内联入门:</span></span></p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)"> //This is c program code!
</span><span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)"> /* *=+=+=+=+* *** *=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
</span><span style="color: rgba(128, 0, 128, 1)">3</span>   * <span style="color: rgba(0, 128, 128, 1)">文档信息:</span><span style="color: rgba(0, 0, 0, 1)"> *** :~/testIn.c
</span><span style="color: rgba(128, 0, 128, 1)">4</span>   * <span style="color: rgba(0, 128, 128, 1)">版权声明:</span><span style="color: rgba(0, 0, 0, 1)"> *** :(魎魍魅魑)MIT
</span><span style="color: rgba(128, 0, 128, 1)">5</span>   * <span style="color: rgba(0, 128, 128, 1)">联络信箱:</span><span style="color: rgba(0, 0, 0, 1)"> *** :guochaoxxl@163.com
</span><span style="color: rgba(128, 0, 128, 1)">6</span>   * <span style="color: rgba(0, 128, 128, 1)">创建时间:</span> *** :2020<span style="color: rgba(0, 128, 128, 1)">年11月15日的下午03:</span><span style="color: rgba(128, 0, 128, 1)">18</span>
<span style="color: rgba(128, 0, 128, 1)">7</span>   * <span style="color: rgba(0, 128, 128, 1)">文档用途:</span><span style="color: rgba(0, 0, 0, 1)"> *** :数据结构与算法分析-c语言描述
</span><span style="color: rgba(128, 0, 128, 1)">8</span>   * <span style="color: rgba(0, 128, 128, 1)">作者信息:</span> *** :guochaoxxl(<span style="color: rgba(0, 128, 128, 1)">http:</span><span style="color: rgba(0, 0, 0, 1)">//cnblogs.com/guochaoxxl)
</span><span style="color: rgba(128, 0, 128, 1)">9</span>   * <span style="color: rgba(0, 128, 128, 1)">修订时间:</span> *** *2020年第45周 11月15日 星期日 <span style="color: rgba(0, 128, 128, 1)">下午03:</span><span style="color: rgba(128, 0, 128, 1)">21</span><span style="color: rgba(0, 0, 0, 1)"> (320天)
</span><span style="color: rgba(128, 0, 128, 1)">10</span>   * <span style="color: rgba(0, 128, 128, 1)">文件描述:</span><span style="color: rgba(0, 0, 0, 1)"> *** :自行添加
</span><span style="color: rgba(128, 0, 128, 1)">11</span><span style="color: rgba(0, 0, 0, 1)">* *+=+=+=+=* *** *+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+*/
</span><span style="color: rgba(128, 0, 128, 1)">12</span><span style="color: rgba(0, 0, 0, 1)"> #include &lt;stdio.h&gt;
</span><span style="color: rgba(128, 0, 128, 1)">13</span>
<span style="color: rgba(128, 0, 128, 1)">14</span> <span style="color: rgba(0, 0, 255, 1)">int</span> main(<span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> argc, char **argv)
</span><span style="color: rgba(128, 0, 128, 1)">15</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(128, 0, 128, 1)">16</span>   <span style="color: rgba(0, 0, 255, 1)">int</span> var1 = <span style="color: rgba(128, 0, 128, 1)">88</span><span style="color: rgba(0, 128, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">17</span>   <span style="color: rgba(0, 0, 255, 1)">int</span> var2 = <span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 128, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">18</span>   <span style="color: rgba(0, 0, 255, 1)">int</span> result = var1 + var2<span style="color: rgba(0, 128, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">19</span>   asm(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop</span><span style="color: rgba(128, 0, 0, 1)">"</span>)<span style="color: rgba(0, 128, 0, 1)">;</span>                                    
<span style="color: rgba(128, 0, 128, 1)">20</span>   printf(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">%d\n</span><span style="color: rgba(128, 0, 0, 1)">"</span>, result)<span style="color: rgba(0, 128, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">21</span>
<span style="color: rgba(128, 0, 128, 1)">22</span>   return <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 128, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">23</span> }</pre>
</div>
<p>&nbsp;</p>
<p>  上边代码中的第19行,直接调用了asm的汇编代码</p>
<p>  2、和C进行联动,使用C语言中的全局变量:testIn2.c</p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)"> //This is c program code!
</span><span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)"> /* *=+=+=+=+* *** *=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
</span><span style="color: rgba(128, 0, 128, 1)">3</span>   * <span style="color: rgba(0, 128, 128, 1)">文档信息:</span><span style="color: rgba(0, 0, 0, 1)"> *** :~/testIn2.c
</span><span style="color: rgba(128, 0, 128, 1)">4</span>   * <span style="color: rgba(0, 128, 128, 1)">版权声明:</span><span style="color: rgba(0, 0, 0, 1)"> *** :(魎魍魅魑)MIT
</span><span style="color: rgba(128, 0, 128, 1)">5</span>   * <span style="color: rgba(0, 128, 128, 1)">联络信箱:</span><span style="color: rgba(0, 0, 0, 1)"> *** :guochaoxxl@163.com
</span><span style="color: rgba(128, 0, 128, 1)">6</span>   * <span style="color: rgba(0, 128, 128, 1)">创建时间:</span> *** :2020<span style="color: rgba(0, 128, 128, 1)">年11月15日的下午03:</span><span style="color: rgba(128, 0, 128, 1)">40</span>
<span style="color: rgba(128, 0, 128, 1)">7</span>   * <span style="color: rgba(0, 128, 128, 1)">文档用途:</span><span style="color: rgba(0, 0, 0, 1)"> *** :数据结构与算法分析-c语言描述
</span><span style="color: rgba(128, 0, 128, 1)">8</span>   * <span style="color: rgba(0, 128, 128, 1)">作者信息:</span> *** :guochaoxxl(<span style="color: rgba(0, 128, 128, 1)">http:</span><span style="color: rgba(0, 0, 0, 1)">//cnblogs.com/guochaoxxl)
</span><span style="color: rgba(128, 0, 128, 1)">9</span>   * <span style="color: rgba(0, 128, 128, 1)">修订时间:</span> *** :2020年第45周 11月15日 星期日 <span style="color: rgba(0, 128, 128, 1)">下午03:</span><span style="color: rgba(128, 0, 128, 1)">40</span><span style="color: rgba(0, 0, 0, 1)"> (第320天)
</span><span style="color: rgba(128, 0, 128, 1)">10</span>   * <span style="color: rgba(0, 128, 128, 1)">文件描述:</span><span style="color: rgba(0, 0, 0, 1)"> *** :自行添加
</span><span style="color: rgba(128, 0, 128, 1)">11</span><span style="color: rgba(0, 0, 0, 1)">* *+=+=+=+=* *** *+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+*/
</span><span style="color: rgba(128, 0, 128, 1)">12</span><span style="color: rgba(0, 0, 0, 1)"> #include &lt;stdio.h&gt;
</span><span style="color: rgba(128, 0, 128, 1)">13</span>
<span style="color: rgba(128, 0, 128, 1)">14</span> <span style="color: rgba(0, 0, 255, 1)">int</span> var1 = <span style="color: rgba(128, 0, 128, 1)">6</span><span style="color: rgba(0, 128, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">15</span> <span style="color: rgba(0, 0, 255, 1)">int</span> var2 = <span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 128, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">16</span> <span style="color: rgba(0, 0, 255, 1)">int</span> result<span style="color: rgba(0, 128, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">17</span>
<span style="color: rgba(128, 0, 128, 1)">18</span> <span style="color: rgba(0, 0, 255, 1)">int</span> main(<span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> argc, char **argv)
</span><span style="color: rgba(128, 0, 128, 1)">19</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(128, 0, 128, 1)">20</span>   asm(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">pusha\n\t</span><span style="color: rgba(128, 0, 0, 1)">"</span>
<span style="color: rgba(128, 0, 128, 1)">21</span>             <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">movl var1, %eax\n\t</span><span style="color: rgba(128, 0, 0, 1)">"</span>
<span style="color: rgba(128, 0, 128, 1)">22</span>             <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">movl var2, %ebx\n\t</span><span style="color: rgba(128, 0, 0, 1)">"</span>
<span style="color: rgba(128, 0, 128, 1)">23</span>             <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">add %ebx, %eax\n\t</span><span style="color: rgba(128, 0, 0, 1)">"</span>
<span style="color: rgba(128, 0, 128, 1)">24</span>             <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">movl %eax, result\n\t</span><span style="color: rgba(128, 0, 0, 1)">"</span>
<span style="color: rgba(128, 0, 128, 1)">25</span>             <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">popa</span><span style="color: rgba(128, 0, 0, 1)">"</span>)<span style="color: rgba(0, 128, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">26</span>   printf(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">%d\n</span><span style="color: rgba(128, 0, 0, 1)">"</span>, result)<span style="color: rgba(0, 128, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">27</span>                                                                                       
<span style="color: rgba(128, 0, 128, 1)">28</span>   return <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 128, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">29</span> }</pre>
</div>
<p>  编译和运行:</p>
<p>  <span style="font-family: monospace"><span style="color: rgba(0, 0, 0, 1)">gcc -m32 testIn2.c -o <span style="font-family: monospace"><span style="color: rgba(0, 0, 0, 1)">testIn2</span></span><br></span></span></p>
<p><span style="font-family: monospace"><span style="color: rgba(0, 0, 0, 1)">  8</span></span></p>
<p><span style="font-family: monospace"><span style="color: rgba(0, 0, 0, 1)">  其实就是第8行代码作用而已。</span></span></p>
<p>&nbsp;</p>
<p>&nbsp;  3、和C进行联动,将C语言中的局部变量和寄存器绑定:testIn3.c,格式如下:</p>
<p>  asm(“汇编代码”: 输出位置 : 输入位置 : 改动的寄存器列表)其中内联中的寄存器需要使用%%eax表示寄存器eax内容</p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)"> //This is c program code!
</span><span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)"> /* *=+=+=+=+* *** *=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
</span><span style="color: rgba(128, 0, 128, 1)">3</span>   * <span style="color: rgba(0, 128, 128, 1)">文档信息:</span><span style="color: rgba(0, 0, 0, 1)"> *** :~/testIn3.c
</span><span style="color: rgba(128, 0, 128, 1)">4</span>   * <span style="color: rgba(0, 128, 128, 1)">版权声明:</span><span style="color: rgba(0, 0, 0, 1)"> *** :(魎魍魅魑)MIT
</span><span style="color: rgba(128, 0, 128, 1)">5</span>   * <span style="color: rgba(0, 128, 128, 1)">联络信箱:</span><span style="color: rgba(0, 0, 0, 1)"> *** :guochaoxxl@163.com
</span><span style="color: rgba(128, 0, 128, 1)">6</span>   * <span style="color: rgba(0, 128, 128, 1)">创建时间:</span> *** :2020<span style="color: rgba(0, 128, 128, 1)">年11月15日的下午03:</span><span style="color: rgba(128, 0, 128, 1)">51</span>
<span style="color: rgba(128, 0, 128, 1)">7</span>   * <span style="color: rgba(0, 128, 128, 1)">文档用途:</span><span style="color: rgba(0, 0, 0, 1)"> *** :数据结构与算法分析-c语言描述
</span><span style="color: rgba(128, 0, 128, 1)">8</span>   * <span style="color: rgba(0, 128, 128, 1)">作者信息:</span> *** :guochaoxxl(<span style="color: rgba(0, 128, 128, 1)">http:</span><span style="color: rgba(0, 0, 0, 1)">//cnblogs.com/guochaoxxl)
</span><span style="color: rgba(128, 0, 128, 1)">9</span>   * <span style="color: rgba(0, 128, 128, 1)">修订时间:</span> *** :2020年第45周 11月15日 星期日 <span style="color: rgba(0, 128, 128, 1)">下午03:</span><span style="color: rgba(128, 0, 128, 1)">51</span><span style="color: rgba(0, 0, 0, 1)"> (第320天)
</span><span style="color: rgba(128, 0, 128, 1)">10</span>   * <span style="color: rgba(0, 128, 128, 1)">文件描述:</span><span style="color: rgba(0, 0, 0, 1)"> *** :自行添加
</span><span style="color: rgba(128, 0, 128, 1)">11</span><span style="color: rgba(0, 0, 0, 1)">* *+=+=+=+=* *** *+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+*/
</span><span style="color: rgba(128, 0, 128, 1)">12</span><span style="color: rgba(0, 0, 0, 1)"> #include &lt;stdio.h&gt;
</span><span style="color: rgba(128, 0, 128, 1)">13</span>
<span style="color: rgba(128, 0, 128, 1)">14</span> <span style="color: rgba(0, 0, 255, 1)">int</span> main(<span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> argc, char **argv)
</span><span style="color: rgba(128, 0, 128, 1)">15</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(128, 0, 128, 1)">16</span>   <span style="color: rgba(0, 0, 255, 1)">int</span> var1 = <span style="color: rgba(128, 0, 128, 1)">6</span><span style="color: rgba(0, 128, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">17</span>   <span style="color: rgba(0, 0, 255, 1)">int</span> var2 = <span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 128, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">18</span>   <span style="color: rgba(0, 0, 255, 1)">int</span> result<span style="color: rgba(0, 128, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">19</span><span style="color: rgba(0, 0, 0, 1)">   asm volatile(
</span><span style="color: rgba(128, 0, 128, 1)">20</span>             <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">add %%ebx, %%eax\n\t</span><span style="color: rgba(128, 0, 0, 1)">"</span>
<span style="color: rgba(128, 0, 128, 1)">21</span>             <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">movl $2, %%ecx\n\t</span><span style="color: rgba(128, 0, 0, 1)">"</span>
<span style="color: rgba(128, 0, 128, 1)">22</span>             <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">mul %%ecx\n\t</span><span style="color: rgba(128, 0, 0, 1)">"</span>
<span style="color: rgba(128, 0, 128, 1)">23</span>             <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">movl %%eax, %%edx</span><span style="color: rgba(128, 0, 0, 1)">"</span>
<span style="color: rgba(128, 0, 128, 1)">24</span>             : <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">=d</span><span style="color: rgba(128, 0, 0, 1)">"</span>(result):<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">a</span><span style="color: rgba(128, 0, 0, 1)">"</span>(var1), <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">b</span><span style="color: rgba(128, 0, 0, 1)">"</span>(var2): <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">%ecx</span><span style="color: rgba(128, 0, 0, 1)">"</span>
<span style="color: rgba(128, 0, 128, 1)">25</span>             )<span style="color: rgba(0, 128, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">26</span>   printf(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">%d\n</span><span style="color: rgba(128, 0, 0, 1)">"</span>, result)<span style="color: rgba(0, 128, 0, 1)">;</span>                                                            
<span style="color: rgba(128, 0, 128, 1)">27</span>
<span style="color: rgba(128, 0, 128, 1)">28</span>   return <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 128, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">29</span> }</pre>
</div>
<p>  编译和运行:</p>
<p>  <span style="font-family: monospace"><span style="color: rgba(0, 0, 0, 1)">gcc -m32 testsIn3.c -o testsIn3<br></span></span></p>
<p><span style="font-family: monospace"><span style="color: rgba(0, 0, 0, 1)">  16</span></span></p>
<p><span style="font-family: monospace"><span style="color: rgba(0, 0, 0, 1)">  4、和C进行联动,采用编译器在编译中将C语言中的局部变量和寄存器通过占位符实现动态的绑定:testIn4.c,格式如下:</span></span></p>
<p>  asm(“汇编代码”: 输出位置 : 输入位置 : 改动的寄存器列表)其中内联中的寄存器需要使用%%eax表示寄存器eax内容,将上一步中的寄存器直接用r占位即可</p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)"> //This is c program code!
</span><span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)"> /* *=+=+=+=+* *** *=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
</span><span style="color: rgba(128, 0, 128, 1)">3</span>   * <span style="color: rgba(0, 128, 128, 1)">文档信息:</span><span style="color: rgba(0, 0, 0, 1)"> *** :~/testIn4.c
</span><span style="color: rgba(128, 0, 128, 1)">4</span>   * <span style="color: rgba(0, 128, 128, 1)">版权声明:</span><span style="color: rgba(0, 0, 0, 1)"> *** :(魎魍魅魑)MIT
</span><span style="color: rgba(128, 0, 128, 1)">5</span>   * <span style="color: rgba(0, 128, 128, 1)">联络信箱:</span><span style="color: rgba(0, 0, 0, 1)"> *** :guochaoxxl@163.com
</span><span style="color: rgba(128, 0, 128, 1)">6</span>   * <span style="color: rgba(0, 128, 128, 1)">创建时间:</span> *** :2020<span style="color: rgba(0, 128, 128, 1)">年11月15日的下午04:</span><span style="color: rgba(128, 0, 128, 1)">17</span>
<span style="color: rgba(128, 0, 128, 1)">7</span>   * <span style="color: rgba(0, 128, 128, 1)">文档用途:</span><span style="color: rgba(0, 0, 0, 1)"> *** :数据结构与算法分析-c语言描述
</span><span style="color: rgba(128, 0, 128, 1)">8</span>   * <span style="color: rgba(0, 128, 128, 1)">作者信息:</span> *** :guochaoxxl(<span style="color: rgba(0, 128, 128, 1)">http:</span><span style="color: rgba(0, 0, 0, 1)">//cnblogs.com/guochaoxxl)
</span><span style="color: rgba(128, 0, 128, 1)">9</span>   * <span style="color: rgba(0, 128, 128, 1)">修订时间:</span> *** :2020年第45周 11月15日 星期日 <span style="color: rgba(0, 128, 128, 1)">下午04:</span><span style="color: rgba(128, 0, 128, 1)">17</span><span style="color: rgba(0, 0, 0, 1)"> (第320天)
</span><span style="color: rgba(128, 0, 128, 1)">10</span>   * <span style="color: rgba(0, 128, 128, 1)">文件描述:</span><span style="color: rgba(0, 0, 0, 1)"> *** :自行添加
</span><span style="color: rgba(128, 0, 128, 1)">11</span><span style="color: rgba(0, 0, 0, 1)">* *+=+=+=+=* *** *+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+*/
</span><span style="color: rgba(128, 0, 128, 1)">12</span><span style="color: rgba(0, 0, 0, 1)"> #include &lt;stdio.h&gt;
</span><span style="color: rgba(128, 0, 128, 1)">13</span>
<span style="color: rgba(128, 0, 128, 1)">14</span> <span style="color: rgba(0, 0, 255, 1)">int</span> main(<span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> argc, char **argv)
</span><span style="color: rgba(128, 0, 128, 1)">15</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(128, 0, 128, 1)">16</span>   <span style="color: rgba(0, 0, 255, 1)">int</span> var1 = <span style="color: rgba(128, 0, 128, 1)">6</span><span style="color: rgba(0, 128, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">17</span>   <span style="color: rgba(0, 0, 255, 1)">int</span> var2 = <span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 128, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">18</span>   <span style="color: rgba(0, 0, 255, 1)">int</span> result<span style="color: rgba(0, 128, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">19</span>
<span style="color: rgba(128, 0, 128, 1)">20</span><span style="color: rgba(0, 0, 0, 1)">   asm volatile(
</span><span style="color: rgba(128, 0, 128, 1)">21</span>             <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">add %1, %2\n\t</span><span style="color: rgba(128, 0, 0, 1)">"</span>
<span style="color: rgba(128, 0, 128, 1)">22</span>             <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">movl %2, %0\n\t</span><span style="color: rgba(128, 0, 0, 1)">"</span>
<span style="color: rgba(128, 0, 128, 1)">23</span>             :<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">=r</span><span style="color: rgba(128, 0, 0, 1)">"</span>(result):<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">r</span><span style="color: rgba(128, 0, 0, 1)">"</span>(var1), <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">r</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">(var2)                                          
</span><span style="color: rgba(128, 0, 128, 1)">24</span>             )<span style="color: rgba(0, 128, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">25</span>   printf(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">%d\n</span><span style="color: rgba(128, 0, 0, 1)">"</span>, result)<span style="color: rgba(0, 128, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">26</span>
<span style="color: rgba(128, 0, 128, 1)">27</span>   return <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 128, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">28</span> }</pre>
</div>
<p><span style="font-family: monospace"><span style="color: rgba(0, 0, 0, 1)">  编译和运行:</span></span></p>
<p>  <span style="font-family: monospace"><span style="color: rgba(0, 0, 0, 1)">gcc -m32 testsIn4.c -o testsIn4<br></span></span></p>
<p>&nbsp;</p>
<p><span style="font-family: monospace"><span style="color: rgba(0, 0, 0, 1)">  8</span></span></p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)"> //This is c program code!
</span><span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)"> /* *=+=+=+=+* *** *=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
</span><span style="color: rgba(128, 0, 128, 1)">3</span>   * <span style="color: rgba(0, 128, 128, 1)">文档信息:</span><span style="color: rgba(0, 0, 0, 1)"> *** :~/testIn4_1.c
</span><span style="color: rgba(128, 0, 128, 1)">4</span>   * <span style="color: rgba(0, 128, 128, 1)">版权声明:</span><span style="color: rgba(0, 0, 0, 1)"> *** :(魎魍魅魑)MIT
</span><span style="color: rgba(128, 0, 128, 1)">5</span>   * <span style="color: rgba(0, 128, 128, 1)">联络信箱:</span><span style="color: rgba(0, 0, 0, 1)"> *** :guochaoxxl@163.com
</span><span style="color: rgba(128, 0, 128, 1)">6</span>   * <span style="color: rgba(0, 128, 128, 1)">创建时间:</span> *** :2020<span style="color: rgba(0, 128, 128, 1)">年11月15日的下午04:</span><span style="color: rgba(128, 0, 128, 1)">39</span>
<span style="color: rgba(128, 0, 128, 1)">7</span>   * <span style="color: rgba(0, 128, 128, 1)">文档用途:</span><span style="color: rgba(0, 0, 0, 1)"> *** :数据结构与算法分析-c语言描述
</span><span style="color: rgba(128, 0, 128, 1)">8</span>   * <span style="color: rgba(0, 128, 128, 1)">作者信息:</span> *** :guochaoxxl(<span style="color: rgba(0, 128, 128, 1)">http:</span><span style="color: rgba(0, 0, 0, 1)">//cnblogs.com/guochaoxxl)
</span><span style="color: rgba(128, 0, 128, 1)">9</span>   * <span style="color: rgba(0, 128, 128, 1)">修订时间:</span> *** :2020年第45周 11月15日 星期日 <span style="color: rgba(0, 128, 128, 1)">下午04:</span><span style="color: rgba(128, 0, 128, 1)">39</span><span style="color: rgba(0, 0, 0, 1)"> (第320天)
</span><span style="color: rgba(128, 0, 128, 1)">10</span>   * <span style="color: rgba(0, 128, 128, 1)">文件描述:</span><span style="color: rgba(0, 0, 0, 1)"> *** :自行添加
</span><span style="color: rgba(128, 0, 128, 1)">11</span><span style="color: rgba(0, 0, 0, 1)">* *+=+=+=+=* *** *+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+*/
</span><span style="color: rgba(128, 0, 128, 1)">12</span><span style="color: rgba(0, 0, 0, 1)"> #include &lt;stdio.h&gt;
</span><span style="color: rgba(128, 0, 128, 1)">13</span>
<span style="color: rgba(128, 0, 128, 1)">14</span> <span style="color: rgba(0, 0, 255, 1)">int</span> main(<span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> argc, char **argv)
</span><span style="color: rgba(128, 0, 128, 1)">15</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(128, 0, 128, 1)">16</span>   <span style="color: rgba(0, 0, 255, 1)">int</span> var1 = <span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 128, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">17</span>   <span style="color: rgba(0, 0, 255, 1)">int</span> var2 = <span style="color: rgba(128, 0, 128, 1)">6</span><span style="color: rgba(0, 128, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">18</span>   //<span style="color: rgba(0, 0, 255, 1)">int</span> result<span style="color: rgba(0, 128, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">19</span>
<span style="color: rgba(128, 0, 128, 1)">20</span><span style="color: rgba(0, 0, 0, 1)">   asm volatile(
</span><span style="color: rgba(128, 0, 128, 1)">21</span>             <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">subl %1, %0\n\t</span><span style="color: rgba(128, 0, 0, 1)">"</span>
<span style="color: rgba(128, 0, 128, 1)">22</span>             :<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">=r</span><span style="color: rgba(128, 0, 0, 1)">"</span>(var2):<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">r</span><span style="color: rgba(128, 0, 0, 1)">"</span>(var1), <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">0</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">(var2)
</span><span style="color: rgba(128, 0, 128, 1)">23</span>             )<span style="color: rgba(0, 128, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">24</span>   printf(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">%d\n</span><span style="color: rgba(128, 0, 0, 1)">"</span>, var2)<span style="color: rgba(0, 128, 0, 1)">;</span>                                                               
<span style="color: rgba(128, 0, 128, 1)">25</span>
<span style="color: rgba(128, 0, 128, 1)">26</span>   return <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 128, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">27</span><span style="color: rgba(0, 0, 0, 1)"> }
~    </span></pre>
</div>
<p>&nbsp;</p>
<p>  第22行的0表示var2两次需指定为一个寄存器,否则,多次使用就变为多个寄存器<span style="font-family: monospace"><span style="color: rgba(0, 0, 0, 1)">  </span></span></p>
<p>&nbsp;</p>
<p>&nbsp;  <span style="font-family: monospace"><span style="font-family: monospace"><span style="color: rgba(0, 0, 0, 1)">5、和C进行联动,采用编译器在编译中将C语言中的局部变量和寄存器通过占位符实现动态的绑定,通过标识变量:testIn5.c,格式如下:</span></span></span></p>
<p>  asm(“汇编代码”: [标识]输出位置 : [标识]输入位置 : 改动的寄存器列表)r占位符保留</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)"> //This is c program code!
</span><span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)"> /* *=+=+=+=+* *** *=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
</span><span style="color: rgba(128, 0, 128, 1)">3</span>   * <span style="color: rgba(0, 128, 128, 1)">文档信息:</span><span style="color: rgba(0, 0, 0, 1)"> *** :~/testIn5.c
</span><span style="color: rgba(128, 0, 128, 1)">4</span>   * <span style="color: rgba(0, 128, 128, 1)">版权声明:</span><span style="color: rgba(0, 0, 0, 1)"> *** :(魎魍魅魑)MIT
</span><span style="color: rgba(128, 0, 128, 1)">5</span>   * <span style="color: rgba(0, 128, 128, 1)">联络信箱:</span><span style="color: rgba(0, 0, 0, 1)"> *** :guochaoxxl@163.com
</span><span style="color: rgba(128, 0, 128, 1)">6</span>   * <span style="color: rgba(0, 128, 128, 1)">创建时间:</span> *** :2020<span style="color: rgba(0, 128, 128, 1)">年11月15日的下午04:</span><span style="color: rgba(128, 0, 128, 1)">51</span>
<span style="color: rgba(128, 0, 128, 1)">7</span>   * <span style="color: rgba(0, 128, 128, 1)">文档用途:</span><span style="color: rgba(0, 0, 0, 1)"> *** :数据结构与算法分析-c语言描述
</span><span style="color: rgba(128, 0, 128, 1)">8</span>   * <span style="color: rgba(0, 128, 128, 1)">作者信息:</span> *** :guochaoxxl(<span style="color: rgba(0, 128, 128, 1)">http:</span><span style="color: rgba(0, 0, 0, 1)">//cnblogs.com/guochaoxxl)
</span><span style="color: rgba(128, 0, 128, 1)">9</span>   * <span style="color: rgba(0, 128, 128, 1)">修订时间:</span> *** :2020年第45周 11月15日 星期日 <span style="color: rgba(0, 128, 128, 1)">下午04:</span><span style="color: rgba(128, 0, 128, 1)">51</span><span style="color: rgba(0, 0, 0, 1)"> (第320天)
</span><span style="color: rgba(128, 0, 128, 1)">10</span>   * <span style="color: rgba(0, 128, 128, 1)">文件描述:</span><span style="color: rgba(0, 0, 0, 1)"> *** :自行添加
</span><span style="color: rgba(128, 0, 128, 1)">11</span><span style="color: rgba(0, 0, 0, 1)">* *+=+=+=+=* *** *+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+*/
</span><span style="color: rgba(128, 0, 128, 1)">12</span><span style="color: rgba(0, 0, 0, 1)"> #include &lt;stdio.h&gt;
</span><span style="color: rgba(128, 0, 128, 1)">13</span>
<span style="color: rgba(128, 0, 128, 1)">14</span> <span style="color: rgba(0, 0, 255, 1)">int</span> main(<span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> argc, char **argv)
</span><span style="color: rgba(128, 0, 128, 1)">15</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(128, 0, 128, 1)">16</span>   <span style="color: rgba(0, 0, 255, 1)">int</span> var1 = <span style="color: rgba(128, 0, 128, 1)">6</span><span style="color: rgba(0, 128, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">17</span>   <span style="color: rgba(0, 0, 255, 1)">int</span> var2 = <span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 128, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">18</span>
<span style="color: rgba(128, 0, 128, 1)">19</span><span style="color: rgba(0, 0, 0, 1)">   asm volatile(
</span><span style="color: rgba(128, 0, 128, 1)">20</span>             <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">add %, %\n\t</span><span style="color: rgba(128, 0, 0, 1)">"</span>                                             
<span style="color: rgba(128, 0, 128, 1)">21</span>             :<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">=r</span><span style="color: rgba(128, 0, 0, 1)">"</span>(var2):<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">r</span><span style="color: rgba(128, 0, 0, 1)">"</span>(var1), <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">0</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">(var2)
</span><span style="color: rgba(128, 0, 128, 1)">22</span>             )<span style="color: rgba(0, 128, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">23</span>   printf(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">%d\n</span><span style="color: rgba(128, 0, 0, 1)">"</span>, var2)<span style="color: rgba(0, 128, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">24</span>
<span style="color: rgba(128, 0, 128, 1)">25</span>   return <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 128, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">26</span> }</pre>
</div>
<p>  <span style="font-family: monospace"><span style="font-family: monospace"><span style="color: rgba(0, 0, 0, 1)">6、和C进行联动,编译器在编译中不优化,加上volatile或者__asm__volatile__:testIn6.c</span></span></span></p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)"> //This is c program code!
</span><span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)"> /* *=+=+=+=+* *** *=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
</span><span style="color: rgba(128, 0, 128, 1)">3</span>   * <span style="color: rgba(0, 128, 128, 1)">文档信息:</span><span style="color: rgba(0, 0, 0, 1)"> *** :~/testIn6.c
</span><span style="color: rgba(128, 0, 128, 1)">4</span>   * <span style="color: rgba(0, 128, 128, 1)">版权声明:</span><span style="color: rgba(0, 0, 0, 1)"> *** :(魎魍魅魑)MIT
</span><span style="color: rgba(128, 0, 128, 1)">5</span>   * <span style="color: rgba(0, 128, 128, 1)">联络信箱:</span><span style="color: rgba(0, 0, 0, 1)"> *** :guochaoxxl@163.com
</span><span style="color: rgba(128, 0, 128, 1)">6</span>   * <span style="color: rgba(0, 128, 128, 1)">创建时间:</span> *** :2020<span style="color: rgba(0, 128, 128, 1)">年11月15日的下午05:</span><span style="color: rgba(128, 0, 128, 1)">05</span>
<span style="color: rgba(128, 0, 128, 1)">7</span>   * <span style="color: rgba(0, 128, 128, 1)">文档用途:</span><span style="color: rgba(0, 0, 0, 1)"> *** :数据结构与算法分析-c语言描述
</span><span style="color: rgba(128, 0, 128, 1)">8</span>   * <span style="color: rgba(0, 128, 128, 1)">作者信息:</span> *** :guochaoxxl(<span style="color: rgba(0, 128, 128, 1)">http:</span><span style="color: rgba(0, 0, 0, 1)">//cnblogs.com/guochaoxxl)
</span><span style="color: rgba(128, 0, 128, 1)">9</span>   * <span style="color: rgba(0, 128, 128, 1)">修订时间:</span> *** :2020年第45周 11月15日 星期日 <span style="color: rgba(0, 128, 128, 1)">下午05:</span><span style="color: rgba(128, 0, 128, 1)">05</span><span style="color: rgba(0, 0, 0, 1)"> (第320天)
</span><span style="color: rgba(128, 0, 128, 1)">10</span>   * <span style="color: rgba(0, 128, 128, 1)">文件描述:</span><span style="color: rgba(0, 0, 0, 1)"> *** :自行添加
</span><span style="color: rgba(128, 0, 128, 1)">11</span><span style="color: rgba(0, 0, 0, 1)">* *+=+=+=+=* *** *+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+*/
</span><span style="color: rgba(128, 0, 128, 1)">12</span><span style="color: rgba(0, 0, 0, 1)"> #include &lt;stdio.h&gt;
</span><span style="color: rgba(128, 0, 128, 1)">13</span>
<span style="color: rgba(128, 0, 128, 1)">14</span> <span style="color: rgba(0, 0, 255, 1)">int</span> var3 = <span style="color: rgba(128, 0, 128, 1)">10</span><span style="color: rgba(0, 128, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">15</span> <span style="color: rgba(0, 0, 255, 1)">int</span> var4 = <span style="color: rgba(128, 0, 128, 1)">20</span><span style="color: rgba(0, 128, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">16</span> <span style="color: rgba(0, 0, 255, 1)">int</span> addResult<span style="color: rgba(0, 128, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">17</span>
<span style="color: rgba(128, 0, 128, 1)">18</span> <span style="color: rgba(0, 0, 255, 1)">int</span> main(<span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> argc, char **argv)
</span><span style="color: rgba(128, 0, 128, 1)">19</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(128, 0, 128, 1)">20</span>   <span style="color: rgba(0, 0, 255, 1)">int</span> var1 = <span style="color: rgba(128, 0, 128, 1)">6</span><span style="color: rgba(0, 128, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">21</span>   <span style="color: rgba(0, 0, 255, 1)">int</span> var2 = <span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 128, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">22</span>   <span style="color: rgba(0, 0, 255, 1)">int</span> result = var1 * var2<span style="color: rgba(0, 128, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">23</span>   printf(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">%d\n</span><span style="color: rgba(128, 0, 0, 1)">"</span>, result)<span style="color: rgba(0, 128, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">24</span>
<span style="color: rgba(128, 0, 128, 1)">25</span><span style="color: rgba(0, 0, 0, 1)">   __asm__ __volatile__(                                                               
</span><span style="color: rgba(128, 0, 128, 1)">26</span>             <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">pusha\n\t</span><span style="color: rgba(128, 0, 0, 1)">"</span>
<span style="color: rgba(128, 0, 128, 1)">27</span>             <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">movl var3, %eax\n\t</span><span style="color: rgba(128, 0, 0, 1)">"</span>
<span style="color: rgba(128, 0, 128, 1)">28</span>             <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">movl var4, %ebx\n\t</span><span style="color: rgba(128, 0, 0, 1)">"</span>
<span style="color: rgba(128, 0, 128, 1)">29</span>             <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">add %ebx, %eax\n\t</span><span style="color: rgba(128, 0, 0, 1)">"</span>
<span style="color: rgba(128, 0, 128, 1)">30</span>             <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">movl %eax, addResult\n\t</span><span style="color: rgba(128, 0, 0, 1)">"</span>
<span style="color: rgba(128, 0, 128, 1)">31</span>             <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">popa</span><span style="color: rgba(128, 0, 0, 1)">"</span>
<span style="color: rgba(128, 0, 128, 1)">32</span>             )<span style="color: rgba(0, 128, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">33</span>   printf(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">%d\n</span><span style="color: rgba(128, 0, 0, 1)">"</span>, addResult)<span style="color: rgba(0, 128, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">34</span>
<span style="color: rgba(128, 0, 128, 1)">35</span>   return <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 128, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">36</span> }</pre>
</div>
<p>&nbsp;</p>
<p>  代码异常容易,不多啰嗦了。</p>
<p>&nbsp;</p>
<p><span style="font-family: monospace"><span style="color: rgba(0, 0, 0, 1)"><br></span></span> </p>

</div>
<div id="MySignature" role="contentinfo">
             人就像是被蒙着眼推磨的驴子,生活就像一条鞭子;当鞭子抽到你背上时,你就只能一直往前走,虽然连你也不知道要走到什么时候为止,便一直这么坚持着。<br><br>
来源:https://www.cnblogs.com/guochaoxxl/p/13976137.html
頁: [1]
查看完整版本: linux下汇编语言汇总