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