汇编中如何实现switch case 语句?

yejinwei 2008-04-10 02:25:13
在汇编中如何实现switch case语句的功能,如果我们用if-else形式去判断的话当case很多的时候效率就会比较慢,而在CASE是顺序相连时我们可以使用跳转表,但问题就是当case不顺序相连且case语句较多和两个case间相差很大时,我们怎样处理?谢谢!
...全文
1115 点赞 收藏 4
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
一般都是用cmp + je来做的,这种方法最简单,switch的值也不用连续
回复
alan001 2008-04-10
地址数组啊
回复
cnzdgs 2008-04-10
首先需要switch的取值范围是连续的,用一个数组(地址表)储存各个case标号的地址。例如:
switch (n)
{
case 0:
case 1:
case 2:
case 3:
}

AddressTable DD OFFSET Label0,OFFSET Label1,OFFSET Label2,OFFSET Label3

mov esi,n
jmp AddressTable[esi*4]
回复
Yofoo 2008-04-10
比较临近使用 转换表 + 跳转表

相差比较大用二分法if-else
回复
相关推荐
发帖
硬件/系统
创建于2007-09-28

2596

社区成员

VC/MFC 硬件/系统
申请成为版主
帖子事件
创建了帖子
2008-04-10 02:25
社区公告
暂无公告