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

有一数据存放在内存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

汇编语言中数据段与偏移的问题
10010H\/10H = 1001H 此时“段地址*16”取得最大值10010H;所以段地址能取得的最大值是1001H 最大 当偏移量为0000H时,SA可取最大值 20000H - 0000H = 20000H 20000H\/10H = 2000H

汇编语言中定义的数据段的问题
那么结果就是变量名1的高16位是变量名2的段地址,低16位是变量名2在段内的偏移地址。就是这么规定的,记住就行了。

求助!汇编语言 段地址 偏移地址 物理地址问题!
把这个例子带到这个问题中,你可以这样理解,段地址相当于楼层地址,偏移地址相当于房间号,最后合成的就是物理地址。8086的地址线20根,数据线16根,物理地址的位数取决于8086地址线的数量,16位的数据线决定了8086的寄存器只能有16位,这样一来不管是段寄存器还是通用寄存器都是16位的,所以,段地址和偏...

汇编语言基础问题
首先, 物理地址 = 段地址 * 10H + 偏移地址 现在我们知道了物理地址为20000H, 且偏移地址的范围是0000H ~ 0FFFFH 所以段地址 * 10H = 20000H - 0000H 或者 20000H - 0FFFFH 所以段地址 = 20000H \/ 10H 或者 10001H \/ 10H 段地址 = 2000H(最大) 或者 1001H(最小, 有余数1, 向上...

关于汇编语言存储器的分段 一小段的首地址是啥?段起始地址?怎么看出 ...
一个段的空间最大是64KB 也就是偏移地址从0000H-FFFFH。有一点要注意:段地址*16必然是16的整数倍所以一个段的起始地址也应该是16的整数倍。但是好像并没有一个小段 的说法,段的提出只是我们在编程中的一种安排,比如我要在一个段中存放10个字节的数据,我们可以把123B0H-123B9H当作一个数据段...

汇编语言作业 :设有如下数据段,请给出美衣变量的偏移量
左移VAR2偏移量为43h ORG $+40H ;由于VAR2数据长度为2+2+5*(2+2)=24=18h,即$偏移为43h+18h=5Bh,即$+40h=9Bh;所以VAR3的偏移地址为9Bh VAR3 DD 1234H, 5678H VAR4 DB '12345678' ;由于VAR3数据长度为4+4=8h,所以VAR4偏移为9Bh+8=A3h DATA ENDS ...

...汇编语言中的物理地址,段基址和偏移地址的具体含义,及作用,要详 ...
而偏移量的范围就在0000H-FFFFH之间,就表示00000H-0FFFFH的实际内存单元.就是说一个段的大小在64Kb.SUB1 DB 03H,35H 这个命令中,SUB1表示存放03H,35H这两个数据的首地址,相当于C语言中字符串数组的首地址.假如这个SUB1在数据段中,有专门的数据段寄存器DS,它的实际地址就是DS:SUB1 ...

汇编语言问题
首先,这个题目本身有一点小错误。B2 DB B1是错误的,应当改为B2 DW B1。因为在数据定义的操作数里使用B1,代表是它的十六位的偏移地址,不能用在DB定义的8位变量中。分析一下数据段里的数据存储情况:物理地址 数据 20000H 20H ;W1首址,就是32 20001H 20H 20002H FFH ;...

王爽汇编语言有一点看不懂 求解
因段地址和偏移地址都 最长只有十六位,而你这的地址是二十位,因在实际应用中段地址的十六位就显示示你这高二十位的高十六位的部份,偏移地址就显示低十六位的部份。这二个地址移一位相加后才是你这实际地址。只要和相等就行了,固这时的段地址和偏移地址可有很多个,因只要和相等就行了。

段地址,偏移地址
数据是储存在内存里的,你说的物理地址其实就是实际内存地址。逻辑地址 是程序中使用的地址,它由段基址和段内偏移值所组成,段基址与段内偏移值都为16位的二进制数。物理地址 也叫实际地址或绝对地址,是CPU访问存储器时实际使用的地址,为20位地址。段地址指的是段起始地址的高16位 偏移地址指的是...

相似回答