当前位置: 首页 > 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行)的基地址。

http://www.xdnf.cn/news/937639.html

相关文章:

  • 第13次01:广告及商品数据呈现
  • (LeetCode 每日一题)386. 字典序排数(递归、深度优先搜索dfs || 递推)
  • 动态生成 PV 的机制:使用 NFS-Client Provisione
  • 深入解析Golang反射机制与高效文件操作实践
  • TCP相关问题 第一篇
  • Windows权限提升篇数据库篇MYSQLMSSQLORACLE自动化项目
  • 管理数据洪流:自动化处理与归档每日数据文件的策略与实践
  • BOM(Browser Object Model)核心对象手册
  • CNN核心机制深度解析:卷积池化原理 PyTorch实现经典网络
  • MSYS2 环境配置与 Python 项目依赖管理笔记
  • Z-FOLD: A Frustratingly Easy Post-Training Quantization Scheme for LLMs
  • MS39531N 是一款正弦驱动的三相无感直流电机驱动器,具有最小振动和高效率的特点
  • 深入理解 Java 的反射、注解与动态代理
  • 基于Python学习《Head First设计模式》第十章 状态模式
  • JavaScript数组扁平化(Array Flattening)全解析:从基础到进阶的9种实现方式及深度对比
  • C++.OpenGL (17/64)深度测试(Depth Testing)
  • Python Wheel 打包基本原理详解
  • LangChain工具集成实战:构建智能问答系统完整指南
  • RoboDK 自定义机器人
  • 当前市场环境下,软件行业的突围之道:技术演进与商业模式重构
  • 工厂方法模式和抽象工厂方法模式的battle
  • 135. 分发糖果
  • 【P2P】直播网络拓扑及编码模式
  • 【2025年6月8日】Claude 4 国内使用全攻略
  • 【优选算法】模拟 问题算法
  • CompletableFuture+线程池使用案列
  • 直观地理解程序的堆和栈
  • Go 语言中的内置运算符
  • LLMs之Structured Output:vLLM 结构化输出指南—从约束生成到自动解析与高效实现
  • 算法工程师认知水平要求总结