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

汇编JCC条件跳转指令记忆

汇编中的条件跳转指令(JCC):


1. 理解标志寄存器

JCC 指令依赖于标志寄存器(FLAGS)的状态,常见的标志位有:

  • ZF(Zero Flag):结果为0时置1。

  • CF(Carry Flag):无符号数溢出时置1。

  • SF(Sign Flag):结果为负时置1。

  • OF(Overflow Flag):有符号数溢出时置1。

  • PF(Parity Flag):结果中1的个数为偶数时置1。

理解这些标志位的含义是记忆 JCC 的基础。


2. 分类记忆

将 JCC 指令分为几类,每类对应一种比较场景:

(1) 无符号数比较
  • JA/JNBE:高于/不低于等于时跳转(A = Above)。

  • JAE/JNB:高于等于/不低于时跳转(AE = Above or Equal)。

  • JB/JNAE:低于/不高于等于时跳转(B = Below)。

  • JBE/JNA:低于等于/不高于时跳转(BE = Below or Equal)。

记忆技巧

  • A 表示“高于”,B 表示“低于”。

  • E 表示“等于”(Equal)。

  • N 表示“不”(Not)。


(2) 有符号数比较
  • JG/JNLE:大于/不小于等于时跳转(G = Greater)。

  • JGE/JNL:大于等于/不小于时跳转(GE = Greater or Equal)。

  • JL/JNGE:小于/不大于等于时跳转(L = Less)。

  • JLE/JNG:小于等于/不大于时跳转(LE = Less or Equal)。

记忆技巧

  • G 表示“大于”,L 表示“小于”。

  • E 表示“等于”。

  • N 表示“不”。


(3) 零值判断
  • JE/JZ:等于/为零时跳转(E = Equal,Z = Zero)。

  • JNE/JNZ:不等于/不为零时跳转(NE = Not Equal,NZ = Not Zero)。

记忆技巧

  • E 和 Z 都表示“等于”或“为零”。

  • NE 和 NZ 表示“不等于”或“不为零”。


(4) 标志位判断
  • JC:进位标志为1时跳转(C = Carry)。

  • JNC:进位标志为0时跳转(NC = Not Carry)。

  • JO:溢出标志为1时跳转(O = Overflow)。

  • JNO:溢出标志为0时跳转(NO = Not Overflow)。

  • JS:符号标志为1时跳转(S = Sign)。

  • JNS:符号标志为0时跳转(NS = Not Sign)。

  • JP/JPE:奇偶标志为1时跳转(P = Parity,PE = Parity Even)。

  • JNP/JPO:奇偶标志为0时跳转(NP = Not Parity,PO = Parity Odd)。

记忆技巧

  • 标志位的缩写直接对应指令名称(如 C = Carry,O = Overflow)。

  • N 表示“不”。


3. 总结规律

  • 字母含义

    • A/B:无符号数比较(Above/Below)。

    • G/L:有符号数比较(Greater/Less)。

    • E:等于(Equal)。

    • Z:为零(Zero)。

    • C:进位(Carry)。

    • O:溢出(Overflow)。

    • S:符号(Sign)。

    • P:奇偶(Parity)。

  • 前缀

    • J:跳转(Jump)。

    • N:不(Not)。


4. 练习与应用

  • 编写简单的汇编代码,使用不同的 JCC 指令,观察其行为。

  • 通过调试器(如 GDB)查看标志寄存器的变化,加深理解。


5. 记忆口诀

  • 无符号A(Above)高,B(Below)低,E 等于别忘记。

  • 有符号G(Greater)大,L(Less)小,E 等于要记牢。

  • 零值E 等于 Z 为零,NE 不等 NZ 非零。

  • 标志位C 进位 O 溢出,S 符号 P 奇偶。

http://www.lryc.cn/news/532307.html

相关文章:

  • HTML排版标签、语义化标签、块级和行内元素详解
  • 【回溯+剪枝】单词搜索,你能用递归解决吗?
  • 《深度揭秘LDA:开启人工智能降维与分类优化的大门》
  • Linux(CentOS)安装 MySQL
  • C++ 使用CURL开源库实现Http/Https的get/post请求进行字串和文件传输
  • 面试题-SpringCloud的启动流程
  • MySQL基础知识
  • nas-群晖docker查询注册表失败解决办法(平替:使用SSH命令拉取ddns-go)
  • GSMA SGP.31 eSIM IoT 架构与需求笔记
  • sql版本序列号
  • vue2-nextTick
  • 【其他专题】如何在线将PNG转ICO图标
  • 2019_AutoInt
  • HAL库 Systick定时器 基于STM32F103EZT6 野火霸道,可做参考
  • 使用 Postman 进行 API 测试:从入门到精通
  • K8s 分布式存储后端(K8s Distributed Storage Backend)
  • 基于docker搭建Kafka集群,使用KRaft方式搭建,摒弃Zookeeper
  • Centos7 安装 RabbitMQ与Erlang
  • mybatis-plus的分页查询简单使用
  • 剑指 Offer II 014. 字符串中的变位词
  • 富唯智能复合机器人拓展工业新维度
  • 【大数据技术】搭建完全分布式高可用大数据集群(Scala+Spark)
  • solidity高阶 -- 调用接口合约
  • 若依框架使用(低级)
  • 找不到 MSVCP120.dll
  • AI软件栈:LLVM分析(三)
  • openwebui入门
  • Spark--如何理解RDD
  • CTFSHOW-WEB入门-PHP特性89-100
  • [250204] Mistral Small 3:小巧、快速、强大 | asdf 0.16.0 发布:Golang 重写带来性能飞跃