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

来源:百度知道 编辑:UC知道 时间:2024/09/27 15:33:24
有一数据存放在内存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

由:
段地址*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

我的这个回答是根据我以前的一个回答改的:
汇编语言的段地址和偏移地址问题 段地址与偏移地址的区别 汇编语言中,代码段,数据段,附加段的定义是什么?其中数据是如何组织的?请高手回答~谢谢~ 如何用汇编语言分开数据段的正数和负数? 汇编语言的段寄存器 氧化还原反应中电子偏移与得失的区分 屏幕的偏移问题 汇编语言中 代码段开头的这几个语句是什么意思? 在CAD中关于offset偏移操作的问题 CAD直线偏移的距离与输入的数据不相符有时大有时小是什么原因?