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行)的基地址。