这篇文章主要介绍“c语言怎么实现switch反汇编”,在日常操作中,相信很多人在c语言怎么实现switch反汇编问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”c语言怎么实现switch反汇编”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
在分支较多的时候,switch的效率比if高,在反汇编中我们即可看到效率高的原因
1、当switch存在3个分支时
当去掉break的时候
#include<stdio.h>voidFunction(intx){switch(x){case1:printf("1");case2:printf("2");case3:printf("3");default:printf("4");}}intmain(){Function(2);return0;}
可以看出,此时switch的反汇编代码与if语句无异。当有四个if语句的时候就会生成大表。
步骤:
1、将传进来的数先减去1,再进行比较。判断出该参数是否超过switch语句中最大常量还,即判断参数是直接进入default中还是进入case中
2、 若参数<=max,则用寄存器保留该值。并代入表达式中,通过大表直接跳到相应的地址注意
分支少于四个,则switch无意义,编译器会按if…else…语句进行反汇编case后的常量的顺序不影响大表的生成
将常量值的顺序打乱,观察反汇编代码
正向代码
汇编代码
这里可以看到大表里面都是自己排好序了。
将连续的10项中抹去1项或者2项,观察反汇编有无变化
正向代码是这样的
这里可以看到有几个地址是一样的
可以发现是指向默认的地址。
就会生成小表
步骤:
1、将传进来的参数减去最小值,然后跟最大值相比,如果大于的话就跳到默认的地方,不然就用差值去查小表,然后查大表。
编译器按照if…else…进行反汇编
到此,关于“c语言怎么实现switch反汇编”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注恰卡编程网网站,小编会继续努力为大家带来更多实用的文章!
文件名过长无法重命名怎么办(invalid switch fmount什么意思)
invalidswitchfmount什么意思?invalidswitchfmount的意思是:在操作时的命令无效,具体有...
C/C++如何获取CAN信号
C语言怎么通过二分查找实现猜数字游戏
「ThinkPHP5开发连载71」thinkphp5连载模板内置标签之条件标签一
switch(oled值得买吗 三大提升)
switch(pro什么时候出 发售时间)
C语言数据结构中的线性表怎么使用
C++用户输入、判断语句和switch怎么使用
C++用户输入、判断语句和switch怎么使用本文小编为大家详细介...
C++中如何使用switch语句
C++中如何使用switch语句本文小编为大家详细介绍“C++中如...
C语言的数据结构怎么理解
C语言的数据结构怎么理解这篇文章主要介绍了C语言的数据结构怎么理解...
用户名
密码
记住登录状态 忘记密码?
邮箱
确认密码
我已阅读并同意 用户协议