Linux内核开发基础-1 --- 可重定位代码 分段机制的起源

解决绝对内存地址程序的灾难

在这里插入图片描述使用绝对内存地址的程序,不可以重定位代码,多个程序同时运行会导致冲突灾难
使用分段机制的程序,可以重定位代码,程序中使用的地址都是相对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指令可以帮助我们更好地做到这件事

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值