汇编中的test和cmp有什么区别?答对有加分!!!154
发布网友
发布时间:2023-10-23 20:21
我来回答
共4个回答
热心网友
时间:2024-11-17 17:56
1楼的朋友说得有点麻烦,其实解释起来也比较容易。
1.意义上的区别:
cmp属于加减运算的范畴,而test属于逻辑运算的范畴
2.概念上的区别
cmp与sub类似,即从目的操作数减去源操作数,但sub会将运算结果送至目的操作数,而cmp不会送至目的操作数;
test则与and类似,即将两个操作数进行按位“与”运算,但and将运算结果送至目的操作数,而test则不会。
3.用法上的区别
cmp主要用于比较两数的关系,可以在有符号数和无符号数之间进行比较。两数相等影响ZF标志,无符号数影响CF标志,有符号数影响SF和OF标志。一般根据标志位的影响设置程序跳转,即根据不同的条件完成对应的程序片段,类似于高级语言的IF-ELSE结构。所有的有条件转移指令都可以用在这条指令之后。
test通常用于检测某些位是否为1,但又不希望改变操作数的场合。比如检查AL中的位6和位2是否有一位为1,可以用如下指令:
test AL,01000100b,如果这两个位全为0.则ZF的值为1,否则清0,那么根据标志位设置的跳转就只能为jz或jnz
这两条指令的相同点是都不会影响操作数,只是通过标志寄存器的某些位反映运算结果。
热心网友
时间:2024-11-17 17:56
TEXT X,Y
主要功能是X与Y相与,结果不送回,但是影响标志位
CMP X,Y
功能是X-Y,不送回结果,同样影响标志位…
热心网友
时间:2024-11-17 17:57
北京机房
热心网友
时间:2024-11-17 17:57
楼下赞最多的说的是非常好的,但是个人感觉对于初学者有点过多了 题主问的是test和cmp
有什么区别 我就从这说吧
cmp的作用:判断两数是否相等 例:cmp ax ax 相等的话 zf为1 不等的话 zf为0
test的(常用)作用:判断寄存器内容是否为零 例: test ah ah 如果ah为o 则zf为1 如果ah不为0的话,zf为0
---------------------------------------------------------------------------------------------
如果是回答题主的问题,上文足够了。那么接下来就是给看完上文想看下文的同学们准备的了。
zf (zero flag) 中文:零标志器 作用:反映运算结果 运算结果为零时,zf为1,
运算结果为1时,zf为0(这个好理解,因为是零标志器嘛,意思不就是有零为1嘛)
cmp 指令原理 (两个操作数做减法,但不返回值,仅修改标志位): 例 cmp ax bx
如果ax-bx等于0 那么zf为1
test指令原理(将两个操作数做与运算,但不返回值,仅修改标志位):例 test ah ah
那么在这个指令中,计算结果恒为0,zf为1