汇编(六)JCC指令

2024-02-13 00:30
文章标签 指令 汇编 jcc

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

文章目录

  • 前言
  • 标志寄存器
    • 1、CF (bit 0)[Carry flag]
    • 2、PF(bit 2)[Parity flag]
    • 3、AF(bit 4)[Auxiliary Carry Flag]
    • 4、ZF(bit 6)[Zero flag]
      • 实例二:判断某个值是否为0
    • 5、SF(bit 7)[Sign flag]
    • 6、OF(bit 11)[Overflow flag]
  • JCC指令

前言

初学汇编的最后一篇。

后顾一下之前提到的修改EIP的方法,分为JMP、CALL和RET。

JCC指令也可以对EIP进行修改,在学习JCC指令之前,先了解一下标志寄存器。

标志寄存器

6Jxnat.png

1、CF (bit 0)[Carry flag]

​ (1)、 若算数操作产生的结果在最高有效位发生进位或错位则将其置1,反之清零。

​ (2)、通常用来指示无符号整形运算的溢出状态。

操作演示:

2、PF(bit 2)[Parity flag]

​ (1)如果结果的最低有效字节包含偶数个1位则该位置1,否则清零。

​ (2)PF可以用来奇偶校验检查:

需要传输“11001110”数据中包含5个“1”,所以其奇校验位为"0",同时将该数据传输给接受方,接收方收到数据后再一次奇偶校验,如果仍含有五个“1”接收方奇校验位也置为“0”,与发送方一致,表明传输过程没有出现错误。

操作演示:

3、AF(bit 4)[Auxiliary Carry Flag]

如果算数操作在结果的第3位发生进位或借位则将该标志置1,否则清0。

这个标志在BCD(binary-code decimal)算数运算中被使用。

4、ZF(bit 6)[Zero flag]

(1)若结果为0则将其置1,反之清零。

(2)经常与CMP或者TEST等指令一起使用;

实例一:判断两个值是否相等

MOV EAX,100MOV ECX,100
SUB EAX,ECX          //SUB有个弊端,会覆盖EAX中的值    
CMP EAX,ECX          //CMP指令相当于SUB指令,但是相减的结果并不保存在					  //第一个操作数中

实例二:判断某个值是否为0

AND EAX,EAX          //和上面一样,也会改变原来的值and与运算,将自己              		 //与自己与运算,如果结果为1,这说明为0TEST EAX,EAX         //等价于AND,但结果不会保存在第一个操作数中

ZF位会经常见到,一定要理解透彻。

5、SF(bit 7)[Sign flag]

​ 该标志被设置为有符号整型的最高有效位。0则结果为正,1为负。

实例:

MOV AL,0x7FADD AL,2MOV AL,0xFEADD AL,2

看不懂的,需要再回头看一看有符号位和无符号位的相关知识。

6、OF(bit 11)[Overflow flag]

​ 溢出标志OF用于反应有符号数加减运算结果是否溢出。

​ 如果是无符号数运算,是否溢出看CF位;

​ 如果是有符号数运算,是否溢出看OF位。

JCC指令

JCC指条件跳转指令,CC就是指条件码。

JCC指令中文含义英文原意检查符号位典型C应用
JZ/JE若为0则跳转;若相等则跳转jump if zero;jump if equalZF=1if (i == j);if (i == 0);
JNZ/JNE若不为0则跳转;若不相等则跳转jump if not zero;jump if not equalZF=0if (i != j);if (i != 0);
JS若为负则跳转jump if signSF=1if (i < 0);
JNS若为正则跳转jump if not signSF=0if (i > 0);
JP/JPE若1出现次数为偶数则跳转jump if Parity (Even)PF=1(null)
JNP/JPO若1出现次数为奇数则跳转jump if not parity (odd)PF=0(null)
JO若溢出则跳转jump if overflowOF=1(null)
JNO若无溢出则跳转jump if not overflowOF=0(null)
JC/JB/JNAE若进位则跳转;若低于则跳转;若不高于等于则跳转jump if carry;jump if below;jump if not above equalCF=1if (i < j);
JNC/JNB/JAE若无进位则跳转;若不低于则跳转;若高于等于则跳转;jump if not carry;jump if not below;jump if above equalCF=0if (i >= j);
JBE/JNA若低于等于则跳转;若不高于则跳转jump if below equal;jump if not aboveZF=1或CF=1if (i <= j);
JNBE/JA若不低于等于则跳转;若高于则跳转jump if not below equal;jump if aboveZF=0或CF=0if (i > j);
JL/JNGE若小于则跳转;若不大于等于则跳转jump if less;jump if not greater equalSF != OFif (si < sj);
JNL/JGE若不小于则跳转;若大于等于则跳转;jump if not less;jump if greater equalSF = OFif (si >= sj);
JLE/JNG若小于等于则跳转;若不大于则跳转jump if less equal;jump if not greaterZF != OF 或 ZF=1if (si <= sj);
JNLE/JG若不小于等于则跳转;若大于则跳转jump if not less equal;jump if greaterSF=0F 且 ZF=0if(si>sj)

这些指令不需要死记硬背,用到的时候查一下,用多了自然就记住了。

这篇关于汇编(六)JCC指令的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

这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

工作常用指令与快捷键

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

笔记整理—内核!启动!—kernel部分(2)从汇编阶段到start_kernel

kernel起始与ENTRY(stext),和uboot一样,都是从汇编阶段开始的,因为对于kernel而言,还没进行栈的维护,所以无法使用c语言。_HEAD定义了后面代码属于段名为.head .text的段。         内核起始部分代码被解压代码调用,前面关于uboot的文章中有提到过(eg:zImage)。uboot启动是无条件的,只要代码的位置对,上电就工作,kern

Android中如何实现adb向应用发送特定指令并接收返回

1 ADB发送命令给应用 1.1 发送自定义广播给系统或应用 adb shell am broadcast 是 Android Debug Bridge (ADB) 中用于向 Android 系统发送广播的命令。通过这个命令,开发者可以发送自定义广播给系统或应用,触发应用中的广播接收器(BroadcastReceiver)。广播机制是 Android 的一种组件通信方式,应用可以监听广播来执行

mysql中导入txt文件数据的操作指令

1 表tt的格式:    CREATE TABLE `tt` (   `ind` int NOT NULL auto_increment,   `name` char(100) default NULL,   PRIMARY KEY  (`ind`)  )   2 文件d.txt的内容示例:  1,a  2,b  3,c

可选择的反思指令微调

论文:https://arxiv.org/pdf/2402.10110代码:GitHub - tianyi-lab/Reflection_Tuning: [ACL'24] Selective Reflection-Tuning: Student-Selected Data Recycling for LLM Instruction-Tuning机构:马里兰大学, Adobe Research领

驱动安装注册表指令

HKCR: HKEY_CLASSES_ROOT HKCU: HKEY_CURRENT_USER HKLM: HKEY_LOCAL_MACHINE HKU: HEKY_USER HER: 相对根键

汇编:嵌入式软件架构学习资源

成为嵌入式软件架构设计师需要掌握多方面的知识,包括嵌入式系统、实时操作系统、硬件接口、软件设计模式等。 以下是一些推荐的博客和网站,可以帮助你深入学习嵌入式软件架构设计: ### 1. **Embedded.com**    - **网址**: [Embedded.com](https://www.embedded.com/)    - **简介**: 这是一个专注于嵌入式系统设计的专业网

4G模块、WIFI模块、NBIOT模块通过AT指令连接华为云物联网服务器(MQTT协议)

MQTT协议概述 MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传输协议,它被设计用来提供一对多的消息分发和应用之间的通讯,尤其适用于远程位置的设备和高延迟或低带宽的网络。MQTT协议基于客户端-服务器架构,客户端可以订阅任意数量的主题,并可以发布消息到这些主题。服务器(通常称为MQTT Broker)则负责接受来自客户端的连接请求,并转发消

matlab一些基本重要的指令

重点内容 运行MATLAB的帮助demo,在Command Window 输入 “demo”,或在Launch Pad 选项卡“demos” 任何时候都可以: 清除Command Window内容:clc 清除Figure Window(图形窗口) clf 清除workspace 变量内容: clear 注意:M脚本文件和输入指令中的变量都在workspace中,为避免变量冲突,一般在