Intel有很多条件跳转指令,都是根据状态寄存器的值来裁决是否需要跳转的,一般的跳转,其判定原则是比较明显的,例如JZ就是ZF为1跳转,为0则不跳转。
而有符号数跳转命令JG,JL,JNG,JNL,JLE,JGE...的判定原则则不是那么的明显,先用JG作为例子分析之:

CMP a, b;        //假设a和b都是一个字节的参数
JG addr;

此时,JG跳转的条件是:SF==OF并且ZF==0
为何SF==OF且ZF==0表示a>b呢?
要求ZF==0好理解,如果ZF==1表示a==b,不满足a>b,故如果ZF必须是0
而要求SF==OF就不是那么的好理解了,需要分解成几个步骤来考虑:

  • 如果SF是0,表示a-b是一个正数,这间接说明了a>b,这很好理解
  • 如果SF是1,表示a-b是一个负数,似乎间接说明a<b,其实不然,我们需要考虑溢出的情况

可以看一下溢出(OF)或符号(SF)被置位的所有组合:

  1. a是正数,b是正数,a>b,此时a-b>0,SF==0, OF==0, SF==OF
  2. a是正数,b是负数,a>b,a-b=a-(-绝对值b)=a+绝对值b的结果小于等于127时,没有溢出,OF==0,此时SF==0,则SF==OF
  3. a是正数,b是负数,a>b,但a-b=a-(-绝对值b)=a+绝对值b的结果大于127时,导致上溢出(单字节最大的正数是127),同时导致SF==1(超过127时D7位为1),此时SF==OF
  4. a是0,b是-128,a>b,但a-b=0-(-128)=128,由于128>127,导致上溢出,同时导致SF==1(128即0x80,D7位为1),此时SF==OF
  5. a是负数,b是正数,a<b,a-b>=-128,没有导致下溢出,此时SF==1,OF==0,SF!=OF
  6. a是负数,b是正数,a<b,但a-b<-128导致下溢出(单字节最小的负数是-128),同时导致SF==0(0x80减正数导致结果小于0x80导致D7位为0),此时SF!=OF
  7. a是负数-128,b是0,a<b,a-b=-128-0=-128,此时没有下溢出,OF==0, SF==1,SF!=OF
  8. a是负数,b是负数,a>b则a-b>0且不可能溢出,则SF==0, OF==0,则SF==OF
  9. a是负数,b是负数,a<b,a-b<0且a-b>-128,此时没有溢出,则SF==1, OF==0, 则SF!=OF
  10. a是负数,b是负数,a<b,且a-b<-128,此时出现下溢出,则SF==0, OF==1,则SF!=OF

通过罗列所有的组合,不难观察到SF==OF的时候a>b,SF!=OF时,a<b(前提ZF==0,即a!=b,否则就变成了JGE)

JG跳转的判定与溢出状态位的关系 SF==OF amp;amp;amp;amp;amp;amp;amp;amp; ZF == 0相关推荐

  1. C++IO流,istream status(状态位),cout,cin,if(非fs)/while(cin)【C++IO流】(58)

    IO流 IO流类 Hierarchy(层次架构) 流类特性(从ios继承下来的共有的特性) 不可赋值和复制 缓冲 重载了<< >> istream status(状态位) 状态 ...

  2. DTC之DTC Status状态位

    部分转自//https://zhuanlan.zhihu.com/p/35371763## 一.UDS的DTC分类说明 PCBU:Powertrain(动力系统).chassis(地盘).body(车 ...

  3. 三极管的工作状态及电流关系

    三级管分为NPN和PNP两种: 一.先来说说三极管3种工作状态的电压关系 1.放大 发射结正偏.集电结反偏 (1)NPN UBE>0,UBC<0 (2)PNP UBE<0,UBC&g ...

  4. vue router.beforeEach跳转路由验证用户登录状态

    使用vue判断验证用户登录状态 导航钩子类似于生命周期钩子,包含路由进入前,进入后,更新时,退出前等几个周期,主要用于控制导航的前进后退或跳转等. 其中router.beforeEach就是路由进入前 ...

  5. kotlin_08:wlan直连/wifi_p2p的页面跳转以及实时获取连接状态

    前言之前一段时间一直加班,淦.五一,有点时间,简单的陈述一下,wlan直连页面的跳转和状态获取以及监听. 1. 先看效果 2. 布局文件 2.1 wifi_p2p_actvity_main.xml & ...

  6. 【Kotlin 协程】协程取消 ② ( CPU 密集型协程任务取消 | 使用 isActive 判定协程状态 | 使用 ensureActive 函数取消协程 | 使用 yield 函数取消协程 )

    文章目录 一.CPU 密集型协程任务取消 二.使用 isActive 判定当前 CPU 密集型协程任务是否取消 三.使用 ensureActive 自动处理协程退出 四.使用 yield 函数检查协程 ...

  7. 海康威视摄像头使用网线连网输入IP地址跳转显示“网站处于联机状态,但未对联机尝试做出反应”

    最近买了一个海康威视的4G枪机摄像头,买回来用4G网卡的话还需要交流量费,就想着连网线,但是产品说明上面并未教如何使用网线连接,于是找客服问了一下.客服给了两个链接. 一.使用网线连接前要先激活4G网 ...

  8. linux64 溢出,64位Linux下的栈溢出

    from:http://packetstormsecurity.com/files/download/127007/64bit-overflow.pdf 本文的目的是让大家学到64位缓冲区溢出的基础知 ...

  9. 【汇编语言】状态标志符(CF/OF/SF/ZF)在运算(ADD/SUB/ADC/SBB)过程中的响应变化

    目录 各类运算时状态标志的响应变化 标志符在各种`ADD`运算下的响应情况 标志符在各种`SUB`运算下的响应情况 借助标志符实现多位数之间运算 `ADC`(add with carry)带进位加法指 ...

最新文章

  1. iOS11正式推出,第一批AR应用上线App Store!
  2. window系统JAVA开发环境的搭建
  3. 【Leetcode】【Easy】Implement strStr()
  4. scrapy使用代理报错keyerror: proxy_爬虫Scrapy框架-Crawlspider链接提取器与规则解析器...
  5. flutter字体不跟随系统_Flutter自定义字体无法加载
  6. 富爸爸系列 -- 《财务自由》学习笔记之三
  7. springboot 手动提交事务_分布式事务开局第一篇,从数据库事务隔离级别说起
  8. backbone, AngularJS, EmberJS 简单比较
  9. 【渝粤题库】陕西师范大学500009 微机原理
  10. MVC 中使用uploadify上传图片遇到的蛋疼问题
  11. java中对象的克隆
  12. 使用frida获取微信EnMicroMsg.db 数据库密码
  13. 大众点评信息流基于文本生成的创意优化实践
  14. pmp是什么意思啊?
  15. SQL按每5分钟或者10分钟分组统计数据
  16. Android状态栏详解(全网最详)
  17. 查错集|No.1解决Undefined symbol xxx (referred from xxx.o)问题
  18. 树莓派(4B)DHT11实现温湿度获取+mysql数据库存储
  19. JS实现答题上一题下一题
  20. 各大厂800道Java后端经典面试题合集

热门文章

  1. FHS—文件系统层次结构标准
  2. 双层for循环优化版
  3. 计算机视觉中,目前有哪些经典的目标跟踪算法
  4. 教师管理助手平台有哪些功能特别好,使其非常受学生们喜欢
  5. bu薪水 华为cloud_华为CloudBU面试经验
  6. Drools规则引擎平台如何进行架构
  7. proxifier 注册码
  8. iptables 打开dns访问端口
  9. gpt linux双系统安装win7系统分区格式化,UEFI引导GPT安装64位Win7|Win7如何使用磁盘格式为GPT分区重装系统...
  10. matlab特征检测,sift特征检测的matlab程序实现