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

相关推荐
山楂树の9 小时前
【计算机系统原理】Intel 与 AT&T 汇编指令格式转换
汇编·学习·缓存
浩浩测试一下1 天前
RadASM 汇编工具从下载汉化配置汇编运行 --->>>>环境详细说明
汇编·asm·radasm·pe壳
给点sun,就shine2 天前
交叉编译链
汇编·物联网
’长谷深风‘3 天前
嵌入式 ARM 开发入门解析
汇编·arm开发·cpu·cortex
senijusene3 天前
ARM 汇编指令:
汇编·arm开发
2401_858936884 天前
ARM 汇编核心知识点精讲:从基础指令到实战应用
汇编·arm开发
always_TT4 天前
理解编译过程:预处理→编译→汇编→链接
汇编·microsoft
昵称只能一个月修改一次。。。4 天前
汇编相关知识
汇编
’长谷深风‘4 天前
嵌入式ARM开发入门解析2
汇编·arm开发·arm指令集·立即数
剑心诀4 天前
【8086汇编】第一个程序
汇编