解决绝对内存地址程序的灾难
使用绝对内存地址的程序,不可以重定位代码,多个程序同时运行会导致冲突灾难
使用分段机制的程序,可以重定位代码,程序中使用的地址都是相对CS/DS等段地址的偏移地址
处理器是自动化的器件,告诉它起始地址后它就自动从这个地址开始程序化的取值执行,指令与指令之间不可以中断,否则会导致不能识别而出错
逻辑地址和连续的物理地址之间的关系
段地址的选择 有限制
不允许段与段之间产生重叠,那每个段最大只能是64KB
因为偏移地址是0000H到FFFFH
1MB的内存可以分为1MB/64KB = 16 个段
所以要想段之间不重叠 段地址只能选在 0000H 1000H 2000H … F000H上
反之如果
物理内存地址 82255H 处加载程序,由于它根本无法表示成一个偏移地址为 0000H 的逻辑地址,所以不符合要求,段不能从这里开始划分。这里面的区别在于, 82260H 可以被十进制数 16(或者十六进制数 10H)整除,而 82255H 不能。通过这
个例子可以看出, 8086 处理器的逻辑分段,起始地址都是 16 的倍数,这称为是按 16 字节对齐
应用题
数据段寄存器 DS 的值为25BCH 时,计算 Intel 8086可以访问的物理地址范围
25BCH:(0000H ~ FFFFH) = 25BC0H ~ 35BBFH
段机制造成的局限性应该由align伪指令来弥补
要想段之间不重叠 段地址只能选在 0000H 1000H 2000H … F000H上,在代码中显式指定段所在位置到这些位置上,是十分不方便的,但是align指令可以帮助我们更好地做到这件事