汇编中的test和cmp有什么区别?答对有加分!!!
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
这两条指令的相同点是都不会影响操作数,只是通过标志寄存器的某些位反映运算结果。
鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com
图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!