JG跳转的判定与溢出状态位的关系 SF==OF amp;amp;amp;amp;amp;amp;amp;amp; ZF == 0
Intel有很多条件跳转指令,都是根据状态寄存器的值来裁决是否需要跳转的,一般的跳转,其判定原则是比较明显的,例如JZ就是ZF为1跳转,为0则不跳转。
而有符号数跳转命令JG,JL,JNG,JNL,JLE,JGE...的判定原则则不是那么的明显,先用JG作为例子分析之:
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)被置位的所有组合:
- a是正数,b是正数,a>b,此时a-b>0,SF==0, OF==0, SF==OF
- a是正数,b是负数,a>b,a-b=a-(-绝对值b)=a+绝对值b的结果小于等于127时,没有溢出,OF==0,此时SF==0,则SF==OF
- a是正数,b是负数,a>b,但a-b=a-(-绝对值b)=a+绝对值b的结果大于127时,导致上溢出(单字节最大的正数是127),同时导致SF==1(超过127时D7位为1),此时SF==OF
- a是0,b是-128,a>b,但a-b=0-(-128)=128,由于128>127,导致上溢出,同时导致SF==1(128即0x80,D7位为1),此时SF==OF
- a是负数,b是正数,a<b,a-b>=-128,没有导致下溢出,此时SF==1,OF==0,SF!=OF
- a是负数,b是正数,a<b,但a-b<-128导致下溢出(单字节最小的负数是-128),同时导致SF==0(0x80减正数导致结果小于0x80导致D7位为0),此时SF!=OF
- a是负数-128,b是0,a<b,a-b=-128-0=-128,此时没有下溢出,OF==0, SF==1,SF!=OF
- a是负数,b是负数,a>b则a-b>0且不可能溢出,则SF==0, OF==0,则SF==OF
- a是负数,b是负数,a<b,a-b<0且a-b>-128,此时没有溢出,则SF==1, OF==0, 则SF!=OF
- 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相关推荐
- C++IO流,istream status(状态位),cout,cin,if(非fs)/while(cin)【C++IO流】(58)
IO流 IO流类 Hierarchy(层次架构) 流类特性(从ios继承下来的共有的特性) 不可赋值和复制 缓冲 重载了<< >> istream status(状态位) 状态 ...
- DTC之DTC Status状态位
部分转自//https://zhuanlan.zhihu.com/p/35371763## 一.UDS的DTC分类说明 PCBU:Powertrain(动力系统).chassis(地盘).body(车 ...
- 三极管的工作状态及电流关系
三级管分为NPN和PNP两种: 一.先来说说三极管3种工作状态的电压关系 1.放大 发射结正偏.集电结反偏 (1)NPN UBE>0,UBC<0 (2)PNP UBE<0,UBC&g ...
- vue router.beforeEach跳转路由验证用户登录状态
使用vue判断验证用户登录状态 导航钩子类似于生命周期钩子,包含路由进入前,进入后,更新时,退出前等几个周期,主要用于控制导航的前进后退或跳转等. 其中router.beforeEach就是路由进入前 ...
- kotlin_08:wlan直连/wifi_p2p的页面跳转以及实时获取连接状态
前言之前一段时间一直加班,淦.五一,有点时间,简单的陈述一下,wlan直连页面的跳转和状态获取以及监听. 1. 先看效果 2. 布局文件 2.1 wifi_p2p_actvity_main.xml & ...
- 【Kotlin 协程】协程取消 ② ( CPU 密集型协程任务取消 | 使用 isActive 判定协程状态 | 使用 ensureActive 函数取消协程 | 使用 yield 函数取消协程 )
文章目录 一.CPU 密集型协程任务取消 二.使用 isActive 判定当前 CPU 密集型协程任务是否取消 三.使用 ensureActive 自动处理协程退出 四.使用 yield 函数检查协程 ...
- 海康威视摄像头使用网线连网输入IP地址跳转显示“网站处于联机状态,但未对联机尝试做出反应”
最近买了一个海康威视的4G枪机摄像头,买回来用4G网卡的话还需要交流量费,就想着连网线,但是产品说明上面并未教如何使用网线连接,于是找客服问了一下.客服给了两个链接. 一.使用网线连接前要先激活4G网 ...
- linux64 溢出,64位Linux下的栈溢出
from:http://packetstormsecurity.com/files/download/127007/64bit-overflow.pdf 本文的目的是让大家学到64位缓冲区溢出的基础知 ...
- 【汇编语言】状态标志符(CF/OF/SF/ZF)在运算(ADD/SUB/ADC/SBB)过程中的响应变化
目录 各类运算时状态标志的响应变化 标志符在各种`ADD`运算下的响应情况 标志符在各种`SUB`运算下的响应情况 借助标志符实现多位数之间运算 `ADC`(add with carry)带进位加法指 ...
最新文章
- iOS11正式推出,第一批AR应用上线App Store!
- window系统JAVA开发环境的搭建
- 【Leetcode】【Easy】Implement strStr()
- scrapy使用代理报错keyerror: proxy_爬虫Scrapy框架-Crawlspider链接提取器与规则解析器...
- flutter字体不跟随系统_Flutter自定义字体无法加载
- 富爸爸系列 -- 《财务自由》学习笔记之三
- springboot 手动提交事务_分布式事务开局第一篇,从数据库事务隔离级别说起
- backbone, AngularJS, EmberJS 简单比较
- 【渝粤题库】陕西师范大学500009 微机原理
- MVC 中使用uploadify上传图片遇到的蛋疼问题
- java中对象的克隆
- 使用frida获取微信EnMicroMsg.db 数据库密码
- 大众点评信息流基于文本生成的创意优化实践
- pmp是什么意思啊?
- SQL按每5分钟或者10分钟分组统计数据
- Android状态栏详解(全网最详)
- 查错集|No.1解决Undefined symbol xxx (referred from xxx.o)问题
- 树莓派(4B)DHT11实现温湿度获取+mysql数据库存储
- JS实现答题上一题下一题
- 各大厂800道Java后端经典面试题合集
热门文章
- FHS—文件系统层次结构标准
- 双层for循环优化版
- 计算机视觉中,目前有哪些经典的目标跟踪算法
- 教师管理助手平台有哪些功能特别好,使其非常受学生们喜欢
- bu薪水 华为cloud_华为CloudBU面试经验
- Drools规则引擎平台如何进行架构
- proxifier 注册码
- iptables 打开dns访问端口
- gpt linux双系统安装win7系统分区格式化,UEFI引导GPT安装64位Win7|Win7如何使用磁盘格式为GPT分区重装系统...
- matlab特征检测,sift特征检测的matlab程序实现