zoukankan      html  css  js  c++  java
  • sete 指令

    sete指令通常和算数指令或者逻辑运算指令一起出现。

    CMP eax,5

    sete cl

    首先顾名思义一下,sete的意思就是set equal 就是相等的时候设置,设置谁,设置cl,用谁设置cl的值,用ZF标志位的值。

    所以sete指令的意思就是根据ZF标志位的值设置一个变量的值是1和0

    上面代码的意思就是,当eax是5的时候就设置cl的值为1,不是5则设置cl的值为0。你看这个过程是不是一个分支判断的过程呀,有分支判断

    但是没有用到条件跳转语句。这就简化了流程了。

    所以cmp汗巾儿sete指令作用即能判断两个数相等不相等且能简化分支流程。

    不明白sete 指令的,其实可以用OD随便调试一下,改几句代码就明白了。

    76FE01E8 83F8 08 CMP EAX,8
    76FE01EB 0F94C1 SETE CL
    76FE01EE 90 NOP
    76FE01EF 90 NOP

    看一下仙剑4战斗系统里面的一段代码

    PAL4.exe+1844C0 - 8B 01 - mov eax,[ecx]
    PAL4.exe+1844C2 - FF 90 A8000000 - call dword ptr [eax+000000A8]
    PAL4.exe+1844C8 - 33 C9 - xor ecx,ecx
    PAL4.exe+1844CA - 83 F8 03 - cmp eax,03 { 3 }
    PAL4.exe+1844CD - 0F94 C1 - sete cl
    PAL4.exe+1844D0 - 8A C1 - mov al,cl

    调用了一个类的函数,看函数的返回值和3的大小,如果等于3则设置cl的值为1,如果不等于3则设置cl的值为0

  • 相关阅读:
    werfault进程使用CPU率高
    oracel 拆分字符串
    TCP TIME WAIT
    netstat 命令
    Java 理论与实践: 并发集合类
    DIV与SPAN之间有什么区别
    oracle超出打开游标的最大数的原因和解决方案
    Quartz表达式
    Axis创建webservice客户端和服务端
    Web服务cxf框架发布2
  • 原文地址:https://www.cnblogs.com/yfish/p/15342211.html
Copyright © 2011-2022 走看看