练习题一、写一个switch语句,不生产大表也不生产小表,贴出对应的反汇编
void pula(int x)
{
switch(x)
{
case 1:
printf("A");
break;
case 2:
printf("B");
break;
case 3:
printf("C");
break;
default:
printf("无法找到");
break;
}
}
反汇编代码:
练习二、写一个switch语句,只生成大表,贴出对应的反汇编
void pula(int x)
{
switch(x)
{
case 1:
printf("A");
break;
case 2:
printf("B");
break;
case 3:
printf("C");
break;
case 4:
printf("D");
break;
case 5:
printf("E");
break;
default:
printf("无法找到");
break;
}
}
反汇编代码:
练习题三、写一个switch语句,生成大表和小表,贴出对应的反汇编
oid pula(int x)
{
switch(x)
{
case 1:
printf("A");
break;
case 2:
printf("B");
break;
case 50:
printf("D");
break;
case 51:
printf("E");
break;
default:
printf("无法找到");
break;
}
}
反汇编代码:
switch语句总结
编译器会根据相应的条件生成多种代码1.2.3.
1、当条件数量不多或者条件差值太乱时就会生成第一种代码判断跳转判断条件的代码。
2、当条件数量达到一定数量且数字时连续有规律的就会生成第二种使用一个大表来记录对应条件地址的代码。
3、当条件数量达到一定数量且数字时连续有规律但是中间缺少几个数字的就会生成第二种使用一个大表来记录对应条件地址的代码,缺少的数字在大表中对应的地址全部改为default的地址。
4、当条件数量达到一定数量且数字时连续有规律但是中间缺少较多数字的就会生成第三种使用一个小表来记录中间差的值对应地址全部改为大表中记录的default的地址。然后取出这个值在去大表中查表。