由汇编代码确定switch语句

cpp 复制代码
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行,有, 所以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行)的基地址。

相关推荐
斑马1397 小时前
ARM学习笔记(二)——ARM汇编基础
汇编·arm开发·arm
wechatbot88811 小时前
【极客互动】企业微信Spring Boot 调度 SearchContact开发自动添加外部联系人网关
汇编·微信·自动化·企业微信·rpa
星栖与芯1 天前
LiteOS-M 切换汇编逐行图解(5):HalPendSV 任务切换的现场搬运(五阶段逐行)
汇编·stm32·嵌入式硬件·harmonyos
星栖与芯2 天前
LiteOS-M 切换汇编逐行图解(4):中断三件套与 HalTaskSchedule 触发
汇编·stm32·单片机·嵌入式硬件·harmonyos
xx~t2 天前
嵌入式——ARM——汇编2
linux·汇编·arm开发·嵌入式硬件·启动代码
祖力552 天前
ARM汇编LED实验
汇编·arm·imx6ull
索端阳3 天前
ARM Day02 学习总结:ARM汇编基础核心知识点梳理
汇编·学习·arm
xx~t3 天前
嵌入式——ARM——汇编1
linux·汇编·arm开发·嵌入式硬件·arm
索端阳4 天前
初识 ARM Cortex-A7,嵌入式底层入门总结
汇编·嵌入式硬件
ThornArmor5 天前
重铸1996|肉体渲染:关节的裂缝:分段模型积木拼装与未成熟的 RSP 矩阵骨骼动画形变
c语言·汇编·c++·python·硬件架构·游戏机