鱼C论坛

 找回密码
 立即注册
查看: 4744|回复: 14

关于段地址我不明白

[复制链接]
发表于 2011-2-25 23:04:05 | 显示全部楼层
我看不懂你的问题哦。麻烦再描述下。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-2-26 10:59:18 | 显示全部楼层
0001H最大地址怎么算的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-2-26 11:22:07 | 显示全部楼层
本帖最后由 china0008 于 2011-2-26 11:32 编辑

你把问题完整说一下。我估计目前还是无人能懂你的问题。

我猜你问的是 检测点2.2 的问题是吗?  没有一个最大值是0001H 。说说您的计算过程。

关于(2):因为段的起始地址要为16的倍数。所以当段地址小于1001H或大于2000H时CPU都无法寻到。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-2-28 01:17:47 | 显示全部楼层
没看明白,段地址是物理地址的前4位,物理地址是段地址乘以10H+偏移地址出来的,如果你的意思是偏移地址最大是多大,那偏移地址最大是ffffH
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-2-28 01:46:40 | 显示全部楼层
本帖最后由 猪的人品 于 2011-2-28 16:26 编辑

楼主问:一个数据放在内存为20000H单元中,段地址SA最小多少?怎么算的?最大多少怎么算的?
这是检测点2.2第2小题的问题,当时我看了也觉得不太理解,后来我想通了,我是这样想的。
偏移地址最大为FFFFH,那么基础地址最小为20000H-FFFFH=10001H,段地址最小还要除以16.

这样算的话问题就出来了段地址X16+偏移地址=物理地址。段地址X16相当于在后面加一个0,那么上面的公式得出基础地址为10001H,这是不可能的,因为无论段地址是多少数乘以16后面都不会是个1。

基础地址最后一位一定是个0,而且题目问的是20000H,后面也是个0,因此,偏移地址后面必须是个0,与基础地址相加后最后一位才会是0,所以,这道题的最大偏移地址不是FFFFH,偏移地址最大是FFF0H,这是最后一位数必定为0的情况下所取得的最大值。最小段地址计算公式应该是这样
20000H-FFF0H=10010H,这是最小基础地址,去掉后面一个0,最小段地址为1001H。
相当于10010H/10H(十进制的16十六进制为10H)=1001H。

补充:最大段地址比较容易,就是偏移地址为0(最小偏移)的时候所取得的最大段地址,段地址x16+0=20000H,所以最大段地址=(20000H-0)/10H=2000H。
知道了偏移地址为0就好办了,段地址X16等于20000H,乘16相当于加一个0,那么20000H减少一个0就是最大段地址。

改了几次,错别字基本改过来了。{:3_60:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-2-28 02:13:43 | 显示全部楼层
关于2.2第1小题:给定段地址为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为  ?? 到 ??
偏移地址最小为0,最大为FFFFH,所以CPU的寻址范围为
0001H乘16+0到0001H乘16+FFFFH,算得CPU的寻址范围为00010H到1000FH。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-2-28 10:44:45 | 显示全部楼层



    对偏移地址最大只能是 FFFFH  相对8086而言。  8086自所以要采用 段+偏的寻址方式 是因为他的寄存器只有16位,地址线却有20位。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-2-28 10:47:56 | 显示全部楼层
一个很复杂的问题
h2995527 发表于 2011-2-28 09:05



    你也是论坛元老啦,学习进度如何啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-4-9 16:37:33 | 显示全部楼层
(1)给定段地址为0001H,仅通过变化偏移量地址寻址,CPU的寻址范围为多少到多少?
解:CPU的寻址范围为 0001H*16+0 到 0001H*16+FFFF
即寻址范围为 00010H~1000FH

(2)有一数据存放在内存20000H单元中,现给定段地址为SA,若想用偏移地址寻到此单元,则SA应满足的条件是:最小为多少?最大为多少?
解:要解答此题 我们可以根据 物理地址=段地址*16+偏移地址 的公式 列出两个方程 SA*16+0=20000H   SA*16+FFFF=20000H
第一个方程SA的解 则为SA的最大值 第二个方程SA的解 则为SA的最小值
解方程:
SA=2000H
(1)SA*16+0=20000H
SA*16=20000H-0
SA*16=20000H
SA=20000H/16(10H)
SA=2000H
(2)
SA=1001H
SA*16+FFFFH=20000H
SA*16=20000H-FFFFH
SA*16=10001H
(因为基地址的起始地址必须是16的倍数 即SA*16=10001H不满足要求 ,所以这里的10001H 我们取值为10010H)
SA*16=10010H
SA=10010H/16(10H)
SA=1001H
所以SA应满足的条件是最小值为1001H 最大值为2000H
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-4-9 17:16:26 | 显示全部楼层
(段地址*16 实际是左移4位,左移4位就等于*10)
我的理解方法是这样的:
SA*10+EA
EA取最小值为:SA=(20000H-FFF0)/10=1001H,SA为最少值
EA取最大值为:SA=20000H/10,SA为最大值
如:SA为26231H = (26231H-FFF1)/10=1624H
   SA为222Fc = (222FcH-FFFc)/10 = 1230H
   SA为32139 = (222FcH-FFF9)/10
偏移地址的“最大”范围一定是:0000H~FFFFH之间。最SA尾数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-4-9 17:19:47 | 显示全部楼层
EA取最大值时,SA=20000h-ffffh/16=1001h,SA 为最小值   
EA取最小值时,SA=20000h-0h/16=2000h,SA为最大值
书上给出的结论:偏移地址16位,变化范围为0~FFFFH,仅用偏移地址来寻址最多可寻64KB个内存单元。
用20000H减去FFFFH(变化范围的最大值)再除以10H就等于SA的最小值,即SA=20000h-ffffh/16=1001h
用20000H减去0H(变化范围的最小值)再除以10H就等于SA的最大值,即SA=20000h-0h/16=2000h
本人是个初学者,不知道这样理解对不对?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-4-20 12:01:01 | 显示全部楼层
楼上的解答非常好 谢谢了~~:lol
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-4-29 16:32:01 | 显示全部楼层
看了这么多,基本上能接受。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-4-30 08:18:22 | 显示全部楼层
XsRecluse 发表于 2011-4-9 16:37
(1)给定段地址为0001H,仅通过变化偏移量地址寻址,CPU的寻址范围为多少到多少?
解:CPU的寻址范围为 0001H*1 ...

恩 我就是看了这个解答后明白的,先前用windows自带计算器算出来没有小数,以为被整除了。晕
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-4-30 14:09:34 | 显示全部楼层
:P寻址方位64K

点评

注意如无问题,请不要回复超过一个月的老帖。  发表于 2011-4-30 15:47
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-3-29 18:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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