1个回答
展开全部
简单点说,所有的对操作数进行算术和逻辑运算的指令,都会根据运算结果修改ZF标志。
第一点:
大多数情况下,运算结果对ZF的修改,由结果是否为0决定。
若运算结果为0,则ZF=1;
若运算结果非0,则ZF=0.
举些例子吧:
加法指令,比如ADD, ADC, INC,等
减法指令,比如SUB, SBB, CMP, DEC, NEG, 等
逻辑运算指令,比如AND, TEST, OR, XOR, NOT等
逻辑移位指令,比如SHL, SHR, SAL, SAR, RCL, RCR等(ROL,ROR不会改变ZF,原因可自己分析)
调整指令,比如AAA, AAS,等
串指令中含有算术运算的那些,比如CMPS, SCAS等
控制转移指令中含有算术运算的,比如LOOP
第二点:
但是,也有一些指令,会改变ZF标志,但其结果具有不确定性,没有运算结果是否为0的意义。
比如乘法指令 MUL和IMUL, 除法指令DIV和IDIV等
改变标志寄存器内容的SAHF指令,堆栈操作中的POPF指令,也不具有运算结果的意义。
第一点:
大多数情况下,运算结果对ZF的修改,由结果是否为0决定。
若运算结果为0,则ZF=1;
若运算结果非0,则ZF=0.
举些例子吧:
加法指令,比如ADD, ADC, INC,等
减法指令,比如SUB, SBB, CMP, DEC, NEG, 等
逻辑运算指令,比如AND, TEST, OR, XOR, NOT等
逻辑移位指令,比如SHL, SHR, SAL, SAR, RCL, RCR等(ROL,ROR不会改变ZF,原因可自己分析)
调整指令,比如AAA, AAS,等
串指令中含有算术运算的那些,比如CMPS, SCAS等
控制转移指令中含有算术运算的,比如LOOP
第二点:
但是,也有一些指令,会改变ZF标志,但其结果具有不确定性,没有运算结果是否为0的意义。
比如乘法指令 MUL和IMUL, 除法指令DIV和IDIV等
改变标志寄存器内容的SAHF指令,堆栈操作中的POPF指令,也不具有运算结果的意义。
力控科技
2024-08-19 广告
2024-08-19 广告
ForceSCADA是力控科技信创产品的重要组成部分,具备完全自主知识产权,支持部署在Linux桌面版、服务器版、嵌入式等系统架构下。使用ForceSCADA可以搭建创新性高、扩展性佳、融合度强的SCADA平台,进而构建高效、智能化的监控中...
点击进入详情页
本回答由力控科技提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询