问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

汇编中好像很多常用的跳转指令都判断的ZF零标准位?

发布网友 发布时间:2022-05-01 09:02

我来回答

1个回答

热心网友 时间:2022-06-27 04:00

跳转判定不是光判定的ZF的
关于条件跳转指令,特别是用于有符号数比较的Jcc指令,网上的文章多有讹误,这次彻底的厘清一下,以备忘。在介绍条件跳转指令之前,介绍一下EFLAGS寄存器中的状态标志(Status Flag)是有必要的,Jcc中的cc(condition code)即表示需要测试的状态标志或状态标志组合。EFLAGS寄存器的低16位在8086时代叫做FLAGS寄存器,又称作程序状态字PSW(Program Status Word)。

这些状态标志指示了算术运算指令的运算结果,分别介绍如下:CF(bit 0) 进位标志 – 当运算结果的最高有效位发生进位或借位的时候该标志位置位,否则复位。这个标志指示了无符号数运算的溢出条件。它同样用于多精度算术运算。PF(bit 2) 奇偶标志 – 运算结果的最低有效字节如果包含偶数个1,那么该标志置位,否则复位。请注意是最低有效字节而不是整个运算结果。AF(bit) 调整标志 – 如果运算结果的位3发生进位或借位,则该标志位置位,否则复位。这个标志位使用在BCD(binary-coded decimal)码的算术运算中。ZF(bit 6) 零标志 – 如果运算结果是零则置位,否则复位。SF(bit 7) 符号标志 – 与运算结果的最高有效位相同。OF(bit 11) 溢出标志 – 如果运算结果对于一个正数来说太大或者对于一个负数来说太小而不能用与目标操作数等位宽的数来表示的时候,也就是超出了n位(目的操作数的位数)有符号数表示的范围则置位,否则复位。这个标志指示了有符号数算术运算的溢出条件。这些状态标志允许仅使用一个算术运算操作为三种不同的数据类型产生结果,这三种数据类型为无符号整数,有符号整数和BCD编码的整数。如果将运算结果看做一个无符号数,那么CF标志指示运算超出范围,有进位或借位发生。如果将运算结果看做一个有符号数,那么OF标志指示有进位或借位发生。如果将运算结果看做一个BCD数,那么AF标志指示有进位或借位发生。也就是说,对于整数运算来说,CPU才不管操作数是什么类型的,操作数是什么类型由你说了算,只要测试不同的标志位就可以了。下面三张表详细列出了各种Jcc指令

JC rel8/16/32如果进位标志置位则短/近/近跳转CF=1JNC rel8/16/32如果进位标志复位则短/近/近跳转CF=0JP/JPE rel8/16/32如果奇偶标志置位则短/近/近跳转PF=1JNP,JPO rel8/16/32如果奇偶标志复位则短/近/近跳转PF=0JZ rel8/16/32如果零标志置位则短/近/近跳转ZF=1JNZ rel8/16/32如果零标志复位则短/近/近跳转ZF=0JS rel8/16/32如果符号标志置位则短/近/近跳转SF=1JNS rel8/16/32如果符号标志复位则短/近/近跳转SF=0JO rel8/16/32如果零溢出志置位则短/近/近跳转OF=1JNO rel8/16/32如果零溢出志复位则短/近/近跳转OF=0

JA/JNBE rel8/16/32如果高于/不低于或等于则短/近/近跳转CF=0 and ZF=0 JAE/JNB rel8/16/32如果高于或等于/不低于则短/近/近跳转CF=0JB/JNAE rel8/16/32如果低于/不高于或等于则短/近/近跳转CF=1JBE/JNA rel8/16/32如果低于或等于/不高于则短/近/近跳转CF=1 or ZF=1JE rel8/16/32如果等于则短/近/近跳转ZF=1JNE rel8/16/32如果不等于则短/近/近跳转ZF=0

JG/JNLE rel8/16/32如果大于/不小于或等于则短/近/近跳转ZF=0 and SF=OFJGE/JNL rel8/16/32如果大于或等于/不小于则短/近/近跳转SF=OFJL/JNGE rel8/16/32如果小于/不大于或等于则短/近/近跳转SF!=OFJLE/JNG rel8/16/32如果小于或等于/不大于则短/近/近跳转ZF=1 or SF!=OFJE rel8/16/32如果等于则短/近/近跳转ZF=1JNE rel8/16/32如果不等于则短/近/近跳转ZF=0表注释:64位模式下,不支持所有Jcc rel16格式的近跳转指令。对于有符号数的比较使用术语小于”less”和大于”greater”,而对于无符号数的比较使用术语低于”below”和高于”above”前两张表记载的指令比较直白、简单,不做过多介绍。下面重点介绍一下有符号数比较的Jcc指令。只要解释清楚了JG和JL,其他就很简单了。n位二进制数来表示有符号数,可以表示的范围为
-2^(n-1) =< X <= 2^(n-1)-1
如果n取8,可表示的有符号数范围为-128 ~ +127因为Jcc指令是根据CMP指令的结果来测试跳转条件的,所以我们只考察有符号数的减法就可以了。两个相同符号的数相减永远不会溢出,也就是溢出的前提条件是两个数的符号不同。
先考虑一个正数X减一个负数Y的情况,这种情况下结果肯定是一个正数,如果结果超出了n位有符号数可以标示的范围,则溢出OF=1,而一个正数太大了,实际上它就变成了负数,也就是SF=1。其实只是当作有符号数和无符号数解释的问题,数的内在表示是没有变的。
如果没有溢出,则OF=0,因为结果是一个正数,所以SF=0
那么
X>Y OF==SF 再考虑一个负数减一个正数的情况,这种情况下结果肯定是一个负数,如果结果超出了n位有符号数可以标示的范围,则溢出OF=1,而一个负数太小了,则发生了反绕,变成了正数,也就是SF=0
如果结果没有溢出,则OF=0,因为结果是一个负数,所以SF=1
那么
X<Y OF!=SF如果两个数同号,那么不会溢出OF=0,如果X>Y则结果是正的SF=0,如果X<Y则结果是负的,SF=1
那么
X>Y OF==SF
X<Y OF!=SF所以两个有符号数XY相减X-Y,最后总结如下:
X>Y也就是JG成立的条件为OF==SF
X<Y也就是JL成立的条件为OF!=SF其他指令不过是再加上对ZF的判断而已,比较简单。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
发摅解释 摅的组词有哪些 摅字能组哪些词 检测电脑配置的软件电脑硬件检测权威软件有哪几个 查看电脑参数的软件什么软件可以全面检测显示出电脑硬件参数数据_百度... 有没有可以查自己电脑配置的软件啊??? 芯片程序解密哪家好 ...文章怎么突然间阅读量开始大减,从几百掉到个位数。 百家号怎么才个位数播放量?个位数播放量怎么算? 保本收益投资合法吗 运动手环真的能减肥么 为什么支付宝提取公积金显示封存原因不为与单位终止劳动关系,与销户原因不符? 有一个游戏是一个男孩找不同颜色的钥匙,和找血瓶,这是啥游戏 一个正方体方块人上高楼,找不同颜色的钥匙开不同颜色的门? 戴运动手环真的能帮你减肥吗 有微信朋友圈里一个游戏是找不同颜色的叫什么 我媳妇买房,我在支付宝上能解约公积金吗? 为什么多数人都购买小米运动手环,这个手环怎么样? 支付宝里的自助申请公积金贷款怎么取消? 现在学校体育课佩戴运动手环普遍吗?校方通过什么技术来采集手环的数据呢? 厦门公积金在支付宝终止合同会怎么样? 学校体育课的运动手环,哪个公司做得好 PPAP一般包含什么内容啊? 大家看看这封口机后面哪是管封口的?不封口!热封不吹热封! 请问单片机中psw各个位的状态的判断标准时由哪个寄存器的的进位溢出来决定的啊?谢谢 操作系统什么是psw,它的作用 物业有权收取装修保证金和装修管理费吗? 租户搞装修需要和物业签合同吗 交装修押金的时候和物业签了三个月装修时间,如果三个月没装修完,物业会罚我钱吗? 和物业签订装修管理合同,是说装修方是个人好呢还是公司好呢?是不是说公司说好可以省一些钱呢? 请问百度地图标注,并保存数据到自己数据库,需要收费吗?如何操作数 有个找不同颜色可以测试色弱的软件叫什么 怎么在网页里添加百度地图,用来显示具体位置? 救命啊~~!Trojan.PSW .杀不掉呀 篮球的那个手环在哪里有的卖啊? 帮我看看QQ木马Win32.qqpsw.bploginctrl.d 离职多年,想要在支付宝,闽政通提取公积金,显示签约银行卡失败是什么原因呢? 大家来找茬,对比左右两图,有几对颜色不同的色块? 孩子六岁之前,家长想让孩子智商高应该抓住哪个敏感期? 不同颜色菊花的别名 支付宝公积金提取在哪里签约? 怎么样和女孩子聊天知道她喜欢什么东西,颜色这些 支付宝里提取公积金,离职的不能取吗 支付宝上住房公积金租房提取签约后还要去当地办手续吗?还是等几天就会有钱到账?绑卡了 找不同,找出以下图片不同之处 仙剑3蜀山故道一开机关的顺序错了后怎么恢复 关于短视频的业务合作公司有推荐吗?? 毕业后如何修第二学位? 第二学位第一次没被录取,下山可以申请吗 什么情况可以申请双学位……急