china0008 发表于 2011-2-25 23:04:05

我看不懂你的问题哦。麻烦再描述下。

wandan2020 发表于 2011-2-26 10:59:18

0001H最大地址怎么算的

china0008 发表于 2011-2-26 11:22:07

本帖最后由 china0008 于 2011-2-26 11:32 编辑

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

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

关于(2):因为段的起始地址要为16的倍数。所以当段地址小于1001H或大于2000H时CPU都无法寻到。

fallout.nj 发表于 2011-2-28 01:17:47

没看明白,段地址是物理地址的前4位,物理地址是段地址乘以10H+偏移地址出来的,如果你的意思是偏移地址最大是多大,那偏移地址最大是ffffH

猪的人品 发表于 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:}

猪的人品 发表于 2011-2-28 02:13:43

关于2.2第1小题:给定段地址为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为?? 到 ??
偏移地址最小为0,最大为FFFFH,所以CPU的寻址范围为
0001H乘16+0到0001H乘16+FFFFH,算得CPU的寻址范围为00010H到1000FH。

china0008 发表于 2011-2-28 10:44:45

没看明白,段地址是物理地址的前4位,物理地址是段地址乘以10H+偏移地址出来的,如果你的意思是偏移地址最大 ...
fallout.nj 发表于 2011-2-28 01:17 http://fishc.com/dz/images/common/back.gif


    对偏移地址最大只能是 FFFFH相对8086而言。8086自所以要采用 段+偏的寻址方式 是因为他的寄存器只有16位,地址线却有20位。

china0008 发表于 2011-2-28 10:47:56

一个很复杂的问题
h2995527 发表于 2011-2-28 09:05 http://fishc.com/dz/images/common/back.gif


    你也是论坛元老啦,学习进度如何啊?

XsRecluse 发表于 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

XsRecluse 发表于 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尾数

XsRecluse 发表于 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
本人是个初学者,不知道这样理解对不对?

核动力 发表于 2011-4-20 12:01:01

楼上的解答非常好 谢谢了~~:lol

啊庞 发表于 2011-4-29 16:32:01

看了这么多,基本上能接受。。。

sirliu 发表于 2011-4-30 08:18:22

XsRecluse 发表于 2011-4-9 16:37 static/image/common/back.gif
(1)给定段地址为0001H,仅通过变化偏移量地址寻址,CPU的寻址范围为多少到多少?
解:CPU的寻址范围为 0001H*1 ...

恩 我就是看了这个解答后明白的,先前用windows自带计算器算出来没有小数,以为被整除了。晕

BinGu 发表于 2011-4-30 14:09:34

:P寻址方位64K
页: [1]
查看完整版本: 关于段地址我不明白