汇编指令 – 状态寄存器、cmp、test、jz等指令

汇编指令 – 状态寄存器、cmp、test、jz等指令汇编指令 状态寄存器 cmp test jz 等指令

一、状态寄存器

首先看看:状态寄存器(即标志寄存器)

PSW(Program Status Word)程序状态字(即标志)寄存器,是一个16位寄存器,由条件码标志(flag)和控制标志构成,

如下所示:

汇编指令 - 状态寄存器、cmp、test、jz等指令

好,接着来看test和cmp

1、test指令

test属于逻辑运算指令

Test对两个参数(目标,源)执行AND逻辑操作,并根据结果设置标志寄存器,结果本身不会保存。EST AX, BX 与 AND AX, BX 命令有相同效果

得出的结论
test逻辑与运算结果为零,就把ZF(零标志)置1;
cmp 算术减法运算结果为零,就把ZF(零标志)置1。

对于jz和jnz,查看代码和理解汇编代码时,直接判断test和cmp的运算结果决定是否跳转,至于ZF标记位是系统得知运算结果的标记位。

三、 直接标志转移
指令格式                 机器码                    测试条件                       如…则转移  
JC                           72                           C=1                               有进位
JNC                         73                          C=0                               无进位
JZ/JE                       74                          Z=1                                零/  
JNZ/JNE                  75                         Z=0                               不为零/  
JS                           78                           S=1                                负号
JNS                         79                          S=0                                正号
JO                           70                          O=1                               有溢出
JNO                         71                         O=0                               无溢出
JP/JPE                     7A                        P=1                               奇偶位为偶
JNP/IPO                   7B                        P=0                               奇偶位为奇










四、间接标志转移
先用cmp指令比较再用下面的判断(少了一个 JE 为等于):
指令格式          机器码             测试格式                如…则转移
JA/JNBE()        77                    CZ=0                      >/  
JAE/JNB()        73                    C=0                        >=/  
JB/JNAE()        72                    C=1                       
JBE/JNA()        76                    CZ=1                      <=/  
JG/JNLE()        7F                   (SO)Z=0                  >/  
JGE/JNL()        7D                   SO=0                      >=/  
JL/JNGE()        7C                   SO=1                     
JLE/JNG()        7E                   (SO)Z=1                  <=/







版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/178573.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午4:59
下一篇 2026年3月26日 下午4:59


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号