1. switch语句
switch(a) //其中a为第一个局部变量
{
case 0:
{
printf("a=0");
}
case 1:
{
printf("a=1");
break;
}
case 100:
{
printf("a=100");
}
default:
{
printf("default");
}
}
1. MOV ECX,DWORD PTR SS:[EBP-4] ;把a送到ecx
2. MOV DWORD PTR SS:[EBP-8],ECX ;ecx(a的值)送到 新建的临时变量
3. CMP DWORD PTR SS:[EBP-8],0 ;用新临时变量(a的值)与0比较
4. JE SHORT Console.00401080 ;相等则跳转到第一个分支第10行
5. CMP DWORD PTR SS:[EBP-8],1 ;用新临时变量(a的值)与1比较
6. JE SHORT Console.0040108D ;相等则跳转到第二个分支第13行
7. CMP DWORD PTR SS:[EBP-8],64 ;用新临时变量(a的值)与64h(100)比较
8. JE SHORT Console.0040109C ;相等则跳转到第三个分支第17行
9. JMP SHORT Console.004010A9 ;以上都不符合就跳转到default第20行
10. PUSH OFFSET Console.??_C@_03IMHL@c?$DN0?> ;将静态区“a=0”字符串压栈
11. CALL Console.printf ;调用printf
12. ADD ESP,4 ;恢复调用前的栈
13. PUSH OFFSET Console.??_C@_03CGOM@c?$DN1?>;将静态区“a=1”字符串压栈
14. CALL Console.printf ;调用printf
15. ADD ESP,4
16. JMP SHORT Console.004010B6 ; break语句 跳出switch 到23行
17. PUSH OFFSET Console.??_C@_05LNPA@a?$DN10>;将静态区“a=100”字符串压栈
18. CALL Console.printf ; 调用printf
19. ADD ESP,4
20. PUSH OFFSET Console.??_C@_07FMEP@default>;将静态区“default”字符串压栈
21. CALL Console.printf ; 调用printf
22. ADD ESP,4
23. 之后的语句