汇编中的TEST指令各是什么?

时间:2021.08.11 发布人:liuzhenhua1105

汇编中的TEST指令各是什么?

已解决问题

谷歌liuzhenhua1105用户在2021.08.11提交了关于“青岩古镇汇编中的TEST指令各是什么?”的提问,欢迎大家涌跃发表自己的观点。目前共有1个回答,最后更新于2025-02-12T16:22:26。希望大家能够帮助她。

详细问题描述及疑问:期待您的答案,不知道说什么,送你一朵小红花吧 !

希望以下的回答,能够帮助你。

第1个回答

用户名:匿名用户  

看过**教程,都知道test,cmp是比较关键,可是我牛你一直不清楚它们究竟是怎么比较的,最后下问答决心找了很多**,和大家一拿粉上降商起把它们弄清楚.

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

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

如下所示:

1514司称131211109876543210

OFDFIFTFSFZF 燃盾几车板化格AF PF CF

条件码:

①OF(OverflowFlag)溢出标志,溢出时为1,否则置0.标明一个溢出了的计算,如:结构和目标不匹配.

②SF(SignF升古损金径子今品苦lag)符号标志,结果为负时置1,否则置0.

③ZF(ZeroFlag)零标志,运算结果为0时置1,所极重章否则置0.

④CF(CarryFlag)进位标志,进位时置1,否则置0.注意:Carry标志中存当气放计算后最右的位.

⑤AF(A错单了距景道架政盐医开uxiliarycarryFlag)**进位标志当海,记录运算时第3位(半个字节)**生的进位置。

有进位时1,否则置0.

⑥PF(ParityFlag)奇偶标志.结果操作数中1的个数为偶数时置1,否望皮逐九护理关致兴阿径则置0.

控制标志位:

⑦DF(DirectionFlag)方向标志,在串处理指令中控制信息的方向。

⑧IF(InterruptFlag)中断标志。

⑨TF(TrapFlag)陷井标志。

为举例方便说一异织府督任红策汽滑宁父下jnz和jz

测试条件

JZZF=1

JNZZF=0

即Jz=jumpifzero(结果为0则设置ZF零标志为1,跳转)

Jnz=jumpifnotzero

好,接着来看test和cmp

*******************************************************************************

test属于逻辑运算指令

功能:执行BIT口培斯向宪运求备果与BIT之间的逻辑运算

测试(两操作数作与运算,仅修改标志位,不回送结果).

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

语法:TESTr/m,r/m/da井么吃往ta

影响标志:C任只五没身,O,P,Z,S(其中C与O范两个标志会被设为0)

运用举例:

1.Test用来测试一个位,例如寄存器:

testeax,100b;b后缀意为二进制

jnz******;如果eax右数第三个位为1,jnz将会跳转

我是这样想的,jnz跳转的条件是ZF=0,ZF=0意味着ZF(零标志)没被置树乱得款伟兰容国胜妒丝位,即逻辑与结果为判控步越美八减拿清未1.

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

testecx,ecx

jzsomewhere

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

*******************************************************************************

CMP属于算术运算指令

功能:比较两个值(寄存器,内存,直接数值)

语法:CMPr/m,r/m/data

标志位:C,P,A,Z,O

CMP比较.(两操作数作减法,仅修改标志位,不回送结果).

cmp实际上是只设置标志不保存结构的减法,并设置Z-flag(零标志).

零标志很像carry,也是**标志寄存器的一位.

例如:

Cmpeax,2;如果eax-2=0即eax=2就设置零标志为1

Jz****;如果设置了零标志就跳转

*******************************************************************************

我得出的结论

test逻辑与运算结果为零,就把ZF(零标志)置1;

cmp算术减法运算结果为零,就把ZF(零标志)置1