鱼C论坛

 找回密码
 立即注册
查看: 3904|回复: 10

检测点2.2中第2题的问题

[复制链接]
发表于 2011-11-18 15:49:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
第二题
有一数据存放在内存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
我真的迷惑了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-11-18 16:00:45 | 显示全部楼层
但是我不明白为什么要乘以10H而不是16H,   这都是16进制,在这里乘以16就等于在原有的数后面加个0。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-11-18 17:24:49 | 显示全部楼层
16进制的数据自然是乘以16的,乘以10h相当于在后面加一个0,跟乘以16(不是16h)是一个样子的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-11-20 02:08:00 | 显示全部楼层
因为内存单元为20000H,所以段地址最小为1001H,偏移地址为fff0。假如偏移地址为ffff,结果会1001H*16+ffff=2000f。假如段地址为0,0*16+ffff=ffff。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-11-21 09:19:25 | 显示全部楼层
为什么3天了还没人给正确解答呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-11-22 11:07:50 | 显示全部楼层
晕 小甲鱼老师讲得已经很清楚了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-11-23 09:14:06 | 显示全部楼层
我一定是没理解了,但麻烦楼上的看看我写的 你帮我验算下 谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 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内存单元所在
不知道是否清楚了

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-11-24 09:21:14 | 显示全部楼层
你好,你的十六进制和十进制之间的转换要多学学。10H=16,十六进制的数乘10H就等于后面加个0,比如1001H*10H=10010H, 而16H=22,所以你应该是概念上的一些问题没搞清楚。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-12-1 19:39:39 | 显示全部楼层

:handshake感谢,发至内心的感谢 谢谢
谢谢你的热心 谢谢你的讲解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-12-1 19:41:11 | 显示全部楼层
jack11523 发表于 2011-11-24 09:21
你好,你的十六进制和十进制之间的转换要多学学。10H=16,十六进制的数乘10H就等于后面加个0,比如1001H*10 ...

的确这地方 还是没搞明白 谢谢
知道自己问题出在什么地方了 谢谢你和楼上的两位朋友
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-19 12:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表