由汇编代码确定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行)的基地址。

相关推荐
SundayBear12 小时前
嵌入式进阶:C语言内联汇编
c语言·开发语言·汇编
CC-NX2 天前
32位汇编:实验5算数运算类指令使用
汇编·win32·算数运算
伐尘2 天前
【汇编】RAX,eax,ax,ah,al 关系
汇编
CHANG_THE_WORLD2 天前
c语言位运算 汇编代码分析
c语言·开发语言·汇编
CHANG_THE_WORLD2 天前
if条件语句 三目运算符 汇编分析
汇编·算法·条件语句·if 语句·汇编分析·条件语句汇编分析
CHANG_THE_WORLD3 天前
有符号数和无符号数的 汇编视角 区别
汇编
南飞测绘视界4 天前
【编号220】中国国内生产总值历史数据汇编1952-2021合订本(PDF扫描版)
汇编·pdf·年鉴
Ayanami_Reii6 天前
汇编和C语言结构
c语言·汇编·笔记
脑子慢且灵8 天前
C语言与Java语言编译过程及文件类型
java·c语言·开发语言·汇编·编辑器
日更嵌入式的打工仔12 天前
汇编与反汇编
汇编