
已解决问题
谷歌liuzhenhua1105用户在2021.08.11提交了关于“青岩古镇汇编中的TEST指令各是什么?”的提问,欢迎大家涌跃发表自己的观点。目前共有1个回答,最后更新于2025-02-12T16:22:26。希望大家能够帮助她。详细问题描述及疑问:期待您的答案,不知道说什么,送你一朵小红花吧 !
详细问题描述及疑问:期待您的答案,不知道说什么,送你一朵小红花吧 !
看过**教
首先看看:状
PSW(ProgramFlag)程序状态字(即标志)寄存器,是一个16位寄存器,由条件码标志(flag)和控
如下所示:
1514
OFDFIFTFSFZF
条件码:
①OF(OverflowFlag)溢出标志,溢出时为1,否则置0.标明一个溢出了的计算,如:
②SF(SignF
③ZF(Zero
④CF(Carry
⑤AF(A
有进位时1,否则置0.
⑥PF(ParityFlag)奇偶标志.结果操作数中1的个数为偶数时置1,否
控制标志位:
⑦DF(DirectionFlag)方向标志,在串处理指令中控制
⑧IF(Interrupt
⑨TF(TrapFlag)陷井标志。
为举例方便说一
测试条件
JZZF=1
JNZZF=0
即Jz=jumpifzero(结果为0则设置ZF零标志为
Jnz=jumpifnotzero
好,接着来
****************************
test属于逻辑运算指令
功能:执行BIT
测试(两操作数作与运算,仅修改标志位,不回送结果).
Test对两个参数(目标,源)执行AND逻辑操作,并根据结果设置标志寄存器,结
语法:TESTr/m,r/m/da
影响标志:C
运用举例:
1.Test
testeax,100b;b后缀意为二进制
jn
我是这样想的,jnz跳转的条
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