问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

汇编中的TEST指令

发布网友 发布时间:2022-04-22 09:42

我来回答

5个回答

热心网友 时间:2023-10-30 18:38

test属于逻辑运算指令,其功能为功能执行BIT与BIT之间的逻辑运算和测试功能(两操作数作与运算,仅修改标志位,不回送结果)。

Test对两个参数(目标,源)执行AND逻辑操作,并根据结果设置标志寄存器,结果本身不会保存。EST AX, BX与AND AX, BX命令有相同效果。TEST语法规格:TEST r/m,r/m/data。其影响标志包括:C,O,P,Z,S(其中C与O两个标志会被设为0)。

test的运用举例:利用Test指令测试一个位,例如寄存器:

test eax, 100b;/b后缀意为二进制/

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

jnz跳转的条件非0,即ZF=0,ZF=0意味着零标志没被置位,即逻辑与结果为1。

扩展资料

与汇编指令test功能相仿的还有cmp指令,CMP属于算术运算指令,其功能为功能为比较两个值(寄存器,内存,直接数值),与Test指令的测试功能相仿,其语法格式为CMP r/m,r/m/data,影响的标志位包括C,P,A,Z,O。

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

参考资料来源:百度百科-test(汇编指令)

参考资料来源:百度百科-CMP指令

热心网友 时间:2023-10-30 18:38

test执行的就是and的指令,只不过不会保存and执行的结果,而是根据and的结果设置flags寄存器的各种标志

test al, 08h 就是测试al的第4位是不是1,8h = 0000 1000
同理
test ax, 0200h 测试ax的第10位, 0200h = 0000 0010 0000 0000
test cl, 01h 测试cl的第1位,01h = 0000 0001

比如
test al, 01h
jz zero ; al的第一位是0
jnz one ; al的第一位是1

热心网友 时间:2023-10-30 18:38

test指令是测试指令,用于测试某些位是否为0,执行的是与运算,并且会将CF和OF置0,并且影响SF,ZF。若测试的位均为0,则SF=0,ZF=1。
举个例子吧。
MOV AL,40H
TEST AL,08H
执行起来就是
0100 0000(40H)
0000 1000(08H)
意思就是测试40H的左起第四位是否为0.
测试的结果是为0,
所以各标志位的状态是:CF=0,OF=0,SF=0,CF=1

热心网友 时间:2023-10-30 18:39

看过破解教程,都知道test,cmp是比较关键,可是我一直不清楚它们究竟是怎么比较的,最后下决心找了很多资料,和大家一起把它们弄清楚.

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

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

15 14 13 12 11 10 9  8  7  6  5  4  3  2  1  0
OF DF IF TF SF ZF   AF   PF   CF

条件码:
①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

热心网友 时间:2023-10-30 18:40

TEST是执行与运算,结果不存入目的寄存器中!自己动手算下哈,OK?
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
猛禽点烟器在什么位置? 哪家公司的Burkert角座阀性价比更高? 腊肠炒青豆做法 香肠炒青豆的家常做法大全怎么做好吃 我想模仿一个淘宝大店铺'主要是因为他们销量很好,。我想生产他们的... 模仿别人淘宝店铺算侵权吗?侵权赔偿标准介绍 applexsmax突然黑屏 大雁气功当代传人 贷款担保合同签字担保人没有来是不是有效 当一个习惯养成的时候,是不是戒不掉了 六盘水至丁其多少公里 海关会扣什么东西 test 有什么其他的意思 聊斋第2部莲香介绍 好看的女生真的会扣吗? 三国演义第三回的好词佳句 女人会扣是什么意思 Test怎么读? 惊肉生丁其什么意思 轮胎是纯橡胶做成的吗? test和exam有什么区别 丁其胶带适合热水管吗? 丁其后面加什么名字 TEST 是什么意思? test怎么读 test是什么意思中文 test 是什么意思 赛尔号2赤鳍鳗鱼在哪 光照强度 4399赛尔号2我为什么钓不到赤鳍鳗鱼? 什么情况下交警会扣车 娱乐圈dy是什么意思? test的定义 琅琊丁氏的琅琊丁氏名人 从镇宁到六枝怎么走 信用卡会扣钱吗? java比如@test是什么意思有什么用呢 饮博浮荡者优为之 储蓄卡会扣费吗 躬丁其酷,而无不平之可鸣怎么翻译,具体又说什么 银行卡会扣钱吗? 贵卅省2015年镇宁至丁其至木冈工业大道修建开工情况 车辆违章几次后会扣车? 红楼梦隐喻,透彻一点,太简单的可以不说了 贷款逾期了会不会扣我和联系人的钱? 海关为什么会扣货 会扣钱吗? 中国的对联文化是什么? 王者荣耀会扣钱吗? 为什么农行卡会扣钱