| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1366 人关注过本帖
标题:《汇编语言》王爽附注5 公式证明当n<0时貌似有漏洞...
只看楼主 加入收藏
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
结帖率:97.22%
收藏
已结贴  问题点数:100 回复次数:26 
《汇编语言》王爽附注5 公式证明当n<0时貌似有漏洞...
题目太长了打不全,但是公式我看懂了:

1.L<= 65535
2.rem(H/n)<=n-1
由2有:
3 rem(H/n)*65536<=(n-1)*65536

4. rem(H/n)*65536+L<=(n-1)*65536+65535

5. [rem(H/n)*65536+L]/n<=[(n-1)*65536+65535]/n

6. [rem(H/n)*65536+L]/n<=65536-(1/n)
所以[rem(H/n)*65536+L]/n不会产生除法溢出

因为n为除数,所以不会为0,所以65536-(1/n)<=65535
但是细细一想,如果n为负数的话呢?那65536-(1/n)岂不是大于了一个16位寄存器了?
而且如果n比较大的话如n = 3时,65536 - 1/3也同样大于65535,感觉有些错误...
看过汇编语言的童鞋帮帮忙,能不能解析下这个问题,再爆个红贴...
搜索更多相关主题的帖子: 寄存器 而且 童鞋 
2013-02-24 01:12
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
诶哈,貌似又发错地方了....

I have not failed completely
2013-02-24 01:15
Susake
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:女儿国的隔壁
等 级:贵宾
威 望:23
帖 子:2288
专家分:6481
注 册:2012-12-14
收藏
得分:2 
haa

仰望星空...........不忘初心!
2013-02-24 01:37
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:2 
先留个脚印等接分

授人以渔,不授人以鱼。
2013-02-24 01:40
青春无限
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江苏
等 级:贵宾
威 望:24
帖 子:3451
专家分:19340
注 册:2012-3-31
收藏
得分:2 
接分看看

学 会看代码…学习写程序…学会搞开发…我的目标!呵呵是不是说大话啊!!一切皆可能
2013-02-24 09:29
信箱有效
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:9
帖 子:1102
专家分:4268
注 册:2012-6-19
收藏
得分:0 
切分
2013-02-24 11:28
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
求看过汇编语言的童鞋们解答啊,没看过的也可以去度娘那查查208页和附注5的公式证明,是不是n不表示负数和分数?可是那里只声明了n!=0啊...

I have not failed completely
2013-02-24 11:42
果沫
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:198
专家分:960
注 册:2013-1-30
收藏
得分:2 
貌似很厉害的样子,前排围观
2013-02-24 12:00
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:2 
估计很多 例子都是不考虑 那么全面的吧

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-02-24 12:12
清微御宇
Rank: 6Rank: 6
来 自:开封
等 级:侠之大者
威 望:2
帖 子:318
专家分:497
注 册:2012-1-15
收藏
得分:0 
[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所得商未超过字长不会溢出!

Stay hungry , Stay foolish!
2013-02-24 12:13
快速回复:《汇编语言》王爽附注5 公式证明当n<0时貌似有漏洞...
数据加载中...
 
   



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

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