羽浪 發表於 2020-2-3 10:32:54

汇编语言乘指令 MUL、IMUL的具体使用

<p><strong>MUL: 无符号乘</strong></p>
<p>==================================================</p>
<p>;影响 OF、CF 标志位<br />
;指令格式:<br />
;MUL r/m&nbsp; ;参数是乘数</p>
<p>;如果参数是 r8/m8,&nbsp;&nbsp; 将把&nbsp; AL 做乘数, 结果放在 AX<br />
;如果参数是 r16/m16, 将把 AX 做乘数, 结果放在 EAX<br />
;如果参数是 r32/m32, 将把 EAX 做乘数, 结果放在 EDX:EAX<br />
当乘积的高半部分(AH、DX、EDX、RDX)中存有结果的有效数字,则CF=OF=1,否则CF=OF=0。<br />
=======================================================</p>
<p><strong>IMUL: 有符号乘</strong></p>
<p>=======================================================</p>
<p>;影响 OF、CF 标志位<br />
;第一种指令格式:<br />
;IMUL r/m&nbsp; ;单操作数</p>
<p>;如果参数是 r8/m8,&nbsp;&nbsp; 将把&nbsp; AL 做乘数, 结果放在 AX<br />
;如果参数是 r16/m16, 将把 AX 做乘数, 结果放在 EAX<br />
;如果参数是 r32/m32, 将把 EAX 做乘数, 结果放在 EDX:EAX</p>
<p>;以上这些都是和 MUL 一样的, 只是运算结果有时一样、有时不一样.</p>
<p>;IMUL 还有另外两种指令格式:<br />
;IMUL r16/r32, r16/r32/m16/m32/i&nbsp; ;双操作数, (1)*(2) -&gt; (1)<br />
;IMUL r16/r32, r16/r32/m16/m32, i ;三操作数, (2)*(3) -&gt; (1)</p>
<p>;其中常数 i 的位数可以 &lt;= 但不能 &gt; 其他操作数<br />
=======================================================</p>
<p><strong>简单应用</strong></p>
<p>=================================================</p>
<p>imul edx, ebx ;edx=edx*ebx<br />
imul edx, ebx,8 ;edx=ebx*8<br />
一,目的数为16或32寄存器<br />
二,操作数长度相等<br />
三,三操作数依次为目的,源,立即数<br />
四,与单操作数不溢出不同,可能产生溢出</p>
<p>就这样简要述说了...</p>
<p>以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持琼殿技术社区。</p>
                           
                            <div class="art_xg">
                              <b>您可能感兴趣的文章:</b><ul><li>常用的汇编指令与技巧(收藏)</li><li>汇编语言中mov和lea指令的区别详解</li><li>汇编语言lea指令使用方法解析</li><li>详解汇编语言 dup伪指令</li><li>汇编语言中cmp指令用法笔记与总结</li><li>详解汇编语言MOV指令</li><li>汇编语言mov指令及基本用法</li><li>详解汇编语言各种指令的解释与用法</li><li>汇编语言指令大全 X86和X87汇编指令大全(带注释)</li><li>汇编语言中move指令的使用</li></ul>
                            </div>

                        </div>
                        <!--endmain-->
頁: [1]
查看完整版本: 汇编语言乘指令 MUL、IMUL的具体使用