|
发表于 2011-11-23 22:35:39
|
显示全部楼层
本帖最后由 kane080824 于 2011-11-23 23:17 编辑
有一数据存放在内存20000H单元中,现给定段地址为SA,若想用偏移地址寻到此单元。
则SA应满足的条件是:最小为(1001h ),最大为(2000h)。
因为:物理地址=段地址sa加成偏移地址ea,所谓加成就是将段地址sa*16(相当于左移一位后补0)
我们知道8086系统中内存一个段的大小在0--64k之间,即:0~FFFFh,也就是段内偏移的范围,那么:
ea=0(最小偏移)~FFFFh(最大偏移)
现在物理地址为2000h,就是:
20000h=sa加成ea(0~FFFFh)=sa*16+(0~FFFFh)
sa*16=20000h-(0~FFFFh)=(20000h-0)~(20000h-FFFFh)
sa*16=20000h~10001h
因此:sa=20000h/16~10001h/16=2000h(最大段地址)~1000.xxh(最小段地址)
但是遗憾的是10001h 显然不能整除16,而我们的段地址规定只能是16的倍数, 上面已经算出最小物理地址不能小于10001h,因此我们找一个最接近10001h且又能被16整除的物理地址,一眼便得出是10010h,(10010h=10001h+15是比10001h大且又最接近10001h同时又能被10H整除的数)
所以得出,最小段地址为(1001h ),最大为(2000h)。
回头我们验算,就是说:当段地址为1001h时,偏移量为FFF0h(即此时的最大段内偏移),根据1001*10H+FFF0H=20000H(物理地址)
当段地址为2000h时,偏移量为0(即最小段内偏移),根据2000*10H+0=20000H(物理地址)
上面最小段地址的含义是:在段地址是1001h时,在段内偏移量FFF0h处就是物理地址20000h的内存单元所在
最大段地址的含义是:在段地址是2000h时,在段内偏移量0h处就是物理地址20000h的内存单元所在
或者说:在段地址为:1001h ~2000h的情况下,那么就可由相对应的偏移地址0~FFF0H找到物理地址20000h内存单元所在
不知道是否清楚了
|
|