当前位置: 首页 > news >正文

汇编——比较指令和条件跳转指令

CMP 比较指令

格式
CMP 操作数1, 操作数2
原理
等价于 操作数1−操作数2,不保存运算结果,仅修改CF、ZF、OF、AF、PF、SF所有状态标志位
作用
配合条件跳转指令做判断,对应高级语言 if/else 逻辑
常用组合(无符号数比较)

指令含义判定条件英文释义
JE / JZ相等则跳转ZF = 1Equal / Zero
JNE / JNZ不相等则跳转ZF = 0Not Equal / Not Zero
JB / JC低于(小于)则跳转CF = 1Below / Carry
JNB / JNC不低于(大于等于)则跳转CF = 0Not Below / Not Carry
JA高于(大于)则跳转CF=0 且 ZF=0Above
JNA不高于(小于等于)则跳转CF=1 或 ZF=1Not Above

补充别名: JB = JNAE(不高于等于);JNB = JAE(高于等于)

TEST 测试指令

格式
TEST 操作数1, 操作数2
原理
执行 按位与 (AND) 运算,不修改两个操作数本身,仅刷新 SF、ZF、PF,强制置 CF=0、OF=0
典型用法

  1. 检测某一个二进制位是否为 1
    TEST AL, 01H ; 检测AL最低位 //汇编中写注释用;
    ; 最低位=1 → 与运算结果≠0 → ZF=0
    ; 最低位=0 → 与运算结果=0 → ZF=1
  2. 判断寄存器是否为 0
    TEST EAX, EAX ; 自身按位与
    ; EAX=0 → ZF=1;EAX≠0 → ZF=0
  3. 判断正负:结合 SF 符号位,判断数据正负

条件跳转指令总表(按标志位分类)

跳转指令紧跟 CMP/TEST/ 运算指令,根据前序指令产生的标志位判断是否跳转

  1. 基于 ZF 零标志位
    ● JZ / JE:ZF=1,结果为 0 / 两数相等,跳转
    ● JNZ / JNE:ZF=0,结果非 0 / 两数不等,跳转
  2. 基于 CF 进位 / 借位标志位(多用于无符号数)
    ● JC / JB / JNAE:CF=1,有进位 / 借位 / 前者更小,跳转
    ● JNC / JNB / JAE:CF=0,无进位 / 借位 / 前者更大或相等,跳转
  3. 基于 OF 溢出标志位(多用于有符号数)
    ● JO:OF=1,运算溢出,跳转
    ● JNO:OF=0,无溢出,跳转
  4. 基于 SF 符号标志位(判断正负)
    ● JS:SF=1,结果为负数,跳转
    ● JNS:SF=0,结果为非负数(正数 / 0),跳转
  5. 基于 PF 奇偶标志位
    ● JP / JPE:PF=1,结果低 8 位中二进制1的个数为偶数,跳转
    ● JNP / JPO:PF=0,结果低 8 位中二进制1的个数为奇数,跳转

JMP 无条件跳转

格式
JMP 目标地址/标签
说明
不检测任何标志位,直接跳转到指定位置执行代码,对应高级语言 goto
分类:短跳转、近跳转、远跳转,日常调试最常用短 / 近跳转

区分

  1. CMP vs TEST
    ○ CMP:做减法,用于数值大小、相等判断
    ○ TEST:做按位与,用于位检测、判零、判正负
  2. 有符号数 vs 无符号数跳转选择
    ○ 无符号数比大小:优先用 JA/JB/JNA/JNB(依赖 CF、ZF)
    ○ 有符号数比大小:使用 JG/JL 等专用指令(依赖 SF、OF 组合)
  3. 顺序要求:必须先执行 CMP/TEST/ 算术运算 修改标志位,再使用跳转指令,中间不能穿插会改变标志位的指令
http://www.jsqmd.com/news/1099845/

相关文章:

  • Ubuntu 系统安装 Hermes Agent 使用教程
  • web安全代码基础-PHP(模板组件插件安全)
  • FastAPI 基础篇:类型注解驱动的 Python Web 开发范式
  • OpenHarness源码研究-4-AgentLoop对话引擎与工具系统
  • 如何深度掌控AMD Ryzen处理器:专业硬件调试工具完全指南
  • ros2 humble安装anaconda
  • 机器人-混合关节架构
  • Certbot:免费自动化 HTTPS 证书管理工具
  • 2026年桌面风扇推荐:三款不同功能定位机型,按需选择不踩坑
  • 【毕设级】SpringBoot + MySQL + Thymeleaf 实现高校教材征订管理系统(班级统订+个人补订)
  • Linux生产环境硬盘挂载:告别盘符漂移,使用UUID实现稳定自动挂载
  • 手把手教你用SM2259XT2开卡工具修复固态硬盘(附B0KB颗粒实测)
  • 小学期记录
  • Awesome LLM Skills:给 AI 编程助手装上各种技能包
  • 3分钟掌握深度学习漫画翻译神器:BallonsTranslator完全指南
  • 机器人-从“性能参数领先”转向“工业化能力领先”
  • 效率够高吗?8款AI论文网站排行榜,毕业季救星!
  • Docker部署-非root用户openEuler 20.03部署
  • How To Secure A Linux Server:一份持续更新的服务器安全加固手册
  • 2026年6月个人工作生活总结
  • Linux Page Cache 导致视频解码第一次慢、第二次快的原因分析与缓存清理方法
  • PYTHON+AI LLM DAY NINTY-TWO
  • vmware安装win10教程(保姆级图文):VMware16虚拟机部署Windows10,附win10镜像iso文件下载
  • OpenHarness源码研究-3-codex配置到输出对话
  • PDF转Excel免费工具推荐,批量转换不收费绿色版
  • Windows 11本地部署GLM-5.2大模型:集成Claw工具调用与Agent知识库实战
  • 零基础自学C++逆向学习日记 Day.5
  • 【题解-信息学奥赛一本通】1224:最大子矩阵
  • 【数仓避坑04】金额换算精度踩坑:先除后乘导致大额资金隐性资损,先乘后除精度最优详解
  • 当企业应用AI销冠系统时,如何利用数字员工提升工作效率?