zoukankan      html  css  js  c++  java
  • Intel 8086

    程序在内存中加载好后

    代码段和数据段的段地址在内存中的位置发生了变化

    这个变化是随机的

    因为内存中的空间占用也是动态的

    所以程序加载好后需要重定位

    需要把代码段的段地址和数据段的段地址

    分别告诉  代码段寄存器(code segment) 和数据段寄存器(data segment)

    让CPU 处理器 知道哪个位置 放着 哪些 东西 

    CS: 代码段寄存器,存放代码段段地址的寄存器,DS 同理。

    DS中数据段起始地址,应该就是程序目前所在的实际物理地址了。

    (我猜测代码段和数据段的段地址是一个 物理地址,但是还没确认。

    0x02:

    20根地址线能访问的内存(单次)是2的20次方=1MB=16 x 64 KB

    8086 处理器 如何形成物理地址?

    将16位的段寄存器 乘以 16,相当于 左移4位,形成20位的段地址

    然后再同16位的偏移地址相加,形成20位的物理地址

    0x03:

    1MB 的内存 ,在段不重叠的情况下,最多可以分成 65536个 16字节 的段  

                      或者

                            可以分成 16个 65536字节 的段

    段的划分是 自由的

    它可以起始于任何16字节对齐的位置,也可以是任意长度的,只要不超过64KB(65536字节)

    同一个物理地址,其实对应着多个逻辑地址。

    最重要的是段地址的选取

    你的任务是定义段地址并设置处理器的段寄存器

    通常情况下,段地址的选择 取决于 内存中哪些区域是空闲的。

    你去搞清楚,32位系统中的分段机制 是怎样的。

                    

  • 相关阅读:
    Linux安装配置tomcat
    linux 安装jdk
    让/etc/profile文件修改后立即生效
    group by 和聚合函数
    mysql插入日期 vs oracle插入日期
    Thinkphp学习笔记-删除缓存
    Thinkphp错误-phpMyAdmin 尝试连接到 MySQL 服务器,但服务器拒绝连
    Thinkphp学习笔记-模板赋值
    Thinkphp学习笔记-模板主题
    Windows-设置系统服务不开机启动
  • 原文地址:https://www.cnblogs.com/Cheetos/p/5335076.html
Copyright © 2011-2022 走看看