当前位置: 代码迷 >> 汇编语言 >> 一段switch case代码 求解释,该如何处理
  详细解决方案

一段switch case代码 求解释,该如何处理

热度:5753   发布时间:2013-02-26 00:00:00.0
一段switch case代码 求解释
mov [ebp+var_4], 1
mov eax, [ebp+var_4]
mov [ebp+var_8], eax
cmp [ebp+var_8], 3 ; switch 4 cases
ja short loc_40107B
mov ecx, [ebp+var_8]
jmp ds:off_40108E[ecx*4] ;这句话到底是什么意思 ecx * 4 数组么 但是为什么是乘号呢



------解决方案--------------------------------------------------------
off_40108E 处存放的是对应的各个入口地址,形成一个数组,ecx (来自 [ebp+var_8]) 就是被 switch 的变量了。
为什么要 *4 ,这是因为在 32 位环境下,一个地址也就是 32 位的,要占用 4 个字节,即 0 个地址从 0 开始的话, 1 的地址则是从 4 开始 (0,1,2,3 四个字节被 0 地址所占用),2 的从 8 ....
------解决方案--------------------------------------------------------
应该是比例因子。用于32位或32位汇编中存储器寻址。 通常是1,2,4或8
  相关解决方案