• 汇编中的TESP和CMP区别


    TEST属于逻辑运算指令
    功能:

    执行BITBIT之间的逻辑运算

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

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

    语法
    TEST r/m,r/m/data
    
    影响标志

    C,O,P,Z,S(其中C与O两个标志会被设为0)

    注:
    标志位C:进位标志位,当执行一个加法(减法)运算时,最高位产生进位(或借位)时,CF为1,否则为0。
    标志位A:辅助进位标志,一个加法(减法)运算结果的低4位向高4位有进位(或借位)时则AF=1否则AF=0

    运用举例
    1. Test用来测试一个位,例如寄存器:
    test eax, 100b		; b后缀意为二进制
    jnz  ******				;如果eax右数第三个位为1,jnz将会跳转
    

    我是这样想的,jnz跳转的条件是ZF=0,ZF=0意味着ZF(零标志)没被置位,即逻辑与结果为1.

    1. 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。
  • 相关阅读:
    python 星号*使用方法
    python print 使用分隔符 或行尾符
    python 打印输出至文件中, 'wt'读写文件方式,会把原文件内容清空
    python 换行符的识别问题,Unix 和Windows 中是不一样的
    python 读不同编码的文本,传递一个可选的encoding 参数给open() 函数
    django学习笔记(4)
    dos下edit编辑器的快捷命令一览
    django学习笔记(3)
    django学习笔记(2)
    django学习笔记(1)
  • 原文地址:https://www.cnblogs.com/laohaozi/p/12537566.html
Copyright © 2020-2023  润新知