您的位置:首页 > 编程语言 > C语言/C++

编程技术点滴三(C/C++)

2007-08-29 08:52 176 查看
mov ecx,[ebp-2ch]
mov edx,[ecx]
and  edx,80000000h
neg  edx
sbb  edx,edx
neg  edx
mov  [ebp-38h],edx

其对应的C代码为:

 var_38=(*var_2c)&0x80000000?1:0

switch...case语句,在VC6编译器下,比较语句将按照case值由小到大排列,而代码则按照程序员书写的从后到前的顺序汇编:如下面的语句:

 

switch(var_d8)
            {
            case 0xff:
                {
                    var_cc=0;
                    for (;var_cc<4;var_cc++)
                    {
                        var_28[var_cc]=arg_1[var_cc];
                        (&var_28[4])[var_cc]=arg_1[var_cc]    ^    (&arg_1[4])[var_cc];
                    }
                    p9(var_c8,var_28,arg_2);
                    break;
                }

            case 0:
                {
                    var_cc=0;
                    for (;var_cc<4;var_cc++)
                    {
                        arg_2[var_cc]=var_c8[var_cc];
                        (&arg_2[4])[var_cc]=(&var_c8[4])[var_cc];
                    }
                    break;
                }
            
            case 1:
                {
                    p9(arg_1,var_c8,arg_2);
                    break;
                }
            }

将被汇编成:

 

        cmp     dword ptr [ebp-0xDC], 0
        je      1_00404D64
        cmp     dword ptr [ebp-0xDC], 1
        je      1_00404DC8
        cmp     dword ptr [ebp-0xDC], 0xFF
        je      1_00404CE2
        jmp     1_00404DDF

1_00404CE2:

        mov     word ptr [ebp-0xCC], 0
        jmp     1_00404CFF

1_00404CED:

        mov     ax, [ebp-0xCC]
        add     ax, 1
        mov     [ebp-0xCC], ax

1_00404CFF:

        movsx   ecx, word ptr [ebp-0xCC]
        cmp     ecx, 4
        jge     1_00404D4B
        movsx   edx, word ptr [ebp-0xCC]
        movsx   eax, word ptr [ebp-0xCC]
        mov     ecx, [ebp+0xC]
        mov     edx, [ecx+edx*4]
        mov     [ebp+eax*4-0x28], edx
        movsx   eax, word ptr [ebp-0xCC]
        movsx   ecx, word ptr [ebp-0xCC]
        mov     edx, [ebp+0xC]
        mov     esi, [ebp+0xC]
        mov     eax, [edx+eax*4]
        xor     eax, [esi+ecx*4+0x10]
        movsx   ecx, word ptr [ebp-0xCC]
        mov     [ebp+ecx*4-0x18], eax
        jmp     1_00404CED

1_00404D4B:

        mov     edx, [ebp+0x10]
        push    edx
        lea     eax, [ebp-0x28]
        push    eax
        lea     ecx, [ebp-0xC8]
        push    ecx
        call    1_0040100F                   
        add     esp, 0xC
        jmp     1_00404DDF

1_00404D64:

        mov     word ptr [ebp-0xCC], 0
        jmp     1_00404D81

1_00404D6F:

        mov     dx, [ebp-0xCC]
        add     dx, 1
        mov     [ebp-0xCC], dx

1_00404D81:

        movsx   eax, word ptr [ebp-0xCC]
        cmp     eax, 4
        jge     1_00404DC6
        movsx   ecx, word ptr [ebp-0xCC]
        movsx   edx, word ptr [ebp-0xCC]
        mov     eax, [ebp+0x10]
        mov     ecx, [ebp+ecx*4-0xC8]
        mov     [eax+edx*4], ecx
        movsx   edx, word ptr [ebp-0xCC]
        movsx   eax, word ptr [ebp-0xCC]
        mov     ecx, [ebp+0x10]
        mov     edx, [ebp+edx*4-0xB8]
        mov     [ecx+eax*4+0x10], edx
        jmp     1_00404D6F

1_00404DC6:

        jmp     1_00404DDF

1_00404DC8:

        mov     eax, [ebp+0x10]
        push    eax
        lea     ecx, [ebp-0xC8]
        push    ecx
        mov     edx, [ebp+0xC]
        push    edx
        call    1_0040100F                   
        add     esp, 0xC

1_00404DDF:

        jmp     1_00404C62                   

 

 

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1511933
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  编程 汇编 编译器 c