64,637
社区成员
发帖
与我相关
我的任务
分享
int li_tmp = 1;
switch(li_tmp)
{
case 1:
printf("11");
break;
case 2:
printf("22");
break;
case 3:
printf("33");
break;
}
对应的汇编是
00401028 mov dword ptr [ebp-4],1
0040102F mov eax,dword ptr [ebp-4]
00401032 mov dword ptr [ebp-8],eax
00401035 cmp dword ptr [ebp-8],1
00401039 je main+39h (00401049)
0040103B cmp dword ptr [ebp-8],2
0040103F je main+48h (00401058)
00401041 cmp dword ptr [ebp-8],3
00401045 je main+57h (00401067)
00401047 jmp main+64h (00401074)
00401049 push offset string "11" (00420f24)
0040104E call printf (004010b0)
00401053 add esp,4
00401056 jmp main+64h (00401074)
00401058 push offset string "22" (0042012c)
0040105D call printf (004010b0)
00401062 add esp,4
00401065 jmp main+64h (00401074)
00401067 push offset string "33" (0042001c)
0040106C call printf (004010b0)
00401071 add esp,4
第二种:不使用SWITCH
char * lz_tmp[3];
lz_tmp[0] = "11";
lz_tmp[1] = "22";
lz_tmp[2] = "33";
printf("%s",lz_tmp[0]);
对应的汇编
0401010 push ebp
00401011 mov ebp,esp
00401013 sub esp,4Ch
00401016 push ebx
00401017 push esi
00401018 push edi
00401019 lea edi,[ebp-4Ch]
0040101C mov ecx,13h
00401021 mov eax,0CCCCCCCCh
00401026 rep stos dword ptr [edi]
00401028 mov dword ptr [ebp-0Ch],offset string "11" (00420f24)
0040102F mov dword ptr [ebp-8],offset string "22" (0042012c)
00401036 mov dword ptr [ebp-4],offset string "33" (0042001c)
0040103D mov eax,dword ptr [ebp-0Ch]
00401040 push eax
00401041 push offset string "%s" (004207b0)
00401046 call printf (004010b0)
0040104B add esp,8