[发明专利]一种处理C语言SWITCH/CASE语句的方法有效
申请号: | 201710300450.6 | 申请日: | 2017-04-28 |
公开(公告)号: | CN107203403B | 公开(公告)日: | 2020-08-07 |
发明(设计)人: | 李朝波 | 申请(专利权)人: | 李朝波 |
主分类号: | G06F8/41 | 分类号: | G06F8/41 |
代理公司: | 广州知友专利商标代理有限公司 44104 | 代理人: | 宣国华 |
地址: | 511400 广东省广州市番*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 处理 语言 switch case 语句 方法 | ||
本发明公开一种处理C语言SWITCH/CASE语句的方法,在指令系统中增加字节型查找指令、半字型查找指令、散转指令;首先将若干个待查找的CASE常数项按照顺序填满所述的字节型查找指令或半字型查找指令的第二源操作数和把SWITCH表达式的值装入所述的字节型查找指令或半字型查找指令第一源寄存器中,执行所述的字节型查找指令或半字型查找指令后,在其目的寄存器就得到相等标记z和位置编号n;然后将查找指令的第二源操作数的CASE常数项所对应的跳转矢量装入散转指令的第二源操作数中,再使用上述的查找指令的结果值来索引散转指令的第二源操作数中的跳转矢量,并完成分支转移。使用本发明来编译C语言SWITCH/CASE语句时,能够产生简洁高效的代码,以提高计算机的执行速度。
技术领域
本发明属于计算机领域,具体涉及一种处理C语言SWITCH/CASE语句的方法。
背景技术
C语言SWITCH/CASE语句是大家经常用到的语句,从字面上看程序逻辑清晰,结构一目了然,很受程序员欢迎,但是基于现有的指令集,C编译器编译C语言SWITCH/CASE语句成汇编指令时相当费劲。目前C编译器处理C语言SWITCH/CASE语句时通常使用两种方法,它们是:列表驱动法和逐项查找法。其中列表驱动法是在程序存贮器中建立一个常数的数组,该数组是所有CASE常数项所对应的跳转矢量的集合,所以该数组被称为CASE跳转矢量表,某个CASE常数项对应的跳转矢量在该表格的位置等于该CASE常数项与最小CASE常数项的差值,然后使用SWITCH的表达式的值减去最小CASE常数项的差值去索引所述的CASE跳转矢量表,从而得到跳转的目标,这种方法处理速度很快,也是C编译器优先使用的方法;而逐项查找法是使用SWITCH的表达式的值和CASE常数项逐个比较,如果有相等,则跳转到该CASE常数项所对应的地址,也就是说C编译器使用if/else的方法从上往下逐个比较,从而找到跳转的目标,这就造成了越靠后的case项查找的时间就越长,所以这种方法处理速度很慢。
虽然列表驱动法具有快速的优点,但是那是用空间换取时间。该方法的缺点是CASE跳转矢量表的规模往往很大,其大小等于CASE常数项的最大值与最小值的差值+1,在实际应用中,CASE常数项的离散性往往很大,没有规律可循,那么CASE跳转矢量表就有很多空白项,这会浪费很多程序空间。如果浪费程序的空间过多,C编译器只好使用逐项查找法进行编译。另外,如果case项比较少,C编译器也会使用逐项查找法进行编译。
例如下面这段C语言代码,如果使用列表驱动法进行编译,则CASE跳转矢量表长达247项(246=0xf7-0x01+1),而实际有用的case项只有4个(0x01,0x22,0x4c,0xf7),显然浪费的程序空间太多了,所以C编译器就会使用逐项查找法进行编译。
汇编代码如下:(逐项查找法,使用ARM指令集)
从上面的汇编代码可以看出,在使用逐项查找法时,越靠后的case项查找的时间就越长,因此改善逐项查找法的执行效率具有重要意义。
观察C程序中的SWITCH/CASE语句不难发现,在绝大多数SWITCH/CASE语句中:SWITCH表达式的值的字长为8位或16位,CASE常数项所对应的跳转都是小范围相对跳转,而且都是往前跳转。
发明内容
本发明提供一种处理C语言SWITCH/CASE语句的方法,能够产生简洁高效的代码,以提高计算机的执行速度。
一种处理C语言SWITCH/CASE语句的方法,该方法包括如下内容:
在现有的指令系统中增加3条指令,它们是字节型查找指令、半字型查找指令、散转指令;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于李朝波,未经李朝波许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710300450.6/2.html,转载请声明来源钻瓜专利网。