//示例函数cf319intcf319(int x,int operation){int y;//多路分支switch(operation){case1:
y =3* x;break;case2:
y =5* x +6;break;case4:case5:
y = x * x;break;case8:
y = x * x +4* x;break;default://0 3 6 7 9 10 ...
y = x;}if(y >1000)
y =1000;return y;}
进行反汇编
//返汇编(速度最大化)
push ebp
mov ebp, esp
;switch( operation ){
mov eax, DWORD PTR [ebp+12];取得参数operation(case值)
dec eax ;从0开始计算,所以先减去1
cmp eax,7;从0开始计算,最多就是7
ja SHORT LN2cf319 ;超过,则转default;
jmp DWORD PTR LN12cf319[ eax*4];实施多路分支
;
LN6cf319:;case1:; y =3*x;
mov eax, DWORD PTR [ebp+8]
lea eax, DWORD PTR [eax+eax*2]
jmp SHORT LN7cf319 ;break;;
LN5cf319:;case2:; y =5*x+6;
mov eax, DWORD PTR [ebp+8]
lea eax, DWORD PTR [eax+eax*4+6]
jmp SHORT LN7cf319 ;break;
LN4cf319:;case4:; y = x*x ;
mov eax, DWORD PTR [ebp+8]
imul eax, eax
jmp SHORT LN7cf319 ;break;;
LN3cf319:;case8:; y = x*x+4*x;
mov ecx, DWORD PTR [ebp+8]
lea eax, DWORD PTR [ecx+4]
imul eax, ecx
jmp SHORT LN7cf319 ;break;
LN2cf319:;default:; y = x ;
mov eax, DWORD PTR [ebp+8];}
LN7cf319:;if( y >1000)
cmp eax,1000
jle SHORT LN1cf319
; y =1000;
mov eax,1000
LN1cf319:;return y;
pop ebp ;撤销堆栈框架
ret
;
LN12cf319:;多向分支目标地址表
DD LN6cf319 ;case1(DD代表双字,每4个字节存放一个入口地址)
DD LN5cf319 ;case2
DD LN2cf319 ;default
DD LN4cf319 ;case4
DD LN4cf319 ;case5
DD LN2cf319 ;default
DD LN2cf319 ;default
DD LN3cf319 ;case8