`
nannan408
  • 浏览: 1789070 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

哪些指令会改变汇编的标志位(再附个总结)

阅读更多
   这些书上都没有现成的答案,需要自己总结,感谢BEYOND0769,做出这么出色的总结。以下是会改变标志位的指令。
(1)
加法指令:ADD、ADC、INC、XADD除了INC不影响CF标志位外,都影响条件标志位。
                  CF、ZF、SF、OF
                  CF最高位是否有进位
                  DF若两个操作数符号相同而结果符号与之相反OF=1,否则OF=0.

减法指令:SUB、SBB、DEC、NEG、CMP、CMPXCHG、CMPXCHG8B
                  前六种除了DEC不影响CF标志外都影响标志位。CMPXHG8B只影响ZF。
                  CF说明无符号数相减的溢出,同时又确实是被减数最高有效位向高位的借位。
                  OF位则说明带符号数的溢出
                  无符号运算时,若减数>被减数,有借位CF=1,否则CF=0.
                  OF若两个数符号相反,而结果的符号与减数相同则OF=1.否则OF=0.

乘法指令:MUL、IMUL
                  MUL:如果乘积高一半为0,则CF和OF位均为0,否则CF和OF均为1.
                  IMUL:如果高一半是低一半符号的扩展,则CF位和OF位均为0,否则就均为1.

除法指令:DIV、IDIV   对所有条件位均无定义。

逻辑指令:AND、OR、NOT、XOR、TEST
                   NOT不允许使用立即数,其它4条指令除非源操作数是立即数,至少要有一个操作数必须存放在寄存器中。另一个操作数则可以使用任意寻址方式。
                   NOT不影响标志位,其余4种CF、OF、置0,AF无定义,SF、ZF、PF位看情况而定。

定位扫描指令:BSF正向位扫描、BSR反向位扫描
                          源操作数可以是除立即数以外的任一种寻址方式,目的操作数必须是寄存器,影响ZF位。

以上转自:http://zhidao.baidu.com/question/130863024.html
(2)再附上个跳转条件的总结:
Topic:     Jump   Conditions  


    Opcode             Mnemonic     Flags   Checked         Description
----------------------------------------------------------------------------

    size   0010       JB/JNAE       CF=1                           Jump   if   below/not   above   or
                                                                                  equal   (unsigned   comparisons)
    size   0011       JAE/JNB       CF=0                           Jump   if   above   or   equal/not
                                                                                  below   (unsigned   comparisons)
    size   0110       JBE/JNA       CF=1   or   ZF=1           Jump   if   below   or   equal/not
                                                                                  above   (unsigned   comparisons)
    size   0111       JA/JNBE       CF=0   and   ZF=0         Jump   if   above/not   below   or
                                                                                  equal   (unsigned   comparisons)
    size   0100       JE/JZ           ZF=1                           Jump   if   equal   (zero)
    size   0101       JNE/JNZ       ZF=0                           Jump   if   not   equal   (not   zero)
    size   1100       JL/JNGE       SF <> OF                       Jump   if   less/not   greater   or
                                                                                  equal   (signed   comparisons)
    size   1101       JGE/JNL       SF=OF                         Jump   if   greater   or   equal/not
                                                                                  less   (signed   comparisons)
    size   1110       JLE/JNG       ZF=1   or   SF <> OF       Jump   if   less   or   equal/not
                                                                                  greater   (signed   comparisons)
    size   1111       JG/JNLE       ZF=0   and   SF=OF       Jump   if   greater/not   less   or
                                                                                  equal   (signed   comparisons)
    size   1000       JS                 SF=1                           Jump   if   sign
    size   1001       JNS               SF=0                           Jump   if   not   sign
    size   0010       JC                 CF=1                           Jump   if   carry
    size   0011       JNC               CF=0                           Jump   if   not   carry
    size   0000       JO                 OF=1                           Jump   if   overflow
    size   0001       JNO               OF=0                           Jump   if   not   overflow
    size   1010       JP/JPE         PF=1                           Jump   if   parity/parity   even
    size   1011       JNP/JPO       PF=0                           Jump   if   no   parity/parity   odd
----------------------------------------------------------------------------

    NOTE:   The   size   bits   are   0111   for   short   jumps   or   1000   for   80386/486
                near   jumps.
分享到:
评论

相关推荐

    汇编指令查询器 汇编指令查询器

    例如,JMP指令可使程序执行跳转到另一个地址,而JZ则会在特定条件满足(即零标志被设置)时执行跳转。 5. **输入输出指令**:如IN(输入)、OUT(输出)等,用于与外部设备交换数据。IN指令可以将数据从I/O端口读入...

    STM8 指令合集_个人整理_STM8汇编指令整理_stm8s汇编指令_

    在学习STM8S汇编指令时,可以参考"STM8 指令合集2_个人整理.pdf"和"STM8 指令合集.pdf"这两个文档,它们提供了详细的指令列表,包括指令的格式、操作数、影响的标志位以及执行时间。通过这些文档,开发者可以迅速...

    汇编语言指令大全

    通过结合使用标志位和条件跳转指令,程序员可以在汇编程序中实现复杂的控制流逻辑。 ### 结论 汇编语言虽然相对复杂,但它为程序员提供了对硬件的直接控制能力,使其成为系统级编程和性能优化不可或缺的工具。掌握...

    汇编指令大全+很全的汇编指令.pdf

    《汇编指令大全+很全的汇编指令.pdf》是一份详尽的汇编语言学习资料,旨在帮助读者深入理解并快速掌握汇编语言的基本概念和指令系统。汇编语言,作为计算机科学的基础,是直接对应机器语言的一种编程语言,每一个...

    80X86汇编指令大全、汇编相关的指令

    **影响标志位:** `PUSH` 和 `POP` 指令不改变任何标志位。 **注意:** - `PUSH` 和 `POP` 指令只能操作寄存器或内存单元,不能直接作用于段寄存器。 - `PUSH` 指令会使得堆栈指针`SP`递减,而`POP` 指令则使得`SP`...

    ARM CORTEX-M0汇编指令汇总

    状态寄存器中的标志位可以记录指令执行后的结果,如零标志(Z)、负标志(N)、进位标志(C)和溢出标志(V)。这些状态可以被后续的条件分支指令所使用。 指令周期数(CPI)是指执行一条指令所需的时钟周期数。...

    assembly 汇编 王爽 jmp转移指令总结 思维导图

    "assembly 汇编 王爽 jmp 转移指令总结 思维导图"这个主题,是关于王爽老师的经典教材《汇编语言》中的一个重要部分,主要聚焦于汇编中的转移指令——jmp。在这里,我们将深入探讨jmp指令及其在程序控制流中的作用。...

    汇编指令大全,为了方便广大汇编爱好者

    为了方便广大汇编爱好者学习与应用,本文档汇编指令大全,对汇编语言的核心内容进行分类总结,详尽阐述了各类指令的格式、功能和应用场景。 首先,数据传输指令作为基础中的基础,负责在存储器和寄存器、寄存器和...

    汇编语言各种常见指令大全

    注意:逻辑指令可以改变标志位。 例如:AND AX, BX将寄存器AX和寄存器BX的值进行逻辑AND运算。 汇编语言中的六类常见指令都有其特点和注意事项,需要根据实际情况选择合适的指令来实现程序的功能。

    IBM-PC汇编语言指令集

    位运算指令AND、OR、XOR、NOT和TEST执行按位逻辑运算,其中NOT指令不改变任何标志位。移位指令如SHR、SHL、SAR和SAL用于改变操作数的二进制位位置,循环移位指令ROR、ROL、RCR和RCL则是循环版本的位移。 程序流程...

    arm汇编指令全集

    汇编语言由一系列指令组成,每个指令对应一个或多个机器周期的操作,如数据加载、存储、算术运算、逻辑运算和控制流程等。 一、指令分类: 1. 数据处理指令:包括加法、减法、乘法、除法、位操作等,如ADD、SUB、...

    汇编指令大全asmfun

    9. **比较和设置标志**:如CMP(比较)会设置标志寄存器中的状态标志,供后续的条件跳转指令使用。 10. **同步与互斥指令**:在多处理器或多线程环境中,汇编语言提供了诸如LOCK(锁定)这样的指令来保证数据的正确...

    汇编常用指令 指令大全

    在计算机科学领域,汇编语言是一种低级编程语言,它与机器语言紧密相关,每条汇编指令通常对应一个特定的机器码。汇编语言的使用虽然不如高级语言那么直观和便捷,但在某些特定场景下,如系统级编程、硬件控制、性能...

    汇编指令及说明举例

    5. **TEST**:测试指令,用于对两个操作数进行按位与运算,并更新标志位。 - 示例:`TEST AX, BX` 对AX与BX进行按位与运算,并更新标志位。 6. **SHL**:左移指令,用于将操作数向左移动指定位数。 - 示例:`SHL ...

    汇编指令大全 8086

    8086处理器是Intel公司设计的一种16位微处理器,它的指令集是汇编语言编程的基础。本文将详细讲解8086汇编指令大全,帮助读者深入理解这些基本操作。 1. 数据传送指令: - MOV:用于在寄存器和内存、寄存器和...

    汇编语言指令系统 PPT格式

    **数据传送指令** 是汇编语言中最基本的指令之一,它们负责在寄存器、存储单元和I/O端口之间传递数据和地址,并且不会改变标志位状态。 1. **通用数据传送指令**:最常用的指令是`MOV`,它的格式是 `MOV OPD, OPS`...

    汇编指令集。。。。。。。

    XCHG指令用于交换两个寄存器或一个寄存器与内存中的数据,不改变任何标志位。常见的形式有: - `XCHG r1, r2`:交换寄存器r1和r2的数据。 - `XCHG m, r`:交换内存m和寄存器r的数据。 #### PUSH & POP - 压栈与出栈...

    汇编指令的英文全称

    这些指令执行后会根据计算结果影响标志寄存器的标志位,如符号位(sf)、零标志位(zf)、溢出标志位(of)、进位标志位(cf)、奇偶标志位(pf)和辅助进位标志位(af)。 逻辑指令包括`and`(按位与)、`or`(按...

    80x86汇编指令大全总结珍藏版

    80x86汇编指令大全是对Intel 80x86系列处理器汇编语言编程的基础,涵盖了数据传输、算术运算、逻辑运算等多个方面的指令。以下是对这些指令的详细解释: 1. 数据传输指令: - `MOV`:基本的数据移动指令,用于将...

Global site tag (gtag.js) - Google Analytics