500年前 发表于 2011-12-19 21:49:11

检查点2.2

本帖最后由 500年前 于 2011-12-19 21:51 编辑

先看看小甲鱼老师的解释:

应朋友要求,将第二题的答案详细解释一下:
因为题目要求是要物理地址最终为20000H。
我们知道偏移地址最小为0H,最大为FFF0H。

我们要求段地址能够取到的最小值,即要和偏移地址最大值配合,所以段地址应该为1001H,偏移地址为FFF0H:1001H * 10H + FFF0H == 20000H。

为什么说偏移地址最大为FFF0H?偏移地址是16位的,变化范围应该为0-FFFFH才对啊,王爽老师的书也是这么说的?FFFOH是怎么来的?有点糊涂了,麻烦哪位解释一下!

tsembrace 发表于 2011-12-20 09:14:03

段地址=(内存地址-偏移地址)/16.偏移地址最小时,段地址可去最大值;偏移地址最大时候,段地址可取最小值。
使得段地址取到最大值的最小偏移值是0;使得段地址取到最小值的最大偏移地址是FFF0H.
FFFFH的偏移地址值无法让段地址取到值的。

500年前 发表于 2011-12-20 09:59:55

tsembrace 发表于 2011-12-20 09:14 static/image/common/back.gif
段地址=(内存地址-偏移地址)/16.偏移地址最小时,段地址可去最大值;偏移地址最大时候,段地址可取最小值 ...

计算公式都明白 就是不明白FFF0H是怎么得来的 总得有个说法吧 不可能是想当然的
例如:偏移地址是16位的,所以偏移地址最大值为FFFFH,这个是计算得来的 FFF0H就不知道了?

tsembrace 发表于 2011-12-21 09:15:07

FFF1H~FFFFH这区间内的偏移地址值都无法让段地址取到值。说到想当然,像这样简单的算术还真是可以想当然,你也别纠结,自己对公式去算下吧。不再回了~

ytrfamli 发表于 2011-12-21 11:40:00

唉呀,要是我还留有几个月前替另一位网友解答的帖子就好了...

这个,偏移地址最大是FFFFh没错,鱼老师所说的是指,符合该题目要求的偏移地址最大只有到FFF0h,
後面的偏移量FFF1h~FFFFh存在吗?
当然,但是它们不符合题目要求,就只是如此的意思罢了,不必太钻牛角尖.

为什麽?考虑一下:

段地址最大,偏移量最小的情况 段地址 2000h*16 + 偏移0000h = 20000h
段地址最小,偏移量最大的情况 段地址 1001h*16 + 偏移FFF0h = 20000h

想再把段地址变小让偏移量变大吗?这是不可行的:
1000h*16 + 偏移FFFFh = 1FFFFh , 最大的偏移量,以1字节饮恨,构不着20000h

段地址在1001h的情况下,偏移量FFF1~FFFF对应的分别是20001h~2000Fh,
但是那些都已经超过20000h了,不是题目所要的,所以鱼老师才说,(符合题意的)偏移量最大是FFF0h

(呃,还是不懂的话,可以看下制顶loop网友的帖子里也有说明.)

abtiger 发表于 2011-12-21 20:10:59

简单来说:段地址能够取到的最小值是 1001h

而 1001h*16 =10010h + FFFFh是等于 2000Fh(非题目的20000h)

所以那个偏移量应该递减为FFF0h才符合题意(鱼老师很认真教学啊)
页: [1]
查看完整版本: 检查点2.2