下面是从编译原理里“偷”来的一点东西:
switch(val){
case 1:...;break;
case 2:...;break;
case 4:...;break;
case 6:...;break;
case 7:...;break;
default:...;
}
对应的汇编是
addr_tab:
dd def_addr
dd addr1
dd addr2
dd def_addr
dd addr4
dd def_addr
dd addr6
dd addr7
cmp val,7
ja def_addr
jmp dword ptr [eax*4+addr_tab]
addr1:
....
addr2:
....
addr4:
....
addr6:
....
addr7:
....
def_addr:
....switch比较if具有速度优势,一个是采取转移地址列表的方法;还有就是switch一般在松散的情况下也多不采取"比较-转移 "的方法,而是用dec(sub)-jz的指令对,后者不仅是指令的长度变短了,速度上也有优势。
关于程序的测试就不贴上来了,应该感兴趣的都会自己去测试的,OK,决定用switch-case!
| 欢迎光临 一起源码网 (https://www.171739.xyz/) | Powered by Discuz! X3.3 |