天天看點

sete 指令

sete指令通常和算數指令或者邏輯運算指令一起出現。

CMP eax,5

sete cl

首先顧名思義一下,sete的意思就是set equal 就是相等的時候設定,設定誰,設定cl,用誰設定cl的值,用ZF标志位的值。

是以sete指令的意思就是根據ZF标志位的值設定一個變量的值是1和1

上面代碼的意思就是,當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

繼續閱讀