07 switch

1. case分支个数小于等于3时,有多个subjz引导代码,它们之间没有具体代码,这是和if结构的区别。

 

release版的defalut紧随其后:

 

 

debug版是jmpdefault

 

 

2. case分支间隔较为均匀时,所有跳转地址组成表,通过下标jmp到对应的地址。

 

 

3. case分支间隔较大,但在256范围内,采用类似位图调色板的方法,保存INDEX_TABLECASE_TABLE。在INDEX_TABLE中用1个字节保存下标,所以超出1个字节表示范围的无法用此方案。

 

 

INDEX_TABLE6占多数,认定为default红框中的数字代表在CASE_TABLE中的下标。由上图可知,case下标最小100,最大167,故CASE_TABLE的第0项重命名为CASE_100

第二个红框中数字是1,在INDEX_TABLE中下标为11,故CASE_TABLE的第0项重命名为CASE_111,以此类推。

 

 

4. 如果case分支间隔过大,超出1字节表示范围,会组织成AVL树的形式

 

 

 

 

 

posted @ 2021-01-05 14:54  八转达人  阅读(70)  评论(0编辑  收藏  举报