下面的C函数省略了 switch语句的主体。在C代码中,情况标号是不连续的,而有些情况有多个标号。void switch2(long x, long *dest) { long val = 0; switch (x) { Body of switch statement omitted } *dest = val; }
在编译该函数时,GCC为程序的初始部分生成了以下汇编代码,变量x在寄存%rdi中:
void switch2(long x, long *dest) x in %rdi switch2: addq $q,%rdi cmpq $8,%rdi ja .L2 jmp *.L4(,%rdi,8)
为跳转表生成以下代码:
.L4: .quad .L9 .quad .L5 .quad .L6 .quad .L7 .quad .L2 .quad .L7 .quad .L8 .quad .L2 .quad .L5
根据上述信息回答下列问题:
A. switch语句内情况标号的值分别是多少?
B.C代码中哪些情况有多个标号?