汇编中的test和cmp指令

article/2025/9/11 21:57:50

看过破解教程,都知道test,cmp是比较关键,来分析一下它们究竟是怎么比较
首先看看:状态寄存器(即标志寄存器)

PSW(Program Flag)程序状态字(即标志)寄存器,是一个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)陷井标志。


为举例方便说一下jnz和jz
测试条件

JZ   ZF=1
JNZ  ZF=0


Jz=jump if zero (结果为0则设置ZF零标志为1,跳转)
Jnz=jump if not zero

好,接着来看test和cmp


test属于逻辑运算指令

功能: 执行BIT与BIT之间的逻辑运算
测试(两操作数作与运算,仅修改标志位,不回送结果).
Test对两个参数(目标,源)执行AND逻辑操作,并根据结果设置标志寄存器,结果本身不会保存。TEST 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跳转的条件是ZF=0,ZF=0意味着ZF(零标志)没被置位,即逻辑与结果为1.

2.Test的一个非常普遍的用法是用来测试一方寄存器是否为空:

test ecx, ecx
jz somewhere

如果ecx为零,设置ZF零标志为1,Jz跳转


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.


http://chatgpt.dhexx.cn/article/eGpSotD0.shtml

相关文章

条件执行指令 CMP

CMP可以比较两个数的关系&#xff0c;其本质就是一条减法指令&#xff0c;只是不会将运算结果保存到寄存器&#xff0c;因为对于CPU而言&#xff0c;比较两个数时只关心结果是false还是true 指令格式&#xff1a;CMP <第一操作寄存器> <第二操作数> 第一操作寄…

嵌入式cmp指令的判断标志位_AB PLC | Logix5000控制器状态标志

前言:Logix5000控制器没有状态文件,要访问状态信息,需要使用状态标志。另外,这些标志状态可以根据需要,将其用于程序编写,实现一些特定的功能. 状态标志 1. 状态标志关键字有:S:FS、S:N、S:Z、S:V、S:C、S:MINOR. 2. 可通过指令直接访问这些状态标志,它们并非标签,不能…

嵌入式cmp指令的判断标志位_刘帅嵌入式系统-当前程序状态寄存器(cpsr)

CPSR的格式如下图。SPSR格式与CPSR格式相同。 1、条件标志位 N(Negative)、Z(Zero)、C(Carry)及V(oVerflow)统称为条件标志位。大部分的ARM指令可以根据CPSR中的这些条件标志位选择性地执行。各条件标志位的具体含义如下。 N:当两个补码表示的有符号整数运算时,N=1表示运算的…

嵌入式cmp指令的判断标志位_ARM汇编指令集

ARM处理器的指令集可以分为跳转指令、数据处理指令、程序状态寄存器(PSR)处理指令、加载/存储指令、协处理器指令和异常产生指令6大指令。 一、跳转指令 跳转指令用于实现程序流程的跳转,在ARM程序中有以下两种方法可以实现程序流程的跳转。Ⅰ.使用专门的跳转指令; Ⅱ.直接…

实操汇编原理cmp指令 对比sub与cmp指令

mov ax, 5 mov bx, 5 cmp ax, bx这段指令是5-50&#xff0c;但是并不是在寄存器中a改值: 还没有给ax寄存器放值之前如上图&#xff0c;放入ax和bx之后如下图: 这个时候再step调试一步也就是走cmp ax,bx之后变成如下: 这里可以看到ax并没有发生改变&#xff0c;改变的是flag…

CMP指令(cmp指令的功能)

目前有哪些类型的CMP&#xff1f; 目前有共享一级Cache的CMP、共享二级Cache的CMP以及共享主存的CMP PLC里的cmp比较指令是不是停电保持&#xff1f; OQ0.0 /或 Q0.0常开触点 这个是Q0.0线圈的常开触点&#xff0c;作用就是停电自保持 CMP指令的指令详解 原发布者:weilei1201 c…

汇编语言 CMP指令

CMP(比较)指令执行从目的操作数中减去源操作数的隐含减法操作&#xff0c;并且不修改任何操作数。 指令格式&#xff1a; CMP 目的操作数, 源操作数标志位 当实际的减法发生时&#xff0c;CMP指令按照计算结果修改溢出、符号、零、进位、辅助进位和奇偶标志位。如果比较的是两…

时钟周期、机器周期、总线周期、指令周期的关系

一、时钟周期 时钟周期由主频决定&#xff0c;是最小的时间单位 也叫节拍、T周期、cpu时钟周期 二、机器周期 cpu完成一项基本操作所需最短时间&#xff0c;用了多个时钟周期 又叫cpu周期 例&#xff1a;取指周期&#xff08;含取指令和分析指令&#xff09;、间址周期、执行…

请说明指令周期、机器周期、时钟周期之间的关系。

一条指令周期包括若干个机器周期&#xff0c;一条机器周期又包括若干个时钟周期&#xff0c;时钟周期即振荡周期。 指令周期&#xff1a;取出一条指令并执行这条指令的时间。一般由若干个机器周期组成&#xff0c;是从取指令、分析指令到执行完所需的全部时间。 机器周期&…

时钟周期、机器周期、指令周期的概念及三者之间的关系;定时器及计数器

时钟周期 时钟周期也称为振荡周期&#xff0c;定义为时钟脉冲的倒数(可以这样来理解&#xff0c;时钟周期就是单片机外接晶振的倒数&#xff0c;例如12M的晶振&#xff0c;它的时间周期就是1/12 us)&#xff0c;是计算机中最基本的、最小的时间单位。 在一个时钟周期内&#xf…

如何理解时钟周期及公式CPU执行时间 = CPU时钟周期数/主频

因为用OneNote制作的&#xff0c;公式复制不过来太麻烦&#xff0c;直接截图了。 下面看一下时钟周期的定义&#xff1a; CPU时钟周期&#xff1a;通常为节拍脉冲或T周期&#xff0c;即主频的倒数&#xff0c;它是CPU中最小的时间单位&#xff0c;每个动作至少需要一个时钟周期…

51/时钟周期、时钟频率、状态周期、机器周期

1.时钟频率是什么&#xff1f; 时钟&#xff1a;顾名思义&#xff0c;时钟以精确和固定的时间间隔&#xff0c;触发电信号&#xff0c;其信号被控制单元用于推进CPU的内部操作。而CPU执行 取指令–解码–执行的速度为时钟速度&#xff08;时钟频率&#xff09;。 在各类CPU当中…

时钟周期,机器周期,指令周期的区别

时钟周期 时钟周期也称为振荡周期&#xff0c;定义为时钟脉冲的倒数&#xff08;时钟周期就是单片机外接晶振的倒数&#xff0c;例如12M的晶振&#xff0c;它的时钟周期就是1/12us&#xff09;&#xff0c;是计算机中的最基本的、最小的时间单位。 在一个时钟周期内&#xff0c…

【嵌入式百科】003——时钟周期、指令周期、机器周期、总线周期

一、时钟周期 时钟周期也称为振荡周期&#xff0c;定义为时钟脉冲的倒数(时钟周期就是单片机外接晶振的倒数&#xff0c;例如12M的晶振&#xff0c;它的时钟周期就是1/12us)&#xff0c;是计算机中的最基本的、最小的时间单位。在一个时钟周期内&#xff0c;CPU仅完成一个最基本…

IC基础知识(十一)时钟周期、状态周期、机器周期、指令周期和总线周期的定义及关系

目录 ​ ​1.时钟周期、振荡周期、节拍周期 2.状态周期 3.机器周期、CPU周期 4.指令周期 5.总线周期 总结 微信公众号 ​1.时钟周期、振荡周期、节拍周期 时钟周期又叫做振荡周期、节拍周期&#xff0c;定义为时钟晶振频率的倒数。时钟周期是计算机中最基本的、最小的时…

CPU时钟周期和时钟频率

就工作方式而言&#xff0c;CPU 分两种&#xff1a;同步 CPU 和异步 CPU。异步 CPU并不常见&#xff0c;用途广泛的是同步 CPU 。 既然是同步 CPU&#xff0c;当然就需要有一个同步机制&#xff0c;或者说要有个“主管”来维护同步状态&#xff0c;不然你做一样&#xff0c;我…

CPU中的指令周期、CPU周期和时钟周期

https://zhuanlan.zhihu.com/p/90829922 1&#xff0c;指令周期 指令周期&#xff1a;是指计算机从取值到执行执行完毕的时间 计算机执行指令的过程可以分为以下三个步骤&#xff1a; Fetch&#xff08;取指&#xff09;&#xff0c;也就是从 PC 寄存器里找到对应的指令地址…

时钟周期和机器周期之间的关系

时钟周期和机器周期之间的关系 时钟周期&#xff08;小&#xff09;机器周期&#xff08;中&#xff09;指令周期 &#xff08;大&#xff09;作用 时钟周期&#xff08;小&#xff09; 时钟周期&#xff1a;单片机时钟控制的基本时间单位。以微秒(μs)作单位。 时钟周期受时…

凸包和凸集

凸集&#xff1a;在欧氏空间中&#xff0c;凸集是对于集合内的每一对点&#xff0c;连接该对点的直线段上的每个点也在该集合内。 凸包&#xff1a;点集Q的凸包&#xff08;convex hull&#xff09;是指一个最小凸多边形&#xff0c;满足Q中的点或者在多边形边上或者在其内。 凸…

凸优化理论(一)深入理解仿射集,凸集,锥等定义及相关证明

文章目录 1&#xff1a;仿射集相关定义与证明2&#xff1a;相关子空间与性质证明3&#xff1a;线性方程组的解集与化零空间4&#xff1a;任意集合构建最小仿射集-仿射包5&#xff1a;凸集相关&#xff1a;凸包-凸组合6&#xff1a;锥 Cone与凸锥 Convex Cone7&#xff1a;概念比…