拈花小仙 发表于 2014-8-22 16:28:21

汇编语言 实验5 有看不懂的地方。

assume cs:code,ds:data,ss:stack data segment       dw 0123h,0456hdata ends stack segment       dw 0,0stack ends code segment start:mov ax,stack       mov ss,ax       mov sp,16       mov ax,data       mov ds,ax       push ds:       push ds:       pop ds:       pop ds:       mov ax,4c00h       int 21h code ends end start 对于如下定义的段:name segment
……
name ends
如果段中的数据占N个字节,则程序加载后,该段实际占有的空间为 ((N+15)/16)*16 。 解析:N分为被16整除和不被16整除。
当N被16整除时: 占有的空间为(N/16)*16
当N不被16整除时: 占有的空间为(N/16+1)*16,N/16得出的是可以整除的部分,还有一个余数,余数肯定小于16,加上一个16。
程序加载后分配空间是以16个字节为单位的,也就是说如果不足16个字节的也分配16个字节。
两种情况总结成一个通用的公式:((N+15)/16)*16

小靚同学Leon 发表于 2014-8-22 16:28:22

N刚好是16个字节的倍数,那么实际占用的空间就是N喽。就是这么简单呐。

拈花小仙 发表于 2014-8-22 16:28:52

@小靚同学Leon 看了答案,还是看不懂

小靚同学Leon 发表于 2014-8-22 19:01:30

dos的内存分配方案就是酱紫滴,比较单一,它是按节来的,一节刚好是16个字节,那不足16个字节还是按16个字节分配滴

cqj9006 发表于 2014-8-24 17:11:59

我来看下
页: [1]
查看完整版本: 汇编语言 实验5 有看不懂的地方。