当前位置: 首页 > 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.dtcms.com/a/238580.html

相关文章:

  • 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)详解
  • 二叉树-226.翻转链表-力扣(LeetCode)
  • Argo CD 入门 - 安装与第一个应用的声明式同步
  • OC—UI学习-2
  • 全志v853跑通rtsp sample
  • 阿里云Alibaba Cloud安装Docker与Docker compose【图文教程】
  • 创新滑模观测器设计:改进趋近律与切换函数的永磁同步电机无传感器控制
  • 65、.NET 中DllImport的用途
  • React、Git、计网、发展趋势等内容——前端面试宝典(字节、小红书和美团)
  • Python环境搭建:pyenv-win的使用指南
  • leetcode56-合并区间