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

相关推荐
kyle~2 天前
x86 汇编LOCK前缀 --- 硬件架构向软件提供的核心同步原语
汇编·c++·性能优化·硬件架构·实时系统
典典分享指南3 天前
飞书 + 企业微信 + 微信文档多端协同实践指南
汇编·flask·intellij-idea·fastapi
极客互动API8 天前
企业微信 iPad 协议服务搭建与 AI 回调实战
网络·汇编·人工智能·微信·企业微信·ipad
wechatbot88813 天前
极客互动企业微信 SCRM 私域运营实战效果全景
大数据·汇编·微信·自动化·企业微信·rpa
祈禾18 天前
计算机组成原理之编译、汇编、链接、解释
开发语言·汇编·笔记·学习
水饺编程20 天前
AT&T 汇编语言学习笔记开篇语
c语言·汇编·c++
iCxhust20 天前
8088单板机VScode集成开发环境使用方法二(汇编版)
汇编·单片机·微机原理·8088单板机
·薯条大王20 天前
经济实惠玩云服务器|一台云服务器多人共用,子账号配置教程
java·linux·运维·服务器·汇编·c++·python
txg66622 天前
VULOC:基于汇编切片的漏洞定位框架,精准锁定二进制中的危险代码
汇编·人工智能·深度学习·安全·网络安全
sunburn-22 天前
Java 队列全面详解:从入门到面试实战
java·开发语言·汇编·ide·idea