首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

一个不明白的指令解决方案

2014-01-17 
一个不明白的指令22:{00000000pushebp 00000001movebp,esp 00000003pushedi 00000004pushesi 00000005push

一个不明白的指令
    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。

热点排行