zoukankan      html  css  js  c++  java
  • 汇编知识点-地址模式和段

    实地址模式

      IA-32处理器使用20位的地址线.可访问1MB字节内存.范围(0-FFFFF).

      因为8086的16位寄存器不能存放20位的地址.因此提出了分段内存的解决方案.每段(segment)64KB.

      类似解决方案也被用到了保护模式中供大范围寻址.

      地址被表示为:段地址+内部偏移地址.段地址最后一个0被省略了.如此一个段地址可被装在16位寄存器里.

      如8000h+260h.线性地址即80250h.线性地址(linear address)或被称为绝对地址(absolute address).

      典型的程序有三个段:代码段,数据段和堆栈段.3个段寄存器CS, DS, SS包含程序代码段,数据段,堆栈段的基地址.

      ES, FS和GS可指向其他数据段.

    保护模式

      每个程序可以寻址4GB内存(0-FFFFFFFF).最常运行的模式.

      微软汇编器的平坦内存模式适用于保护模式.

      只需使用一个32位整数即可存放任何指令和变量地址.

      段寄存器指向段描述符表.

      典型的保护模式程序有3个段:代码段,数据段和堆栈段,使用CS,DS和SS三个段寄存器.(但它们是16位的?)

       

      平坦分段模式

          1 该模式所有段都被映射到计算机32位物理地址空间中.

          2 至少需要2个段:代码段和数据段.

          3 每个段都由一个段描述符表定义.段描述符通常是存放在全局描述符表(GDT)中的一个64位值.

          4 段描述符中有基址,界限,访问类型等等域.其中段界限域用于表示系统中物理内存的数量,即该段描述符所包含的该界限

             的内存是没用间隙,可以安全使用的.其他模式没有这个界限,因此相对不安全.

           假设一台计算机有256MB内存,某个段描述符表表示所有可用物理内存.那么短界限域将包含十六进制值(10000).因为其

           隐含的要乘以十六进制值1000,最终得到十六进制值10000000(256MB).  

      多段模式

          该模式下,每个任务都有自己的段描述符表.称为局部描述符表(LDT).

          每个描述符都可指向一个与其他所有进程使用的段都不同的段.并且每个段都位于独立的地址空间中.

          段描述符包含:基址,界限,访问类型等字段.

          00026000  0010 

          00003000  0002

          如上,3000开始的段大小是0x2000,计算过程为:0x0002*0x1000. 

       分页

          IA-32处理器支持分页(paging).运行一个段被分割成称为页(page)的4096字节.

          分页机制允许同时运行的程序使用的总内存远大于计算机的物理内存.

          所有页的集合称为虚拟内存.

  • 相关阅读:
    正则中的顺序环视和逆序环视
    LeetCode 第 27 场双周赛
    LeetCode 每日一题 198. 打家劫舍
    LeetCode 每日一题 974. 和可被 K 整除的子数组
    LeetCode 每日一题 287. 寻找重复数
    LeetCode 每日一题 4. 寻找两个正序数组的中位数
    LeetCode 每日一题 146. LRU缓存机制
    LeetCode 每日一题 105. 从前序与中序遍历序列构造二叉树
    [转]多线程的那点儿事
    LeetCode 每日一题 5. 最长回文子串
  • 原文地址:https://www.cnblogs.com/flytrace/p/3157346.html
Copyright © 2011-2022 走看看