`
nannan408
  • 浏览: 1757828 次
  • 性别: 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.
分享到:
评论

相关推荐

    汇编语言程序设计.林邦杰.陈明

    6-2 改变标志的指令 6-3 条件转移指令 6-4 比较两个整数 6-5 无条件转移指令JMP 6-6 循环指令LOOP 6-7 选择结构 6-8 循环结构 课后习题 第7章 算术运算 7-1 定点数与浮点数 7-2 带符号及无符号整数 7-3 加法及减法 7...

    基于汇编语言实验(1-5)【100012346】

    理解指令执行与标志位改变之间的关系; 熟悉常用的 DOS 功能调用; 熟悉分支、循环程序的结构及控制方法,掌握分支、循环程序的调试方法; 加深对转移指令及一些常用的汇编指令的理解。 汇编语言课程实验二,帮助...

    汇编实验一实验报告.doc

    解释为什么标志位内容会有改变?另外,说明这段程序完成 什么任务? 答: (1)执行完指令: add ax,01f0后 结果为 100f0H 发生了进位,进位标志位发生改变,并且二进制的100f0H 中1 的个数为偶数,所以奇偶标志位发生...

    计算机系统基础第二次作业.doc

    计算机系统基础第二次作业 计算机系统基础第二次作业 3、对于以下AT&T格式汇编指令,根据操作数的长度确定对应指令助记符中的长度后缀, 并说明每个操作数的寻址方式。 (1)mov 8(%ebp, %ebx, 4), %ax (2)mov %al...

    8086寻址方式及指令系统

    15.“INC AL” 指令不影响标志位的 位。 16.若AL=11H,执行“NEG AL” 后,AL= 。 17.JMP指令的执行 PSW寄存器中的各位。 18.两个无符号数进行比较时,可以根据 标志位来判断大小。在编写程序时可使用 指令来...

    计算机系统基础第二次作业(1).doc

    计算机系统基础第二次作业 3、对于以下AT&T格式汇编指令,根据操作数的长度确定对应指令助记符中的长度后缀, 并说明每个操作数的寻址方式。 (1)mov 8(%ebp, %ebx, 4), %ax (2)mov %al, 12(%ebp) (3)add ( , %...

    01_汇编语言程序设计第一次实验题目1

    (3) 理解指令执行与标志位改变之间的关系 (2) 请事先指出执行指令后(AH)、标志位 SF、OF、CF、ZF的内容 (3) 记录上机执行后的结果,与(2)中

    单片机应用技术考试试题

    3、判断是否溢出时用PSW的( B )标志位,判断是否有进位时用PSW的( A )标志位。 A、CY B、OV C、P D、AC 4、当单片机从8155接口芯片内部RAM的20H单元中读取某一数据时,应使用(D )类指令。 A、 MOV A,20H B、...

    计算机系统结构试题集

    超标量处理机在每个时钟周期的一开始就同时发射多条指令,而超流水线处理机则要把一个时钟周期平均分成多个流水线周期,每个流水线周期发射一条指令; 34、设计指令系统在功能方面的基本要求: A.完整性,是指应该...

    微嵌实验1-实验报告.doc

    " " " " " " " " " " " " "一、实验目的 " " " " " " " " " " " " " " "熟悉并掌握常用ARM汇编指令 1. 熟悉并掌握"C+汇编"混合编程技术 2. 熟练使用ARM软件开发调试工具Keil 二、实验内容 1. 学习使用Keil开发工具 ...

    会计理论考试题

    C、CPU能接受的基本指令 D、接近自然语言的计算机指令 13.下列关于计算机病毒的说法中,正确的是 __A___ 。 A、计算机病毒通常是一段可运行的程序 B、反病毒软件可清除所有病毒 C、加装防病毒卡的微机不会感染病毒 D...

    补丁模块(带源码)InlinePatch,Hook,内存DLL注入等等

    下面这个模块是我使用易语言时写补丁最常用的一个模块(当然很多也是抄的),一开始我觉得bug肯定会很多,放出去肯定又会坑很多人,后来我发现坑坑更健康,当你明白一个东西的优缺点之后,你才会更好的选择你所需要...

    c语言编写单片机技巧

    而汇编语言,一条指令就对应一个机器码,每一步执行什幺动作都很清楚,并且程序大小和堆栈调用情况都容易控制,调试起来也比较方便。所以在单片机开发中,我们还是建议采用汇编语言比较好。 如果对单片机C语言有...

    微机实验报告.doc

    后面用重新修改了下这些字符 ,会显示"not Match" 2、调试程序过程中遇到的问题 对汇编认识停留在上课老师的文字表达,至于实际操作,可以说完全不懂,只能在实 验室里对着实验书一步步做下去,没遇到什么问题。...

    51单片机C语言编程基础及实例

    如果将一个 16 位二进数赋给一个 8 位的字节变量,则自动截断为低 8 位,而丢掉高 8 位。 ++var 表示对变量 var 先增一;var—表示对变量后减一。 x |= 0x0f;表示为 x = x | 0x0f; 高四位。 6. While( 1 ); 表示...

    基于AT89S52 单片的频率计

    片机的一切指令的执行都是建立在这个基础上的,晶振的提供的时钟频率越 高,那单片机的运行速度也就越快。MCS-51 一般晶振的选择范围为1~ 24MHz,但是单片机对时间的要求比较高,能够精确的定时一秒,所以也是为了 ...

    C语言FAQ 常见问题列表

    我们不知道 a[] 的哪一个分量会被改写,但 i 的确会增加 1, 对吗? o 4.9 ++i 和 i++ 有什么区别? o 4.10 如果我不使用表达式的值, 我应该用 ++i 或 i++ 来自增一个变量吗? o 4.11 为什么如下的代码 int a = ...

    语言程序设计课后习题答案

    2-18 编写一个程序,运行时提示输入一个数字,再把这个数字显示出来。 解: 源程序: #include &lt;iostream.h&gt; int main() { int i; cout 请输入一个数字:"; cin &gt;&gt; i; cout 您输入一个数字是" ; return 0; } 程序...

    ARM_Linux启动分析.pdf

    提取并分析核心启动参数(从环境变量中读取参数,设置相应标志位等待处理,(parse_options()) 控制台初始化(为输出信息而先于PCI初始化,console_init()) 剖析器数据结构初始化(prof_buffer和prof_len变量) ...

Global site tag (gtag.js) - Google Analytics