- 注册时间
- 2008-2-6
- 最后登录
- 1970-1-1
- 威望
- 星
- 金币
- 枚
- 贡献
- 分
- 经验
- 点
- 鲜花
- 朵
- 魅力
- 点
- 上传
- 次
- 下载
- 次
- 积分
- 51579
- 在线时间
- 小时
|
发表于 2009-2-7 15:00:52
|
显示全部楼层
宝宝的这个题目如果用嵌入汇编,则这么做,
当然可能存在化简, 否则,不如他外部汇编指令少
-
- //0 9B 0
- //1-2 6B 9
- //3 9B 15
- //4-5 6B 24
- //6 9B 30
- //7-8 6B 39
- //9 12B 45
- //10-12 6B 57
- //13 12B 63
- //14-15 6B 75
- //16 12B 81
- //17-18 6B 93
- //19 12B 99
- //20-22 6B 111
- //23 12B 117
- //24-25 6B 129
- //26 12B 135
- //27-28 6B 147
- //29 12B 151
- //30-31 6B 163
复制代码
-
- jmpTable[32] = { 0, 9, 9, 15, 24, 24, 30, 39, 39, 45, 57, 57, 57, 63, 75, 75, 81, 93, 93, 99, 111, 111, 111, 117, 129, 129, 135, 147, 147, 151, 163, 163 }
复制代码
-
- mov ecx, n
- bsr eax, ecx
- mov edx, offset jmpBegin
- add edx, [jmpTable + eax * 4]
- jmp edx
- jmpBegin:
- //0 9B
- cmp ecx, 1
- sbb eax, eax
- add eax, 1
- ret
- //1-2 6B
- mov eax, 1
- ret
- //3 9B
- cmp ecx, 10 //比较的数值小于256,是3B,否则是6B
- sbb eax, eax
- add eax, 2 //加的数值小于256, 是3B,否则是6B
- ret
- //4-5 6B
- mov eax, 2 //5B
- ret //1B
- //6 9B
- cmp ecx, 100
- sbb eax, eax
- add eax, 3
- ret
- //7-8 6B
- mov eax, 3
- ret
- //9 12B
- cmp ecx, 1000
- sbb eax, eax
- add eax, 4
- ret
- //10-12 6B
- mov eax, 4
- ret
- //13 12B
- cmp ecx, 10000
- sbb eax, eax
- add eax, 5
- ret
- //14-15 6B
- mov eax, 5
- ret
- //16 12B
- cmp ecx, 100000
- sbb eax, eax
- add eax, 6
- ret
- //17-18 6B
- mov eax, 6
- ret
- //19 12B
- cmp ecx, 1000000
- sbb eax, eax
- add eax, 7
- //20-22 6B
- mov eax, 7
- ret
- //23 12B
- cmp ecx, 10000000
- sbb eax, eax
- add eax, 8
- ret
- //24-25 6B
- mov eax, 8
- ret
- //26 12B
- cmp ecx, 100000000
- sbb eax, eax
- add eax, 9
- ret
- //27-28 6B
- mov eax, 9
- ret
- //29 12B
- cmp ecx, 1000000000
- sbb eax, eax
- add eax, 10
- ret
- //30-31 6B
- mov eax, 10
- ret
复制代码 |
|