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

 

posted @ 2021-09-27 11:31  eatwhat  阅读(2664)  评论(0编辑  收藏  举报