在c语言中switch语句会被实现为一个跳转表,跳转表是一个数组,这个数组里面存的都是地址,也就是说只要你传递给它一个i,他就会返回给你,你所需要跳转的地址,这样做得好处就是执行语句的时间和条件的个数无关..不过在gcc里面他也只是条件数大于4个,才会生成这个跳转表.
请看下面的代码:
int switch_eg(int x)
{
int result = x;
switch (x) {
case 100:
result *= 13;
break;
case 102:
result += 10;
/* Fall through */
case 103:
result += 11;
break;
case 104:
case 106:
result *= result;
break;
default:
result = 0;
}
return result;
}
这只是一段简单的switch语句,下面我们用一段c代码来描述汇编代码所要做得事情.
code *jt[7] = {
loc_A, loc_def, loc_B, loc_C,
loc_D, loc_def, loc_D
};
int switch_eg_impl(int x)
{
unsigned xi = x - 100;
int result = x;
if (xi > 6)
goto loc_def;
/* Next goto is not legal C */
goto jt[xi];
loc_A: /* Case 100 */
result *= 13;
goto done;
loc_B: /* Case 102 */
result += 10;
/* Fall through */
loc_C: /* Case 103 */
result += 11;
goto done;
loc_D: /* Cases 104, 106 */
result *= result;
goto done;
loc_def: /* Default case*/
result = 0;
done:
return result;
}
看上面的代码就很清楚了,它会对传进来的值与100进行一个减法,然后再将这个值传进switch语句.
而真实的汇编代码是怎么样的呢,我们可以看看:
switch_eg:
pushl %ebp
movl %esp, %ebp
movl 8(%ebp), %eax //这边得到传进来的参数
leal -100(%eax), %edx //这边将得到的参数和100做差
cmpl $6, %edx //这边和6比较,如果大于6说明下面的条件没有满足的所以默认进入default
jbe .L11
.L2:
popl %ebp
xorl %eax, %eax
ret
.p2align 4,,7
.L11:
jmp *.L7(,%edx,4) //这边也就是我们上面伪码所描述的那个jt[xi]
.section .rodata
.align 4
.align 4
.L7: //这边就是所构造的跳转表.
.long .L3
.long .L2
.long .L4
.long .L5
.long .L6
.long .L2
.long .L6
.text
.L6: // loc_D
imull %eax, %eax
popl %ebp
.p2align 4,,6
ret
.L5: //loc_c
popl %ebp
movl $114, %eax
.p2align 4,,6
ret
.L4: //loc_B
popl %ebp
movl $123, %eax
.p2align 4,,4
ret
.L3: //loc_A
popl %ebp
movl $1300, %eax
.p2align 4,,4
ret
分享到:
相关推荐
重点:所有项目均附赠详尽的SQL文件,这一细节的处理,让我们的项目相比其他博主的作品,严谨性提升了不止一个量级!更重要的是,所有项目源码均经过我亲自的严格测试与验证,确保能够无障碍地正常运行。 1.项目适用场景:本项目特别适用于计算机领域的毕业设计课题、课程作业等场合。对于计算机科学与技术等相关专业的学生而言,这些项目无疑是一个绝佳的选择,既能满足学术要求,又能锻炼实际操作能力。 2.超值福利:所有定价为9.9元的项目,均包含完整的SQL文件。如需远程部署可随时联系我,我将竭诚为您提供满意的服务。在此,也想对一直以来支持我的朋友们表示由衷的感谢,你们的支持是我不断前行的动力! 3.求关注:如果觉得我的项目对你有帮助,请别忘了点个关注哦!你的支持对我意义重大,也是我持续分享优质资源的动力源泉。再次感谢大家的支持与厚爱! 4.资源详情:https://blog.csdn.net/2301_78888169/article/details/141690479 更多关于项目的详细信息与精彩内容,请访问我的CSDN博客!
c Arcgis Engine二次开发C#常用库封装 Arcgis Engine二次开发C#常用库封装
chat-api.yaml.bak
轴承缺陷检测图像分割系统源码和数据集:改进yolo11-SPPF-LSKA
【毕业设计】安卓Android精品课程在线学习系统app设计毕业源码案例设计_pgj
【毕业设计】一个基于Android的电影票购票App
"S32K144 Autosar OS最小系统构建:基于S32DS平台,GCC/IAR编译器驱动,实现OS运行与灯光展示,通用S32K14x系列开发板","基于S32K144的AutoSAR OS最小系统构建:GCC或IAR编译器的实现与应用通用性探讨",s32k144 autosar os最小系统 基于s32ds搭建的autosar os最小系统,编译器采用gcc或者iar(选一),实现os跑起来、亮灯。 各种s32k14x系列开发板通用。 s32k1xx系列如s32k144、s32k146、s32k148均可用。 ,s32k144; autosar os最小系统; 编译系统(gcc/iar选一); s32k1xx系列开发板; s32ds; 亮灯功能; 最小系统构建; 通用开发板; s32k14x系列通用。,"S32K144 Autosar OS最小系统开发:GCC/IAR编译实现亮灯功能"
【毕业设计】基于Java的的CRM客户关系管理信息系统_pgj
2024年度制造业数字化转型典型案例集
在 Python 实现机器学习舆情分析项目中,积累了一线经验。需做好数据预处理,如清洗、分词等;选合适算法,像朴素贝叶斯、LSTM。
内容概要:本文档介绍了一个数据结构课程设计项目——图书关键词检索系统。该项目旨在建立一个高效的图书检索平台,通过对书名中的关键词进行索引来实现快速查找。文档详述了系统的基本功能,包括但不限于:关键词索引表的创建(使用字符串堆存储),书籍检索(基于输入书名获取相关信息),以及书籍出入库管理和常用词的过滤、增添、移除等操作。文档涵盖了总体设计思路、具体的类设计细节如 wdlist 类用于词汇表管理、search 类针对搜索功能封装、book_data 类负责处理书籍基础数据、keylist 类关联书目索引构建及 usual_word 类关于词汇的增删,此外还有详细的实现流程和技术难题解决方案,例如堆排序应用于确保索引表的有效性、如何正确实施文件IO确保数据完整性和一致性等问题。 适用人群:本项目的文档适合有意向从事信息系统开发,尤其是关注高效检索系统的设计实现的技术爱好者或在校学生参考学习。 使用场景及目标:①为读者提供一个便捷高效的电子化馆藏资源管理工具,以便用户快速精准地检索所需书籍;②帮助学习者理解和掌握有关字符串堆存储结构、哈希映射、链表组合等重要知识点及其应用场景;③培养学员解决实际问题的方法论,锻炼他们在实践中灵活运用所学到的知识和技能。 其他说明:文中提及了设计和编码的具体细节,并附带遇到的问题以及采取的应对措施,例如通过加强对数据结构的理解和完善文件读写机制,提高了代码质量和可靠性。此外,文档还强调了在整个开发过程中良好编程习惯养成的重要意义。
"直流电压环境下GIS盆式绝缘子Comsol电场与温度场仿真研究","直流电压环境下GIS盆式绝缘子Comsol电场与温度场综合仿真的研究",直流电压下 GIS 盆式绝缘子Comsol电场,温度场仿真 ,关键词:直流电压;GIS盆式绝缘子;Comsol电场仿真;温度场仿真;,"直流电压下GIS盆式绝缘子Comsol电场与温度场仿真研究"
"深入探究:Comsol锂电池电化学仿真及热管理模型构建,涵盖循环寿命衰减、热失控仿真与锂沉积建模技术",COMSOL锂电池电化学仿真及热管理模型研究:探究锂电池循环寿命衰减与热失控仿真的技术应用,comsol锂电池仿真 电化学仿真,锂电池模拟仿真,锂电池循环寿命衰减,锂电池热管理模型,锂电池热失控仿真,锂沉积建模 ,comsol锂电池仿真; 电化学仿真; 锂电池模拟仿真; 锂电池循环寿命衰减; 锂电池热管理模型; 锂电池热失控仿真; 锂沉积建模,《锂电池仿真与热管理模型研究》
【上传】轻量级 web 文件上传组件,纯js,支持上传进度显示,支持秒传+分片上传+断点续传,支持图片预览及缩放,支持文件夹上传,支持 IE6+、Firefox、Chrome
分享一个能够加载矢量天地图的文件。
前端分析-2023071100789
【毕业设计】微信小程序优惠券商城(淘宝客、多多客),集成领券、信用返现、活动奖励、购物补贴、多级分销等功能,支持淘宝、拼多多、京东、唯品会、蘑菇街_pgj
重点:所有项目均附赠详尽的SQL文件,这一细节的处理,让我们的项目相比其他博主的作品,严谨性提升了不止一个量级!更重要的是,所有项目源码均经过我亲自的严格测试与验证,确保能够无障碍地正常运行。 1.项目适用场景:本项目特别适用于计算机领域的毕业设计课题、课程作业等场合。对于计算机科学与技术等相关专业的学生而言,这些项目无疑是一个绝佳的选择,既能满足学术要求,又能锻炼实际操作能力。 2.超值福利:所有定价为9.9元的项目,均包含完整的SQL文件。如需远程部署可随时联系我,我将竭诚为您提供满意的服务。在此,也想对一直以来支持我的朋友们表示由衷的感谢,你们的支持是我不断前行的动力! 3.求关注:如果觉得我的项目对你有帮助,请别忘了点个关注哦!你的支持对我意义重大,也是我持续分享优质资源的动力源泉。再次感谢大家的支持与厚爱! 4.资源详情:https://blog.csdn.net/2301_78888169/article/details/141789959 更多关于项目的详细信息与精彩内容,请访问我的CSDN博客!
人力资源+大数据+薪酬报告+涨薪调薪,在学习、工作生活中,越来越多的事务都会使用到报告,通常情况下,报告的内容含量大、篇幅较长。那么什么样的薪酬报告才是有效的呢?以下是小编精心整理的调薪申请报告,欢迎大家分享。相信老板看到这样的报告,一定会考虑涨薪的哦。
【毕业设计】基于Java开发的虚拟路由器_pgj