加密与解密上的除法优化问题求助
就是对除法语句优化,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.最后为啥要再加上商的符号位 啊啊啊啊啊,后面的64位除法优化更让人绝望 本帖最后由 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++反汇编与逆向分析>> 第四章推导 lthink 发表于 2020-7-26 01:48
1.M的值取决于除数
2.imul 结果 edx.eax, edx为高32位,eax为低32位,故sar edx,1 为右移33位
3.因为移位是 ...
唔,谢谢了
页:
[1]