SWITCH语句(跳转表的结构)
来源:互联网 发布:台球软件 编辑:程序博客网 时间:2024/06/05 23:43
--- e:/program/test/main.cpp -----------------------------------------------------------------------------------------------------------------------------
1: #include <iostream>
2: using namespace std;
3:
4:
5: int main()
6: {
00401600 push ebp
00401601 mov ebp,esp
00401603 sub esp,54h
00401606 push ebx
00401607 push esi
00401608 push edi
00401609 lea edi,[ebp-54h]
0040160C mov ecx,15h
00401611 mov eax,0CCCCCCCCh
00401616 rep stos dword ptr [edi]
7: int operand;
8: int a=3, b=2;
00401618 mov dword ptr [ebp-8],3
0040161F mov dword ptr [ebp-0Ch],2
9: int result;
10: cin>>operand;
00401626 lea eax,[ebp-4]
00401629 push eax
0040162A mov ecx,offset std::cin (00477878)
0040162F call @ILT+535(std::basic_istream<char,std::char_traits<char> >::operator>>) (0040121c)
11: switch(operand)
12: {
00401634 mov ecx,dword ptr [ebp-4]
00401637 mov dword ptr [ebp-14h],ecx
0040163A cmp dword ptr [ebp-14h],8 SWITCH语句的特征
0040163E ja $L7394+0Ch (004016c7)
00401644 mov edx,dword ptr [ebp-14h]
00401647 jmp dword ptr [edx*4+4016DAh]跳转表基地址
13: case 0:
14: result=a+b;
0040164E mov eax,dword ptr [ebp-8]
00401651 add eax,dword ptr [ebp-0Ch]
00401654 mov dword ptr [ebp-10h],eax
15: break;
00401657 jmp $L7394+0Ch (004016c7)
16: case 1:
17: result=2*a+b;
00401659 mov ecx,dword ptr [ebp-8]
0040165C mov edx,dword ptr [ebp-0Ch]
0040165F lea eax,[edx+ecx*2]
00401662 mov dword ptr [ebp-10h],eax
18: break;
00401665 jmp $L7394+0Ch (004016c7)
19: case 2:
20: result=3*a+b;
00401667 mov ecx,dword ptr [ebp-8]
0040166A imul ecx,ecx,3
0040166D add ecx,dword ptr [ebp-0Ch]
00401670 mov dword ptr [ebp-10h],ecx
21: break;
00401673 jmp $L7394+0Ch (004016c7)
22: case 3:
23: result=4*a+b;
00401675 mov edx,dword ptr [ebp-8]
00401678 mov eax,dword ptr [ebp-0Ch]
0040167B lea ecx,[eax+edx*4]
0040167E mov dword ptr [ebp-10h],ecx
24: break;
00401681 jmp $L7394+0Ch (004016c7)
25: case 4:
26: result=5*a+b;
00401683 mov edx,dword ptr [ebp-8]
00401686 imul edx,edx,5
00401689 add edx,dword ptr [ebp-0Ch]
0040168C mov dword ptr [ebp-10h],edx
27: break;
0040168F jmp $L7394+0Ch (004016c7)
28: case 5:
29: result=6*a+b;
00401691 mov eax,dword ptr [ebp-8]
00401694 imul eax,eax,6
00401697 add eax,dword ptr [ebp-0Ch]
0040169A mov dword ptr [ebp-10h],eax
30: break;
0040169D jmp $L7394+0Ch (004016c7)
31: case 6:
32: result=7*a+b;
0040169F mov ecx,dword ptr [ebp-8]
004016A2 imul ecx,ecx,7
004016A5 add ecx,dword ptr [ebp-0Ch]
004016A8 mov dword ptr [ebp-10h],ecx
33: break;
004016AB jmp $L7394+0Ch (004016c7)
34: case 7:
35: result=8*a+b;
004016AD mov edx,dword ptr [ebp-8]
004016B0 mov eax,dword ptr [ebp-0Ch]
004016B3 lea ecx,[eax+edx*8]
004016B6 mov dword ptr [ebp-10h],ecx
36: break;
004016B9 jmp $L7394+0Ch (004016c7)
37: case 8:
38: result=9*a+b;
004016BB mov edx,dword ptr [ebp-8]
004016BE imul edx,edx,9
004016C1 add edx,dword ptr [ebp-0Ch]
004016C4 mov dword ptr [ebp-10h],edx
39: break;
40: default:
41:
42: break;
43:
44: }
45:
46: return 0;
004016C7 xor eax,eax
47: }
004016C9 pop edi
004016CA pop esi
004016CB pop ebx
004016CC add esp,54h
004016CF cmp ebp,esp
004016D1 call __chkesp (00420cd0)
004016D6 mov esp,ebp
004016D8 pop ebp
004016D9 ret
004016DA dec esi
004016DB push ss
004016DC inc eax
004016DD add byte ptr [ecx+16h],bl
004016E0 inc eax
004016E1 add byte ptr [edi+16h],ah
004016E4 inc eax
004016E5 add byte ptr [ebp+16h],dh
004016E8 inc eax
004016E9 add byte ptr [ebx-6EFFBFEAh],al
004016EF push ss
004016F0 inc eax
004016F1 add byte ptr [edi-52FFBFEAh],bl
004016F7 push ss
004016F8 inc eax
004016F9 add byte ptr [ebx-33FFBFEAh],bh
--- No source file ----------------------------------
内存跳转表数据
004016DA 4E 16 40 00 59 16 40 00 67 16 40 00 75 16 40 00 N.@.Y.@.g.@.u.@.
004016EA 83 16 40 00 91 16 40 00 9F 16 40 00 AD 16 40 00 ..@...@...@...@.
004016FA BB 16 40 00 CC CC CC CC CC CC CC CC CC CC CC CC
- SWITCH语句(跳转表的结构)
- C语言的switch语句跳转问题
- switch语句实现页面的跳转
- 《CSAPP》switch语句使用跳转表实现
- 选择结构(switch语句)
- 选择结构语句switch
- 将Switch-case语句转换成循环的表驱动结构的语句
- C语言的选择结构 (if 语句 和 switch 语句)
- (转)选择结构if语句和switch语句的区别
- java switch语句缺少break跳转之后的算法原理
- 选择结构语句---if语句,switch语句
- x86 switch-case 的地址跳转表
- 2.5 分支结构-switch语句
- switch语句结构及应用
- Java分支结构switch语句
- 条件结构之switch语句
- 很结构化的C语言switch语句程序设计
- 多分支选择结构与switch语句的运用.cpp
- 解释Android基本概念和构架的好资料
- html
- 欣闻荣获CSDN的MVB荣誉
- 实现一个编译器(一)CFG的定义
- 通信运营商在信息化路上举步维艰
- SWITCH语句(跳转表的结构)
- i++,i--执行效率
- Ext的gridpanel动态重新加载columnModel与store
- Linux学习笔记(4)----在Ubuntu下使用FileZilla的中文支持问题的解决
- 利用wmi获取杀软信息
- java 和 jstl多次替换js中的敏感字符
- 如何在SharePoint中Debug
- Symbian OS 打包文件(.pkg)详解及问题总结
- SimpleDateFormat