20000H为物理地址; 16位偏移量的最小~最大值的取值是范围0000H~FFFFH
最小
当偏移量为FFFFH的时候,SA可取最小值20000H - FFFFH = 10001H
求得基础地址的值为10001H, 基础地址必须满足是10H的倍数,而10001H不为10H的倍数,所以偏移地址最大只能取到FFF0H才能使“段地址*16”的值为16(即10H)的倍数,即
20000H - FFF0H = 10010H
10010H/10H = 1001H
此时“段地址*16”取得最大值10010H;所以段地址能取得的最大值是1001H
最大
当偏移量为0000H时,SA可取最大值
20000H - 0000H = 20000H
20000H/10H = 2000H
段地址、偏移地址和物理地址,三者的关系式是:
20000H = 段地址 × 16 +偏移地址
当偏移地址取其最大值时,段地址,就能达到最小值。
该最小值,暂时写成:SA = minnH。
在后边添个零,代入公式,如下:
20000H = minn0H + 偏移地址最大值
横扫一眼,即可看出:
等式左边,20000H,其最低位是 0。
等式右边,其最低位,也必须是 0。
所以,偏移地址的最大值,只能是 FFF0H。
由此,即可轻松导出:SA (最小)=1001H。
--------------------
许多人,解此题时,都是用 FFFF 当做最大值!
用 FFFF,只能算出 2000FH,算不出来 20000H。
那么,20000H = ... +FFFF,这个等式,根本就不成立!
当然,就算不出正确结果。
结果,就是算出小数来了,怎么看,也不对。
--------------------
呵呵,这题目,也就是:小学的难度。
所以,王爽出题后,并没有给出答案或解题思路。
但是,他没有想到,学微机的人,如此缺乏小学知识。
逻辑地址LA=段地址SA*16+偏移地址EA
LA=SA *16+EA;
那么就有EA=LA-SA*16=20000H-SA*16;
满足 0=
注意上面表达式中数的进制
物理地址以0结尾,偏移地址以节为单位变化,1节=10H字节
偏移地址取最小值时,SA取得最大值
2000:0
SA=2000
偏移地址取最大值时,SA取得最小值
1001:FFF0
SA=1001
由:
段地址*10H+偏移地址=物理地址
得:
段地址=(物理地址-偏移地址)/10H
设:段地址为y,偏移地址为x,由题意得:
y=(20000H-x)/10H (x∈{x|x=10H*k,0≤k≤FFFH})
(关于定义域为什么这么奇怪:因为物理地址和偏移地址的末4位必须相同,想知道为什么的话看这个链接:http://zhidao.baidu.com/question/123873940.html)
该函数为单调递减函数,证明过程略
所以:
当x=0时,y取得最大值,为20000H/10H=2000H
当x=FFF0H时,y取得最小值,为(20000H-FFF0H)/10H=1001H
我的这个回答是根据我以前的一个回答改的:
http://zhidao.baidu.com/question/119905487.html
以前的那个回答有错误,这回修正了
----WDSYMH