. : : Assembly Language : : .
|
首页
|
我提出的问题
|
我参与的问题
|
我的收藏
|
消息中心
|
游客 登录
|
刷新
|
提问
|
未解决
|
已解决
|
精华区
|
搜索
|
《汇编语言》论坛
->
包含多个段的程序
管理员:
assembly
[
回复本贴
]
[
收藏本贴
] [
管理本贴
] [
关闭窗口
]
主题 : :
请问(N/16+1)*16这个公式大家是怎么得到的?是通过观察DATA中的数据吗
[待解决]
回复[
7
次 ] 点击[
908
次 ]
laowang
[帖 主]
[ 发表时间:2012-05-17 22:34 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:0
信誉值:0
注册日期:2012-05-09 18:59
如是。
tomato
[第
1
楼]
[ 回复时间:2012-05-18 22:59 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:405
信誉值:0
注册日期:2008-01-19 14:51
实验观察得出来的,书中的那个实验就是让我们实验,然后观察。
asura-king
[第
2
楼]
[ 回复时间:2012-10-14 15:29 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:0
信誉值:0
注册日期:2012-09-16 00:19
不过这个公式只适用N不是16的整倍数的情况下。
如果N是16的整倍数的话是不正确的,用debug看下如果N=16的话这个段的实际占用空间就是16而不是32.
正确的应该是(N+15)/16*16
asura-king
[第
3
楼]
[ 回复时间:2012-10-14 15:29 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:0
信誉值:0
注册日期:2012-09-16 00:19
不过这个公式只适用N不是16的整倍数的情况下。
如果N是16的整倍数的话是不正确的,用debug看下如果N=16的话这个段的实际占用空间就是16而不是32.
正确的应该是(N+15)/16*16
aspade
[第
4
楼]
[ 回复时间:2012-11-15 12:20 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:0
信誉值:0
注册日期:2012-11-15 09:42
(N/16+1)*16这个公式是肯定不对的,本来应该表达的意思是roundup到对应的单位数。应该使用(N+10H-1)&~(10H-1)。这是一个很常用的字节对齐的函数,在C或C++的库里内存分配的源文件里经常用到。
假如你想向上对齐到哪个大小为K,则(N+K-1)&(K-1)就是向上对齐到K的倍数的结果。比如向上对齐到64(10进制)的话,就是(N+40H-1)&~(40H-1)。
要注意的就是这个K值必须是2的倍数。
jinshuwen
[第
5
楼]
[ 回复时间:2014-05-24 21:25 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:0
信誉值:0
注册日期:2007-12-19 11:15
我觉得也是这样
735013067
[第
6
楼]
[ 回复时间:2014-10-26 12:53 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:0
信誉值:0
注册日期:2014-10-26 12:49
应该是【N/16]+16
kelamoyujuzhen
[第
7
楼]
[ 回复时间:2015-01-14 08:56 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:0
信誉值:0
注册日期:2015-01-04 21:38
你看一下PSP那块就知道了。内存的地址就是SA:0 SA+1:0 SA+2:0 ..... SA+N:0,地址与地址之间刚好差16byte
需要登录后才能回帖 -->>
请单击此处登录
Copyright © 2006-2024 ASMEDU.NET All Rights Reserved