汇编语言中数据段与偏移的问题

有一数据存放在内存20000H单元中,现给定段地址为SA,若想用偏移地址寻到此单元,则SA应满足的条件是: 最小为多少?最大为多少?
请大侠们些出具体的计算方法,我并非只想要答案。先谢谢!!!

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
温馨提示:答案为网友推荐,仅供参考
第1个回答  2023-01-06

段地址、偏移地址和物理地址,三者的关系式是:

  20000H = 段地址 × 16 +偏移地址

当偏移地址取其最大值时,段地址,就能达到最小值。

该最小值,暂时写成:SA = minnH。

在后边添个零,代入公式,如下:

  20000H = minn0H + 偏移地址最大值

横扫一眼,即可看出:

  等式左边,20000H,其最低位是 0。

  等式右边,其最低位,也必须是 0。

所以,偏移地址的最大值,只能是 FFF0H。

由此,即可轻松导出:SA (最小)=1001H。

--------------------

许多人,解此题时,都是用 FFFF 当做最大值!

用 FFFF,只能算出 2000FH,算不出来 20000H。

那么,20000H = ... +FFFF,这个等式,根本就不成立!

当然,就算不出正确结果。

结果,就是算出小数来了,怎么看,也不对。

--------------------

呵呵,这题目,也就是:小学的难度。

所以,王爽出题后,并没有给出答案或解题思路。

但是,他没有想到,学微机的人,如此缺乏小学知识。

第2个回答  推荐于2016-01-13
逻辑地址LA=段地址SA*16+偏移地址EA

LA=SA *16+EA;
那么就有EA=LA-SA*16=20000H-SA*16;
满足 0=<EA<=ffffH;
从而可以确定SA的范围;
注意上面表达式中数的进制本回答被提问者采纳
第3个回答  2009-11-13
物理地址以0结尾,偏移地址以节为单位变化,1节=10H字节
偏移地址取最小值时,SA取得最大值
2000:0
SA=2000
偏移地址取最大值时,SA取得最小值
1001:FFF0
SA=1001
第4个回答  2009-11-13
由:
段地址*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
相似回答