axix005 发表于 2015-8-7 07:50:16

实验5.2不明白,求指点

④对于如下定义的段:

name segment

……

name ends

如果段中的数据占N个字节,则程序加载后,该段实际占有的空间为 ((N+15)/16)*16




((N+15)/16)*16 点不理解,这个公式从哪里看来?

七煞 发表于 2015-8-7 14:53:44

同求

axix005 发表于 2015-8-7 22:39:54

顶起

Morezy 发表于 2015-8-14 21:24:00

以为段必须被16整除(段寄存器左移4位来寻址,所以必是16的倍数),所以N分为被16整除和不被16整除。

当N被16整除时: 占有的空间为(N/16)*16= (N/16+0)*16=(N/16+15/16) *16= ((N+15)/16)*16.

当N不被16整除时: 占有的空间为(N/16+1)*16,N/16得出的是可以整除的部分,还有一个余数,余数肯定小于16,加上一个16。
程序加载后分配空间是以16个字节为单位的,也就是说如果不足16个字节的也分配16个字节。
(N/16+1)*16 ?=((N+15)/16)*16
此时N/16必有大于等于1且小于16的余数m,((N+15)/16)*16=((N-m/16)+(m)/16+15/16)*16
其中N-m/16能被16整除,(m+15)/16相当于+1.
综上可述:通用的公式:((N+15)/16)*16


页: [1]
查看完整版本: 实验5.2不明白,求指点