1-段寄存器由来和策略

段寄存器

在汇编的时候操作的都是物理地址,简单粗暴,却也带来了一些问题。

问题

在汇编程序结束后,如果发给他人使用,必须将程序加载到固定的内存位置,否则程序将出错。同时这样也使得多任务的运行更加困难。

问题的根本原因在于程序无法重定位。

解决思路

8086提出了分段的策略,程序中使用偏移地址,间接的通过“段地址:偏移地址”确定物理地址,而不是直接使用物理地址。

解决方案

8086提供了4个段寄存器,分别是:

  • 代码段 CS
  • 数据段 DS
  • 堆栈段 SS
  • 附加段 ES

8086是16位机,但是拥有20根地址线,提供的是1MB的内存。所以物理地址不是简短的段和偏移地址的和。

物理地址 = (段地址 << 4) + 偏移地址

段地址的要求

既然使用了分段的策略,就必须遵守一点约束,8086要求段地址必须可以整除16。

为什么要整除16

如果一个数的二进制长度在17-20位,且不能整除16,那么无法偏移地址无法从0开始。

关于作者

大四学生一枚,分享数据结构,面试题,golang,C语言等知识。QQ交流群:521625004。微信公众号:后台技术栈。
image

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值