8086的内存分段机制

1 代码段和数据段

对于我们的程序来说,通常分为代码段和数据段:
在这里插入图片描述
对于上面的代码使用的是绝对地址,当我们的操作系统把数据段不是加载在0x0100的地址时,就会出现访问数据的错误。这其实就是重定位的问题,需要借用段寄存器解决:
在这里插入图片描述
在这里插入图片描述
我们需要知道如下几点:

  1. 指令中的地址是数据在段内的偏移地址。
  2. 数据段寄存器DS中的值是数据段的段地址。
  3. 段地址+偏移地址=物理地址,也就是数据实际所在的地址。
  4. 重定位就是通过改变数据寄存器DS中的值来实现的。

2 8086的分段机制

2.1 8086的分段机制

8086的处理器地址引线:20根,那么逻辑地址就是20位。而我们的寄存器只有16位,为了解决这个问题:段地址实际上也是20位,将段寄存器中的值左移4位(每个分段必须加载到地址最低位为0的位置,相对于16进制表示而言)。偏移地址仍然是16位,也就意味着每个段的最大长度为65536个字节。


参考资料:

  1. 深度学习:C/C++、计算机体系
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值