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

相关文章

C# 预处理指令(# 指令)的具体使用

《C#预处理指令(#指令)的具体使用》本文主要介绍了C#预处理指令(#指令)的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录1、预处理指令的本质2、条件编译指令2.1 #define 和 #undef2.2 #if, #el

Java JDK Validation 注解解析与使用方法验证

《JavaJDKValidation注解解析与使用方法验证》JakartaValidation提供了一种声明式、标准化的方式来验证Java对象,与框架无关,可以方便地集成到各种Java应用中,... 目录核心概念1. 主要注解基本约束注解其他常用注解2. 核心接口使用方法1. 基本使用添加依赖 (Maven

Java Docx4j类库简介及使用示例详解

《JavaDocx4j类库简介及使用示例详解》Docx4j是一个强大而灵活的Java库,非常适合需要自动化生成、处理、转换MicrosoftOffice文档的服务器端或后端应用,本文给大家介绍Jav... 目录1.简介2.安装与依赖3.基础用法示例3.1 创建一个新 DOCX 并添加内容3.2 读取一个已存

python库pydantic数据验证和设置管理库的用途

《python库pydantic数据验证和设置管理库的用途》pydantic是一个用于数据验证和设置管理的Python库,它主要利用Python类型注解来定义数据模型的结构和验证规则,本文给大家介绍p... 目录主要特点和用途:Field数值验证参数总结pydantic 是一个让你能够 confidentl

Java中最全最基础的IO流概述和简介案例分析

《Java中最全最基础的IO流概述和简介案例分析》JavaIO流用于程序与外部设备的数据交互,分为字节流(InputStream/OutputStream)和字符流(Reader/Writer),处理... 目录IO流简介IO是什么应用场景IO流的分类流的超类类型字节文件流应用简介核心API文件输出流应用文

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

Java实现远程执行Shell指令

《Java实现远程执行Shell指令》文章介绍使用JSch在SpringBoot项目中实现远程Shell操作,涵盖环境配置、依赖引入及工具类编写,详解分号和双与号执行多指令的区别... 目录软硬件环境说明编写执行Shell指令的工具类总结jsch(Java Secure Channel)是SSH2的一个纯J

Java Stream 并行流简介、使用与注意事项小结

《JavaStream并行流简介、使用与注意事项小结》Java8并行流基于StreamAPI,利用多核CPU提升计算密集型任务效率,但需注意线程安全、顺序不确定及线程池管理,可通过自定义线程池与C... 目录1. 并行流简介​特点:​2. 并行流的简单使用​示例:并行流的基本使用​3. 配合自定义线程池​示

PostgreSQL简介及实战应用

《PostgreSQL简介及实战应用》PostgreSQL是一种功能强大的开源关系型数据库管理系统,以其稳定性、高性能、扩展性和复杂查询能力在众多项目中得到广泛应用,本文将从基础概念讲起,逐步深入到高... 目录前言1. PostgreSQL基础1.1 PostgreSQL简介1.2 基础语法1.3 数据库

Python库 Django 的简介、安装、用法入门教程

《Python库Django的简介、安装、用法入门教程》Django是Python最流行的Web框架之一,它帮助开发者快速、高效地构建功能强大的Web应用程序,接下来我们将从简介、安装到用法详解,... 目录一、Django 简介 二、Django 的安装教程 1. 创建虚拟环境2. 安装Django三、创