当前位置: 首页 > news >正文

由汇编代码确定switch语句

int  switch2(int x)  
{int result=0;switch(x){/* switch语句主体缺失 */}return result;
}

在编译函数时,GCC为程序的初始部分以及跳转表生成了如下汇编代码。

1     MOVL  8(%ebp),  %eax     ;x位于相对于寄存器%ebp偏移量为8的地方。

2    ADDL   $2,  %eax

3   CMPL  $6,  %eax

4   JA     .L2

5   JMP   *.L8(,%eax,4)  

由1、2、3和4行,有0\leqslant x+2\leq 6,  所以x的取值为-2、-1、0、1、2、3和4。

由JA     .L2和.LONG   .L2,知-1为缺省值。

标号.L6有2和3两个情况标号值。

switch2的跳转表

.L8   

.LONG    .L3

.LONG    .L2

.LONG    .L4

.LONG    .L5

LONG    .L6

.LONG    .L6

.LONG    .L7

.L8是分配地址的起始标号,与这个标号对应的地址会作为间接跳转(第5行)的基地址。

相关文章:

  • Digital IC Design Flow
  • C++修炼:C++11(三)
  • Java并发编程实战 Day 14:并发编程最佳实践
  • 华为OD机考-内存冷热标记-多条件排序
  • 强化学习入门:交叉熵方法数学推导
  • 把二级域名绑定的wordpress网站的指定页面
  • 计组_导学
  • java复习 05
  • wpf在image控件上快速显示内存图像
  • 手动给中文分词和 直接用神经网络RNN做有什么区别
  • 如何利用 OpenCV 进行实时图像处理与对象检测
  • Python实例题:Python计算概率论
  • python打卡day48@浙大疏锦行
  • MCP(Model Context Protocol)模型上下文协议 番外篇 2025-03-26 更新
  • 鸿蒙学习笔记01
  • 第三章支线三 ·异步幻境 · 时间之缝的挑战
  • Redis 知识点一
  • 进程优先级
  • Spring注解开发
  • 原型对象(Prototype)详解
  • 人和做网站/无经验能做sem专员
  • 一个公司做网站需要注意什么/seo模拟点击工具
  • 小程序制作流程微信/河北百度竞价优化
  • wordpress 字体/厦门seo关键词
  • 建设网站培训/网站百度关键词排名软件
  • 新浪云服务器做网站/软文是什么意思?