victor 发表于 2011-11-18 15:49:01

检测点2.2中第2题的问题

第二题
有一数据存放在内存20000H单元中,现给定段地址为SA,若想用偏移地址寻到此单元。
则SA应满足的条件是:最小为( ),最大为()。
小鱼的答案如下:
我们知道偏移地址最小为0H,最大为FFF0H。
我们要求段地址能够取到的最小值,即要和偏移地址最大值配合,所以段地址应该为1001H,偏移地址为FFF0H:
1001H * 10H + FFF0H == 20000H。
能验算回去(20000H-FFF0H)/10H=1001H
但是我不明白为什么要乘以10H而不是16H,
变化范围为什么不是0H~FFFFH,最大为什么不是FFFFH
SA*16+EA=物理地址
小生我怕怕的答案如下:
sa*16+0000=20000
sa*16+ffff=20000
郁闷的来了
小生的是FFFFH乘以的也是16H,但小生的验算不回去
20000H-FFFF=10001H/16H=BA2
我真的迷惑了

seuer126 发表于 2011-11-18 16:00:45

但是我不明白为什么要乘以10H而不是16H,   这都是16进制,在这里乘以16就等于在原有的数后面加个0。

憔悴心只为你 发表于 2011-11-18 17:24:49

16进制的数据自然是乘以16的,乘以10h相当于在后面加一个0,跟乘以16(不是16h)是一个样子的{:5_102:}

小团鱼 发表于 2011-11-20 02:08:00

因为内存单元为20000H,所以段地址最小为1001H,偏移地址为fff0。假如偏移地址为ffff,结果会1001H*16+ffff=2000f。假如段地址为0,0*16+ffff=ffff。

victor 发表于 2011-11-21 09:19:25

为什么3天了还没人给正确解答呀

ljasondon 发表于 2011-11-22 11:07:50

晕 小甲鱼老师讲得已经很清楚了

victor 发表于 2011-11-23 09:14:06

我一定是没理解了,但麻烦楼上的看看我写的 你帮我验算下 谢谢

kane080824 发表于 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内存单元所在
不知道是否清楚了

jack11523 发表于 2011-11-24 09:21:14

你好,你的十六进制和十进制之间的转换要多学学。10H=16,十六进制的数乘10H就等于后面加个0,比如1001H*10H=10010H, 而16H=22,所以你应该是概念上的一些问题没搞清楚。

victor 发表于 2011-12-1 19:39:39

kane080824 发表于 2011-11-23 22:35 static/image/common/back.gif
有一数据存放在内存20000H单元中,现给定段地址为SA,若想用偏移地址寻到此单元。
则SA应满足的条件是:最 ...

:handshake感谢,发至内心的感谢 谢谢
谢谢你的热心 谢谢你的讲解

victor 发表于 2011-12-1 19:41:11

jack11523 发表于 2011-11-24 09:21 static/image/common/back.gif
你好,你的十六进制和十进制之间的转换要多学学。10H=16,十六进制的数乘10H就等于后面加个0,比如1001H*10 ...

的确这地方 还是没搞明白 谢谢
知道自己问题出在什么地方了 谢谢你和楼上的两位朋友
页: [1]
查看完整版本: 检测点2.2中第2题的问题