第三章 分段机制和逻辑地址

本文详细解释了8086处理器中的寄存器结构,字长概念,以及内存访问中的地址、字长控制和字节序。特别强调了16位处理器的分段机制,如何通过逻辑地址和段地址生成物理地址,确保程序的兼容性和正确执行。
摘要由CSDN通过智能技术生成

寄存器和字长

字长:寄存器的存储的数据宽度
字节:8位
字:16位,2个字节
双字:32位,4个字节
4个字:64位,8个字节

内存访问和字节序

内存和内存访问示意图
内存访问:包括地址,读或者写,数据,字长控制
字长控制:单次读取或卸任8位,16位,32位或64位
低端字节序:高字节位于高地址部分,低字节位于低地址部分

INTEL8086处理器

16位处理器,是整个INTEL32位架构处理器(IA-32)的开山鼻祖。以后的处理器设计,必须保证兼容性

  • 寄存器

    • 8个通用寄存器
      8086的通用寄存器
    • 4个段寄存器
      CS,DS,ES,SS
      当需要在程序中使用两个数据段时,DS指向一个,ES指向一个,默认使用DS
    • 1个IP指令指针寄存器
  • 为什么引入分段机制
    程序必然有代码要要操作的数据,当指令中混杂了数据指令流就不能正常的运行,所以指令和数据要分开存放,分别存放在代码段和数据段,但是如果要使用指令中指定的内存地址当成物理地址(相对于内存起始处的绝对地址)定位数据的位置,因为程序被加载的位置是不固定的,如果使用绝对地址去访问数据会出现访问到错误数据的情况。所以出现了逻辑地址,指令中指定的内存地址是段内偏移地址,处理器提供了两个段地址寄存器CS(代码段寄存器)和DS(数据段寄存器),当指令中出现地址时,会把这个地址当作偏移地址,和DS中的地址相加得到真正的物理地址来访问数据。所以这就保证了,即使代码段和数据段在内存的位置发生了变化,只要把他们的段地址送到CS和DS,程序就能够正常运行。所以程序被加载后,如何正确的设置CS和DS才是重点
    程序加载到内存不同位置

  • 逻辑地址

    • 段地址:段的起始地址
    • 逻辑地址:段地址:偏移地址
    • 段地址和偏移地址示意图
  • 8086的内存分段机制
    8086处理器内部组成框图
    8086提供了20跟地址线,可以访问1M的内存,但是CS和DS都是16位的,偏移地址也是16位的,如何生成20位的物理地址?
    答:段地址起始于能够被16整除的物理内存地址,将这样的内存地址除以16(右移4位)就得到逻辑段地址,将此地址传送到段寄存器,访问内存时,将段寄存器中的逻辑段地址乘以16(左移4位),得到段的起始物理地址(段地址),由于段地址都是16的倍数,所以被称为16字节对齐的。
    1MB内存可以划分为65536个16字节的段

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值