一、状态寄存器

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

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

如下所示:

条件码:
①OF(Overflow Flag)溢出标志,溢出时为1,否则置0.标明一个溢出了的计算,如:结构和目标不匹配。
②SF(Sign Flag)符号标志,结果为负时置1,否则置0。
③ZF(Zero Flag)零标志,运算结果为0时置1,否则置0。
④CF(Carry Flag)进位标志,进位时置1,否则置0.注意:Carry标志中存放计算后最右的位。
⑤AF(Auxiliary carry Flag)辅助进位标志,记录运算时第3位(半个字节)产生的进位置。
有进位时1,否则置0。
⑥PF(Parity Flag)奇偶标志.结果操作数中1的个数为偶数时置1,否则置0。
控制标志位:
⑦DF(Direction Flag)方向标志,在串处理指令中控制信息的方向。
⑧IF(Interrupt Flag)中断标志。
⑨TF(Trap Flag)陷井标志。

test和cmp指令运行后都会设置标志位,为举例方便说一下jnz和jz
测试条件
JZ   ZF=1
JNZ  ZF=0
即Jz=jump if zero (结果为0则设置ZF零标志为1,跳转)
Jnz=jump if not zero

二、test指令和cmp指令

好,接着来看test和cmp

1、test指令

test属于逻辑运算指令

功能:执行BIT与BIT之间的逻辑运算
测试(两操作数作与运算,仅修改标志位,不回送结果)。

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

语法:TEST r/m,r/m/data
影响标志:C,O,P,Z,S(其中C与O两个标志会被设为0)

运用举例:
1.Test用来测试一个位,例如寄存器:
test eax, 100b;          b后缀意为二进制
jnz  ******;             如果eax右数第三个位为1,jnz将会跳转
jnz跳转的条件非0,即ZF=0,ZF=0意味着零标志没被置位,即逻辑与结果为1。

2.Test的一个非常普遍的用法是用来测试一方寄存器是否为空:
test ecx, ecx
jz somewhere
如果ecx为零,设置ZF零标志为1,Jz跳转

2、cmp指令
CMP属于算术运算指令

功能: 比较两个值(寄存器,内存,直接数值)
语法: CMP r/m,r/m/data
标志位: C,P,A,Z,O

CMP比较.(两操作数作减法,仅修改标志位,不回送结果)。
cmp实际上是只设置标志不保存结构的减法,并设置Z-flag(零标志)。
零标志很像carry,也是内部标志寄存器的一位。

例如:
Cmp eax, 2;       如果eax-2=0即eax=2就设置零标志为1
Jz ****;                如果设置了零标志就跳转

得出的结论
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                  <=/

汇编指令 - 状态寄存器、cmp、test、jz等指令相关推荐

  1. 汇编语言的C状态寄存器,汇编指令-状态寄存器、cmp、test、jz等指令详细说明

    一.状态寄存器 首先看看:状态寄存器(即标志寄存器) PSW(Program Status Word)程序状态字(即标志)寄存器,是一个16位寄存器,由条件码标志(flag)和控制标志构成, 如下所示 ...

  2. 汇编中各寄存器的作用(16位CPU14个,32位CPU16个)和 x86汇编指令集大全(带注释)

    From:https://www.cnblogs.com/zimmerk/articles/2520011.html From:https://blog.csdn.net/bjbz_cxy/artic ...

  3. 汇编中各寄存器的作用(16位CPU14个,32位CPU16个)和 x86汇编指令集大全(带注释)...

    From:https://www.cnblogs.com/zimmerk/articles/2520011.html From:https://blog.csdn.net/bjbz_cxy/artic ...

  4. X86汇编常见的寄存器

    X86汇编常见的寄存器 4个数据寄存器(EAX.EBX.ECX和EDX) 2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP) 6个段寄存器(ES.CS.SS.DS.FS和GS) ...

  5. 汇编中各寄存器的作用

    转自:http://blog.csdn.net/ly131420/article/details/8741225 寄存器 英文名称:Register 寄存器定义 寄存器是中央处理器内的组成部份.寄存器 ...

  6. 【汇编】各个寄存器作用详解

    寄存器 英文名称:Register 寄存器定义 寄存器是中央处理器内的组成部份.寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令.数据和位址.在中央处理器的控制部件中,包含的寄存器有指令寄存器( ...

  7. 汇编中各寄存器及作用

    4个数据寄存器(EAX.EBX.ECX和EDX) 2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP) 6个段寄存器(ES.CS.SS.DS.FS和GS) 1个指令指针寄存器(EI ...

  8. 【整理】X86常用的汇编指令及寄存器

    X86常用的汇编指令及寄存器 这几天需要用到反编译的工具,发现好多年不用的汇编快忘光了,赶紧整理一下. 一.寄存器 在X86指令集中寄存器分为四类:通用寄存器.指令指针寄存器.段寄存器.标志寄存器. ...

  9. 汇编 and or xor not test cmp 条件跳转指令 jcc

    布尔和比较指令 and and destination, source and reg, reg/mem/imm and mem, reg/imm mov al, 10101110b and al, ...

最新文章

  1. 微软Win 7系统安全性方面的十大特色
  2. 使用DeflateStream压缩与解压
  3. python if和while的区别_python基础--while循环和if判断、基本运算符
  4. Python 3 利用 Dlib 和 sklearn 人脸笑脸检测机器学习建模
  5. ue 编写linux脚本,UltraEdit23 sh文件 (shell脚本)着色
  6. java 拉丁文 unicode_“java语言使用的是Unicode编码”是指的jvm?.java文件?
  7. 如何轻松使用 C 语言实现一个栈?​
  8. python实现将将输入的可约分数化简为不可约分数
  9. 机器学习 --- 3. 贝叶斯怎么想?(转)
  10. sqlmap入门使用教程
  11. 怎样卸载deepin系统_系统卸载
  12. 【办公自动化】Excel“一键”生成国土“三调”转换代码
  13. NRF52840开发注意
  14. 计算机网络练习题-2
  15. ESP32+AMG8833+RGB屏240*320(ST7789)红外热成像
  16. hive 漫威the_漫威系列的观看顺序
  17. RO、RW和ZI数据解析
  18. 魔兽争霸无法在这个计算机,魔兽争霸提示内存不足 无法执行此操作 然后自动退出游戏了 怎么处理?我内存8G 硬盘1T WIN7 32位系统...
  19. 十大主流小说平台畅销榜TOP1:诡秘、剑来、元尊、赘婿流风云争霸
  20. VMT进阶1-自发光

热门文章

  1. xv6实验1-启动计算机(文档)
  2. “Microsoft Office Word 遇到问题需要关闭”的解决办法
  3. 循序渐进升级Exchange 2010 SP1/SP2/SP3/SP3RU8V2
  4. 运用project 2007来管理项目
  5. AI几何&代数数学题自动答题系统(源码&教程)
  6. 刚构桥的优缺点_刚构桥特点
  7. UE4 多国语言翻译
  8. x3300M4,X3500M4网卡驱动下载
  9. 计算机存的汉字需要多少,4g的软件可以存储多少个汉字
  10. 2022-2027年中国醋纤滤棒行业运行态势及未来发展趋势预测报告