音夜醉 发表于 2020-7-21 18:30

加密与解密上的除法优化问题求助

就是对除法语句优化,a/b=a*(1/b)
mov ecx,a               ;a就是上式的a
mov eax,2E8BA2E9
imul ecx
sar edx,1
mov ecx,edx
imul ecx
sar edx,1
mov ecx,edx
shr ecx,1F
add edx,ecx            ;edx就存储着最后结果
以下是我的问题:
1.注释说2E8BA2E9是编译器生成的数,那这个数是固定的吗,还是与a或者b有关?
2.为啥说sar edx,1相当于右移了32+1位
3.最后为啥要再加上商的符号位

音夜醉 发表于 2020-7-21 21:26

啊啊啊啊啊,后面的64位除法优化更让人绝望

lthink 发表于 2020-7-26 01:48

本帖最后由 lthink 于 2020-7-26 02:03 编辑

1.M的值取决于除数
2.imul 结果 edx.eax, edx为高32位,eax为低32位,故sar edx,1 为右移33位
3.因为移位是向下取整,如果被除数<0,则结果需要向上取整,故最后结果要+1,如果被除数大于0,则不需要修正

具体参考 <<c++反汇编与逆向分析>> 第四章推导

音夜醉 发表于 2020-7-27 14:54

lthink 发表于 2020-7-26 01:48
1.M的值取决于除数
2.imul 结果 edx.eax, edx为高32位,eax为低32位,故sar edx,1 为右移33位
3.因为移位是 ...

唔,谢谢了
页: [1]
查看完整版本: 加密与解密上的除法优化问题求助