. : : 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