day25.什么是JCC

2024-02-13 00:30
文章标签 day25 jcc

本文主要是介绍day25.什么是JCC,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

第25节:什么是JCC


这节讲一下·JCC指令,回想一下在之前的章节里讲过了,能改EIP的寄存器的一些指令为:JMP、CALL、RET 。这节讲JCC都是可以改EIP寄存器的。这个JCC指令更改寄存器不像JMP指令,这个JCC指令属于无条件修改EIP寄存器,但是JCC这个指令是否要改EIP这个寄存器,它需要看一些条件的,主要看标志寄存器的一些位。首先了解一下标志寄存器如下:



1)CF位
这个位主要是用来判断无符号数有没有溢出的情况,如果无符号数字发生进位或者借位的时候它的CF位则设为1,否则设置成0。
例子:
MOV AL,0xFE
ADD AL , 2


0xFE对应的二进制是 1111 1110 如果加2后,CF位变成1,此时进位了(有溢出)


例子:
MOV AL,0x7F
SUB AL , 0xFF


0x7F 对应的二进制是 0111 1111 如果减去 1111 1111 后CF位变成1,此时借位了(有溢出)


2)PF位
PF位通常叫做奇偶校验位,如果结果最低有效位数包含偶数,那么它的P位就会变成1,否则变成0。
例子:
113 二进制数是 0000 0001 0001 0011
将以上这个数放到AL寄存器里,让它在加上1,看PF位的结果为:0000 0001 0001 0100
PF位的结果是1,那说明是偶数。


PF位有什么用呢?用于数据的传输,可以判断数据在传输过程中有没有错误丢失,有没有被修改,那它是如何做到的呢?比如我要传输一个程序为(所有程序在计算机里都是二进制表示),11001110这个数据中包含5个1,在传输的过程中首先跟0进行检验(也就是跟0进行运算),如果是5个1的时候,P位就是0(奇数)。当传输到另一处是再做一次跟0运算,如果再次运算的P位结果是0。说明还是奇数,数据没有丢失或出错。


3)AF位
AF是辅助进位标志,这个标志一般在BCD中被使用,AF什么时候是1或者0呢?只有当下标为3的位发生进位或者借位的时候这个值才会被设置成1,其他情况都是0。


4)ZF位
若结果为0则将其设置成1,反之是0,这个指令经常与CMP或者TEST等指令一起用。
例子:
MOV EAX,100
MOV ECX,100
CMP EAX,ECX


CMP的指令和SUB指令有同样的效果,但是区别在CMP不进行运算,只改变标志位。


例子:
TEST EAX,EAX


TEST指令和AND指令有同样的效果,但是区别在TEST不进行运算,只改变标志位。


5)SF位
SF位只是看一下现在的符号是什么(是正的还是负的)0是正,反之则是1负。
例子:
MOV AL,0x7F
ADD AL , 2


SF通常用于表示正数还是负数。


6)OF位
OF用于有符号数加减运算所得结果是否溢出
可以这样理解:
无符号运算,是否溢出看CF位(CF是1则为溢出,否则没有溢出)
有符号运算,是否溢出看OF位(OF是1则为溢出,否则没有溢出)


例子:
MOV AL, 0x7F
ADD AL , 2


7)DF位
DF位时方向标志控制位主要控制的指令有(MOVS、CMPS、SCAS、LODS、STOS)。设置DF标志指令的自动递增是(从高向低地址方向,或者从低向高的方向)如果想改变DF标志位的值使用STD指令和CLD指令,STD是1,CLD是0。

这篇关于day25.什么是JCC的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

代码随想录打卡Day25

今天一整天都在教研室做实验,没时间刷题,就做了一题,剩下的明天补 491.递增子序列 这道题目和之前的子集问题很像,但是有一点要注意的,这个输入的数组不能进行排序,所以就不能沿用之前的去重逻辑,这道题要去重还是得借助额外的变量来维护元素使用情况,但是这题的used为集合,且不能为全局变量,只能为树层遍历前定义的一个局部变量,除了这个改动以外,其他地方都是高度相似的。 class Soluti

代码随想录刷题day25丨491.递增子序列 ,46.全排列 ,47.全排列 II

代码随想录刷题day25丨491.递增子序列 ,46.全排列 ,47.全排列 II 1.题目 1.1递增子序列 题目链接:491. 非递减子序列 - 力扣(LeetCode) 视频讲解:回溯算法精讲,树层去重与树枝去重 | LeetCode:491.递增子序列_哔哩哔哩_bilibili 文档讲解:https://programmercarl.com/0491.%E9%80%92%E

day25 Java基础——面向对象两万字详解!(纯干货)

day25 Java基础——面向对象两万字详解!(纯干货) 文章目录 day25 Java基础——面向对象两万字详解!(纯干货)1. 类与对象的关系类(Class)对象(Object)类与对象的关系示例 2. 创建与初始化对象创建对象初始化对象示例 3. 构造器详解构造器的定义构造器的特点构造器的使用示例实操 4. 创建对象内存分析内存分配内存布局初始化示例内存分析注意事项 5. 简单小结

每日5题Day25 - LeetCode 121 - 125

每一步向前都是向自己的梦想更近一步,坚持不懈,勇往直前! 第一题:121. 买卖股票的最佳时机 - 力扣(LeetCode) class Solution {public int maxProfit(int[] prices) {if(prices.length == 1){return 0;}//dp[0]代表最小值,dp[1]代表最大利润int[] dp = new int[2];dp

Day25 首页待办事项及备忘录添加功能

​ 本章节,完成首页待办事项及备忘录添加功能 一.修改待办事项和备忘录逻辑处理类,即AddMemoViewModel和AddTodoViewModel 在 AddMemoViewModel逻辑处理类中,为了支持与其关联的View视图文件的数据绑定,需要定义一个与视图文件相匹配的实体类 Model。这个Model将包含 View中需要展示和编辑的数据属性,以便在 ViewModel和Vi

day25回溯算法part02| 216.组合总和III 17.电话号码的字母组合

216.组合总和III 题目链接/文章讲解 | 视频讲解 class Solution {public:vector<vector<int>> result;vector<int> path;int sum;void backtracking(int n, int k, int startindex) {// int sum = accumulate(path.begin(), path

Wpf 使用 Prism 实战开发Day25

首页待办事项及备忘录添加功能 一.修改待办事项和备忘录逻辑处理类,即AddMemoViewModel和AddTodoViewModel  1.AddMemoViewModel 逻辑处理类,添加View视图数据要绑定的实体类 Model public class AddMemoViewModel :BindableBase,IDialogHostAware{public AddMemoV

Day25:Leetcode:669. 修剪二叉搜索树 + 108.将有序数组转换为二叉搜索树 + 538.把二叉搜索树转换为累加树

LeetCode:669. 修剪二叉搜索树 问题描述 解决方案: 1.思路 2.代码实现 class Solution {public TreeNode trimBST(TreeNode root, int low, int high) {if (root == null) {return null;}if (root.val < low) {return trimBST(root.ri

代码随想录算法训练营day25 | 669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树

669. 修剪二叉搜索树 看题解做出来的 class Solution:def trimBST(self, root: Optional[TreeNode], low: int, high: int) -> Optional[TreeNode]:if not root:return Noneif root.val < low:return self.trimBST(root.right, lo

day25-0 1矩阵

目录 题目描述: 示例 1: 示例 2: 解决方案: 函数代码: 题目描述: 给定一个由 0 和 1 组成的矩阵 mat ,请输出一个大小相同的矩阵,其中每一个格子是 mat 中对应位置元素到最近的 0 的距离,两个相邻元素间的距离为 1 。 示例 1: 输入:mat = [ [0,0,0],[0,1,0],[0,0,0]]输出: [[0,0,0],[0,1,0