| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1366 人关注过本帖
标题:《汇编语言》王爽附注5 公式证明当n<0时貌似有漏洞...
只看楼主 加入收藏
jokerskill
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:392
专家分:554
注 册:2012-3-4
收藏
得分:2 
但是公式我看懂了:有了公式你就好编程了

2013-02-24 12:45
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
以下是引用清微御宇在2013-2-24 12:13:16的发言:

[rem(H/n)*65536+L]/n=int( [rem(H/n)*65536+L]/n)(商)+rem( [rem(H/n)*65536+L]/n)(余数)
由 [rem(H/n)*65536+L]/n<=65536-(1/n)得
int( [rem(H/n)*65536+L]/n)<=65535所得商未超过字长不会溢出!
嗯...那右边就是int(65536-(1/n))
这怎么算啊...怎么解析成65535,而且左边的解析式只是[rem(H/n)*65335+L]/n,木有int啊
即便int( [rem(H/n)*65536+L]/n)<=65535
[rem(H/n)*65536+L]/n也未必<=65535啊
求详细过程...

I have not failed completely
2013-02-24 13:24
清微御宇
Rank: 6Rank: 6
来 自:开封
等 级:侠之大者
威 望:2
帖 子:318
专家分:497
注 册:2012-1-15
收藏
得分:0 
回复 12楼 神龙赖了
[rem(H/n)*65536+L]/n的结果应该当做商和余数的形式看待(以为div或idiv指令只能得到余数和商,判断溢出也是根据商的大小决定的)[rem(H/n)*65536+L]/n<=65536-(1/n)那么n>0时[rem(H/n)*65536+L]/n的结果为商(必然<=65535)和一个小于n的余数!
对了,因为n!=0再3和4得n>0;
如果还是不行
今 [rem(H/n)*65536+L]/n=65536-(1/n)那么[rem(H/n)*65536+L]/n的商为65535余数为n-1;

Stay hungry , Stay foolish!
2013-02-24 13:51
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
以下是引用清微御宇在2013-2-24 13:51:00的发言:

[rem(H/n)*65536+L]/n的结果应该当做商和余数的形式看待(以为div或idiv指令只能得到余数和商,判断溢出也是根据商的大小决定的)[rem(H/n)*65536+L]/n<=65536-(1/n)那么n>0时[rem(H/n)*65536+L]/n的结果为商(必然<=65535)和一个小于n的余数!
对了,因为n!=0再3和4得n>0;
如果还是不行
今 [rem(H/n)*65536+L]/n=65536-(1/n)那么[rem(H/n)*65536+L]/n的商为65535余数为n-1;
有点懵了...不介意一个一个问题的来吧...就当你不介意了啊
对了,因为n!=0再3和4得n>0;
3和4是第3步和第4步吗?我并没有看出来那里能证明n>0,希望解答

I have not failed completely
2013-02-24 14:02
wanjiawei
Rank: 4
等 级:业余侠客
帖 子:61
专家分:213
注 册:2012-11-16
收藏
得分:2 
围观
2013-02-24 14:10
清微御宇
Rank: 6Rank: 6
来 自:开封
等 级:侠之大者
威 望:2
帖 子:318
专家分:497
注 册:2012-1-15
收藏
得分:0 
回复 14楼 神龙赖了
写错了4步到5补两边同除n

Stay hungry , Stay foolish!
2013-02-24 14:11
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
这作者耍赖啊...

I have not failed completely
2013-02-24 14:19
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
[rem(H/n)*65536+L]/n=65536-(1/n)那么[rem(H/n)*65536+L]/n的商为65535余数为n-1

为何商为65535余数为n-1

I have not failed completely
2013-02-24 14:31
清微御宇
Rank: 6Rank: 6
来 自:开封
等 级:侠之大者
威 望:2
帖 子:318
专家分:497
注 册:2012-1-15
收藏
得分:86 
回复 18楼 神龙赖了
这个说的不严谨,当n>=1时
[rem(H/n)*65536+L]/n=65536-(1/n)那么[rem(H/n)*65536+L]/n的商为65535余数为n-1//这个你自己展开一下就行了
[rem(H/n)*65536+L]/n=65536-(1/n);
[rem(H/n)*65536+L]=65536n-1;
[rem(H/n)*65536+L]/n=(65536n-1)/n这个商为65535余数为n-1可以看出来了吧
当0<n<1时可以类推下商会变的更小!所以更不会溢出!
还有作者也木有耍赖,他一直吧里面的数据当做无符号数处理(例如x<65536*65536……),所以n就不可能为负;

Stay hungry , Stay foolish!
2013-02-24 14:56
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
啊...脑细胞都死光了...不过终于弄懂了...
ax寄存器只负责存商,不负责存余数,所以商最大为65535,真不知道是哪位牛人能想出这么牛逼的公式...

I have not failed completely
2013-02-24 16:12
快速回复:《汇编语言》王爽附注5 公式证明当n<0时貌似有漏洞...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.032731 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved