【微机原理】指令JZ和JNZ的区别

🌟 嗨,我是命运之光

🌍 2024,每日百字,记录时光,感谢有你一路同行。

🚀 携手启航,探索未知,激发潜能,每一步都意义非凡。


JZ(Jump if Zero)和 JNZ(Jump if Not Zero)是两个条件跳转指令,它们根据标志寄存器中的 零标志位(Zero Flag,ZF)的状态来决定程序的跳转行为。两者的区别在于跳转的条件相反。

1. JZ(Jump if Zero)

功能:

  • 零标志位(ZF) 被设置为1时,JZ 指令执行跳转。

使用场景:

  • 主要用于检查某个操作的结果是否为零。如果操作结果为零(例如两个值相等,或减法结果为零),那么 ZF 被置为1,此时 JZ 将会跳转到指定的目标地址。

示例:

bash 复制代码
CMP AX, BX  ; 比较 AX 和 BX 的值
JZ  target  ; 如果 AX == BX,ZF 被置1,跳转到 target 标签

在上面的例子中,如果 AXBX 相等,CMP 指令会将 ZF 设置为 1,JZ 指令将跳转到 target 标签。

2. JNZ(Jump if Not Zero)

功能:

  • 零标志位(ZF) 被设置为0时,JNZ 指令执行跳转。

使用场景:

  • 用于检查某个操作的结果是否 为零。如果操作结果不为零(例如两个值不相等,或减法结果不为零),那么 ZF 被清零,此时 JNZ 将会跳转到指定的目标地址。

示例:

bash 复制代码
CMP AX, BX  ; 比较 AX 和 BX 的值
JNZ target  ; 如果 AX != BX,ZF 被清零,跳转到 target 标签

在上面的例子中,如果 AXBX 不相等,CMP 指令会将 ZF 设置为 0,JNZ 指令将跳转到 target 标签。

总结

  • JZ (Jump if Zero)会在 ZF = 1 时跳转,通常用于检查操作结果是否为零。
  • JNZ (Jump if Not Zero)会在 ZF = 0 时跳转,通常用于检查操作结果是否不为零。

这两个指令通常在需要基于条件执行不同路径的程序中用来实现条件分支。


举两个例子就懂了

示例:检查内存单元首地址2200H起的50个字节与首地址3200H起的50个字节是否相等
bash 复制代码
CLD                ; 清除方向标志DF,使比较方向为从低地址到高地址
MOV SI, 2200H      ; 将源串的起始地址2200H加载到SI
MOV DI, 3200H      ; 将目的串的起始地址3200H加载到DI
MOV CX, 50         ; 将比较字节数50加载到CX
REPE CMPSB         ; 如果相等且ZF=1,继续比较,直到CX=0或发现不相等
JZ LP1             ; 如果ZF=1,则跳转到标签LP1,表示所有字节都相等
DEC SI             ; 如果不相等,将SI指针减1,指向第一个不相等的字节
MOV BX, SI         ; 将第一个不相等字节的地址存入BX
MOV AL, [SI]       ; 将源串中第一个不相等的字节内容存入AL
JMP LP2            ; 跳转到标签LP2

LP1: MOV BX, 0     ; 如果所有字节相等,则将BX置为0
LP2:               ; 继续执行后续代码
示例:在内存附加段(ES段)4300H地址开始的100个字节中查找字符 *。如果找到,偏移地址存入BX寄存器;如果未找到,BX = 0。
bash 复制代码
CLD                   ; 清除方向标志,设置为向前搜索
MOV DI, 4300H         ; 初始化DI为4300H,指向内存中的第一个字节
MOV AL, '*'           ; 在AL中加载要查找的字符 '*'
MOV CX, 100           ; 设置搜索范围为100个字节

REPNZ SCASB           ; 逐字节比较,直到找到'*' 或 CX=0
JNZ LP1               ; 如果未找到(ZF=0),跳转到LP1

DEC DI                ; 减小 DI,因为 SCASB 会多移动一个字节
MOV BX, DI            ; 将找到的位置偏移地址存入BX
JMP LP2               ; 跳转到 LP2

LP1:
MOV BX, 0             ; 未找到 '*',将 BX 设为 0
LP2:
; 继续其他代码

嗨,我是命运之光。如果你觉得我的分享有价值,不妨通过以下方式表达你的支持:👍 点赞来表达你的喜爱,📁 关注以获取我的最新消息,💬 评论与我交流你的见解。我会继续努力,为你带来更多精彩和实用的内容。

点击这里👉 ,获取最新动态,⚡️ 让信息传递更加迅速。

相关推荐
m0_504135301 小时前
代码随想录算法训练营第六十一天 | floyd算法
算法
xin007hoyo5 小时前
算法笔记.染色法判断二分图
数据结构·笔记·算法
এ᭄画画的北北8 小时前
力扣-234.回文链表
算法·leetcode·链表
八股文领域大手子8 小时前
深入理解缓存淘汰策略:LRU 与 LFU 算法详解及 Java 实现
java·数据库·算法·缓存·mybatis·哈希算法
__lost9 小时前
C++ 解决一个简单的图论问题 —— 最小生成树(以 Prim 算法为例)
算法·图论·最小生成树·prim算法
wuqingshun31415910 小时前
蓝桥杯 11. 打印大X
数据结构·算法·职场和发展·蓝桥杯·深度优先
Blossom.11811 小时前
量子网络:构建未来通信的超高速“高速公路”
网络·opencv·算法·安全·机器学习·密码学·量子计算
A林玖11 小时前
【机器学习】朴素贝叶斯
人工智能·算法·机器学习
六边形战士DONK11 小时前
神经网络基础[损失函数,bp算法,梯度下降算法 ]
人工智能·神经网络·算法
wuqingshun31415911 小时前
蓝桥杯 2. 确定字符串是否是另一个的排列
数据结构·c++·算法·职场和发展·蓝桥杯