巍小山 發表於 2020-1-19 11:21:45

汇编语言中cmp指令用法笔记与总结

<p>本文实例讲述了汇编语言中cmp指令用法。分享给大家供大家参考,具体如下:</p>
<p>cmp是比较指令,cmp的功能是相当于减法指令,只是不保存结果.cmp指令执行后,将对标志寄存器产生影响.其他相关指令通过识别这些被影响的标志寄存器来得知比较结果.</p>
<p><strong>cmp指令格式:</strong> cmp&nbsp; 操作对象1,操作对象2</p>
<p>功能: 计算操作对象1 - 操作对象2 但不保存结果,仅仅根据计算结果对标志寄存器进行设置.比如cmp ax,ax&nbsp; 是做ax - ax 的运算,结果为0,但并不在ax中保存,仅影响flag的相关各位.</p>
<p>指令执行后: zf = 1,pf = 1,sf = 0,cf = 0,of = 0;</p>
<p>下面的指令:</p>
<div class="jb51code">
<pre class="brush:bash;">
mov ax,8

mov bx,3

mov ax,bx

</pre>
</div>
<p>执行后: (ax)= 8,zf = 0,pf = 1,sf = 0, cf = 0, of = 0</p>
<p>如果 ax = bx 则 ax - bx = 0 ,所以 : zf = 1</p>
<p>如果 ax != bx 则ax - bx != 0,所以 : zf = 0</p>
<p>如果ax &lt; bx 则ax - bx 将产生错位,所以 : cf = 1</p>
<p>如果 ax &gt;= bx 则 ax - bx 将不必借位,所以 : cf = 0</p>
<p>如果ax &gt; bx 则 ax - bx 既不必借位,结果又不为0, 所以 : cf = 0 并且 zf = 0</p>
<p>如果 ax &lt;= bx 则ax - bx 既可能借位,结果可能为0,所以 :&nbsp; cf = 1 或 zf =1</p>
<p><strong>检测比较结果的条件转移指令</strong></p>
<p>je&nbsp;&nbsp;&nbsp;&nbsp; 等于则转移&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; zf=1</p>
<p>jne&nbsp;&nbsp; 不等于则转移&nbsp;&nbsp;&nbsp;&nbsp; zf=0</p>
<p>jb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 低于则转移&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cf=1</p>
<p>jnb&nbsp;&nbsp;&nbsp; 不低于则转移&nbsp;&nbsp;&nbsp; cf=0</p>
<p>ja&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 高于则转移&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cf=0且zf=0</p>
<p>jna&nbsp;&nbsp;&nbsp;&nbsp; 不高于则转移&nbsp;&nbsp;&nbsp; cf=1或zf=1</p>
<p>e : equal</p>
<p>ne : not equal</p>
<p>b: below</p>
<p>nb : not below</p>
<p>a : above</p>
<p>na : not above</p>
<p>编程: 统计data段中数值小于8的字节的个数,用ax保存统计结果</p>
<div class="jb51code">
<pre class="brush:bash;">
    mov ax,data

    mov ds,ax

    mov ax,0                ;初始化累加器

    mov bx,0                ;ds:bx指向第一个字节

    mov cx,8

s : cmp byte ptr , 8       ;和8进行比较

   jnb next               ;如果不小于8转到next,继续循环

   inc ax                   ;如果小于8就将计数值加1

next:inc bx

    loop s

</pre>
</div>
<p>程序执行后: ax = 2</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>详解汇编语言MOV指令</li><li>汇编语言mov指令及基本用法</li><li>汇编语言乘指令 MUL、IMUL的具体使用</li><li>详解汇编语言各种指令的解释与用法</li><li>汇编语言指令大全 X86和X87汇编指令大全(带注释)</li><li>汇编语言中move指令的使用</li></ul>
                            </div>

                        </div>
                        <!--endmain-->
頁: [1]
查看完整版本: 汇编语言中cmp指令用法笔记与总结