段问题
在dos汇编中,如果代码段的起启位置为3000h:0000h,大小为20h,那么那下一个相邻的段的起始地址为
3002h,但如果代码断的大小不为20h,而是17h,那下一段的地始地址是多少呢?为什么?
[解决办法]
3000h:0000h,大小为20h的物理地址范围是:30000H~3001FH
如果代码断的大小不为20h,而是17h,那下一段的地始地址是多少呢?为什么?
下一段的起始地址还是30020,因为DOS分配内存时,分配的最小粒度是16字节,称为一个段或节,之所以这样分配,是为了配合“段值*16=段起始地址”这一公式。只有分配粒度是16字节时,实际的段起始地址右移四个二进制位(相当于除以16),才可以放入段寄存器中,而不会出现舍去余数的现象。这样,段寄存器中存放的就是段值(段号(16字节称为一个段))