逆向还原除法有符号非2的幂的第二种优化

从代码上来看,基本和有符号非2的幂的第一种优化一样,可是0x003F103F处的加法却很奇怪,请注意0x003F1036的乘法是否符号乘法,而它的操作数是一个负数,但是实际上我想要的是一个无符号数,所以0x003F103F处的加法是为了把这个负数变成无符号数。

接下来我们看看它是如何完成这个操作的

0x003F1036处的88888889实际是FFFFFFFF88888889,它等于88888889-232

然后乘以被除数x等于(88888889232)x

要想实现x88888889就的在0x003F1036代码的基础上加上x232(88888889232)x+x232=x88888889(你减了多少份就要加多少份,比如你要+5,但你只能-3,这时候你只需加上个8就行了,减了多少个3就加几个8)

后面就和有符号非2的幂的第一种优化一样了,

实际上这个汇编代码表示的含义是:

​ 从scanf中获取被除数的值,然后除以一个数再打印输出,而这个数等于2nM=2350x88888889=34,359,738,368/2,290,649,225=14.999999996944097802665530336711

14.999999996944097802665530336711=15

本文作者:乘舟凉

本文链接:https://www.cnblogs.com/czlnb/p/15711749.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   乘舟凉  阅读(53)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起