22: {
00000000 push ebp
00000001 mov ebp,esp
00000003 push edi
00000004 push esi
00000005 push ebx
00000006 sub esp,3Ch
00000009 mov esi,ecx
0000000b lea edi,[ebp-38h]
0000000e mov ecx,0Bh
00000013 xor eax,eax
00000015 rep stos dword ptr es:[edi]
00000017 mov ecx,esi
00000019 mov dword ptr [ebp-3Ch],ecx
0000001c mov dword ptr [ebp-40h],edx
0000001f cmp dword ptr ds:[00631020h],0
00000026 je 0000002D
00000028 call 6244533E
0000002d xor edx,edx
0000002f mov dword ptr [ebp-44h],edx
00000032 mov dword ptr [ebp-48h],0
00000039 nop
23: if (a>b)
0000003a mov eax,dword ptr [ebp-3Ch]
0000003d cmp eax,dword ptr [ebp-40h]
00000040 setle al
00000043 movzx eax,al
00000046 mov dword ptr [ebp-48h],eax
00000049 cmp dword ptr [ebp-48h],0
0000004d jne 00000059
24: {
0000004f nop
25: return a;
00000050 mov eax,dword ptr [ebp-3Ch]
00000053 mov dword ptr [ebp-44h],eax
00000056 nop
00000057 jmp 00000062
26: }
27: return b;
00000059 mov eax,dword ptr [ebp-40h]
0000005c mov dword ptr [ebp-44h],eax
0000005f nop
00000060 jmp 00000062
28: }
00000062 mov eax,dword ptr [ebp-44h]
00000065 lea esp,[ebp-0Ch]
00000068 pop ebx
00000069 pop esi
0000006a pop edi
0000006b pop ebp
0000006c ret
如上setle是什么意思,百度竟然无法搜到。
------解决方案--------------------
386 才开始支持的指令吧,应该能搜索到的;就是在小于等于时将指定的字节置 1 。
0F 9E SETLE r/m8 Set byte if less or equal (ZF=1 or SF<>OF)
------解决方案--------------------
原子指令,将比较和设置放在一起。
------解决方案--------------------
setxx reg,xx表示条件,比如le就表示表示有符号数的小于等于,如果标志位满足这个条件,那么设置reg寄存器为1。