EFLAGS寄存器和jcc指令简介及验证

2024-02-13 00:30

本文主要是介绍EFLAGS寄存器和jcc指令简介及验证,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

EFLAGS寄存器和jcc指令简介及验证

  • EFLAGS寄存器简介

    image-20220627202813315

    如上图所示常用的标志位只有9个,9个标志位的含义如下

    1. CF标志位(第0位)又称进位标志位,指令操作使得目标操作数的最高位有进位时,进位标志位置为1,否则为0。表示无符号数运算结果是否超出范围,运算结果仍然正确

    2. PF标志位(第2位)又称奇偶标志位,指令操作是的目标操作数的低字节(最低的8个bit位)有偶数个1时,奇偶标志位置为1,否则为0

    3. AF标志位(第4位)又称辅助进位位,指令运算过程中,看最低的4位, 如果产生进位或者借位的时候,置1,否则置0

    4. ZF标志位(第6位)又称零标志位,指令运算产生的结果为0时,零标位位为1,否则为0(表示运算结果不为0)

    5. SF标志位(第7位)又称符号位,是指目标操作数高位的副本,也就是说目标最高位为1时,SF置为1,否则置为0

    6. TF标记位(第8位)又称单步位,当TF=1时,处理器每次只执行一条指令,即单步执行

    7. IF标志位(第9位)又称中断标志位,IF为1时可以响应外部的可屏蔽中断,为0时屏蔽外部的可屏蔽中断

    8. DF标志位(第10位)又称方向标志位,当使用std指令把DF置为1时,用某些指令使用esi或edi时,地址方向由高到底(递减),反之地址方向由低到高(递增

    9. OF标志位(第11位)又称溢出标志位,指令产生的结果超出了有符号目的数的范围时,溢出标记位置为1,否则为0,表示有符号数运算结果是否超出范围,运算结果已经不正确

image-20220627205625896

上图是Visual Studio中解析出来的EFLAGS寄存器中标志位的结果:

CY == CF (进位)

PE == PF(奇偶)

AC == AF(辅助进位)

ZR == ZF(零)

PL == SF(符号)

EI == IF(中断)

UP == DF(方向)

OV == OF(溢出)

  • jcc指令简介

助记符说明标志位/寄存器
JC进位跳转CF=1
JNC无进位跳转CF=0
JZ为零跳转ZF=1
JNZ非零跳转ZF=0
JO溢出跳转OF=1
JNO无溢出跳转OF=0
JS有符号跳转SF=1
JNS无符号跳转SF=0
JP偶校验跳转PF=1
JNP奇校验跳转PF=0
JE相等跳转(左值==右值)ZF=1
JNE不相等跳转(左值!=右值)ZF=0
JCXZCX=0跳转CX=0
JECXZECX=0跳转ECX=0
JRCXZRCX=0跳转RCX=0
JA无符号数大于跳转(leftOp>rightOp)CF=0且ZF=0
JNBE无符号数不小于等于(就是大于)跳转(leftOp>rightOp)CF=0且ZF=0
JAE无符号数大于或等于跳转(leftOp>=rightOp)CF=0&ZF=0或CF=0&ZF=1
JNB无符号数不小于跳转(leftOp>=rightOp)CF=0&ZF=0或CF=0&ZF=1
JB无符号数小于跳转(leftOp<rightOp)CF = 1
JNAE无符号数不大于等于(就是小于)跳转(leftOp<rightOp)CF = 1
JBE无符号数小于或等于跳转(leftOp<=rightOp)ZF = 1 或 CF = 1
JNA无符号数不大于跳转(leftOp<=rightOp)ZF = 1 或CF = 1
JG有符号数大于跳转(leftOp>rightOp)SF = OF 且 ZF =0
JNLE有符号数不小于等于(left

这篇关于EFLAGS寄存器和jcc指令简介及验证的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/704009

相关文章

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

业务协同平台--简介

一、使用场景         1.多个系统统一在业务协同平台定义协同策略,由业务协同平台代替人工完成一系列的单据录入         2.同时业务协同平台将执行任务推送给pda、pad等执行终端,通知各人员、设备进行作业执行         3.作业过程中,可设置完成时间预警、作业节点通知,时刻了解作业进程         4.做完再给你做过程分析,给出优化建议         就问你这一套下

C++ | Leetcode C++题解之第393题UTF-8编码验证

题目: 题解: class Solution {public:static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num &

C语言 | Leetcode C语言题解之第393题UTF-8编码验证

题目: 题解: static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num & MASK1) == 0) {return

容器编排平台Kubernetes简介

目录 什么是K8s 为什么需要K8s 什么是容器(Contianer) K8s能做什么? K8s的架构原理  控制平面(Control plane)         kube-apiserver         etcd         kube-scheduler         kube-controller-manager         cloud-controlle

工作常用指令与快捷键

Git提交代码 git fetch  git add .  git commit -m “desc”  git pull  git push Git查看当前分支 git symbolic-ref --short -q HEAD Git创建新的分支并切换 git checkout -b XXXXXXXXXXXXXX git push origin XXXXXXXXXXXXXX

easyui同时验证账户格式和ajax是否存在

accountName: {validator: function (value, param) {if (!/^[a-zA-Z][a-zA-Z0-9_]{3,15}$/i.test(value)) {$.fn.validatebox.defaults.rules.accountName.message = '账户名称不合法(字母开头,允许4-16字节,允许字母数字下划线)';return fal

easyui 验证下拉菜单select

validatebox.js中添加以下方法: selectRequired: {validator: function (value) {if (value == "" || value.indexOf('请选择') >= 0 || value.indexOf('全部') >= 0) {return false;}else {return true;}},message: '该下拉框为必选项'}