缘来的原来 發表於 2022-5-25 20:32:00

汇编语言程序设计(十)call和ret指令

<p></p><div class="toc"><div class="toc-container-header">目录</div><ul><li>引言</li><li>ret和retf指令<ul><li>ret指令</li><li>retf指令</li></ul></li><li>call指令<ul><li>用法:call 标号</li><li>call far ptr 标号</li><li>call 16位寄存器</li><li>转移地址在内存中call指令<ul><li>call word ptr 内存地址单元</li><li>call dword ptr 内存地址单元</li></ul></li></ul></li><li>mul指令</li><li>call与ret联合使用<ul><li>批量数据的传递</li></ul></li><li>寄存器冲突的问题</li></ul></div><p></p>
<h1 id="引言">引言</h1>
<ul>
<li>call和ret都是转移指令,它们都修改IP,或者同时修改CS和IP</li>
</ul>
<h1 id="ret和retf指令">ret和retf指令</h1>
<ul>
<li>ret和retf都是利用栈中数据来重新填充IP(CS)。<br>
<img src="https://img2022.cnblogs.com/blog/2773665/202205/2773665-20220525194640258-1843135987.png"><img src="https://img2022.cnblogs.com/blog/2773665/202205/2773665-20220525194025873-1888879757.png"><img src="https://img2022.cnblogs.com/blog/2773665/202205/2773665-20220525194452407-2073418987.png"><img src="https://img2022.cnblogs.com/blog/2773665/202205/2773665-20220525195126532-808801550.png"><img src="https://img2022.cnblogs.com/blog/2773665/202205/2773665-20220525195602617-397879897.png"><img src="https://img2022.cnblogs.com/blog/2773665/202205/2773665-20220525200008792-1294545899.png"><img src="https://img2022.cnblogs.com/blog/2773665/202205/2773665-20220525200233771-610985842.png"><img src="https://img2022.cnblogs.com/blog/2773665/202205/2773665-20220525200351359-2115414521.png"><img src="https://img2022.cnblogs.com/blog/2773665/202205/2773665-20220525201403484-1445231465.png"><img src="https://img2022.cnblogs.com/blog/2773665/202205/2773665-20220525202319095-161414264.png"><img src="" alt="" loading="lazy"></li>
</ul>
<h2 id="批量数据的传递">批量数据的传递</h2>
<ul>
<li>如果子程序只有少量参数需要传递,那么用寄存器来传递即可,但是如果由很多个参数呢?返回值也有可能很多个?在这种时候,需要将批量数据放到内存中,然后将它们所在内存空间的首地址放在寄存器中,传递给需要的子程序,对于返回值也可以用这种方法。</li>
<li>除了寄存器,内存传递参数外,还有一种通用的方法,即使用栈来传递参数。</li>
</ul>
<h1 id="寄存器冲突的问题">寄存器冲突的问题</h1>
<ul>
<li>不看了</li>
</ul><br><br>
来源:https://www.cnblogs.com/chkplusplus/p/16310719.html
頁: [1]
查看完整版本: 汇编语言程序设计(十)call和ret指令