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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM