• [fw]Real Mode addressing


    Real Mode

    在 real mode 中,memory 的使用被限制在 1 MByte(220 bytes) 內,可用的 address 範圍為 0x00000 ~ 0xFFFFF。

    由 memory address 的可用範圍可知,存取需要 20 bits 的長度,但在 8086 的 CPU 架構中僅有 16-bit register,因此必須使用兩個 16 bits 值的組合來表示一個 memory address。
    其中前面的 16 bits 稱為 selector,必須存於 segment register 中,而後面的 16 bits 稱為 offset,其中實際 memory address 的計算方式如下:

    16 * selector + offset (即為 selector 補 0 到後方再與 offset 相加)

    而 real mode 有幾個問題:

    1. 單一 selector 只能參照到 64K 大小的 memory,但如果程式碼大小超過 64K,就必須強制分成多個片段來執行;同樣的,不只程式碼,連太大的資料也是會有相同問題。

    2. segment address 的衝突問題,舉例來說:04808 可以被以下幾個組合所參照:
      • 047C:0048 (047C0 + 0048 = 04808)
      • 047D:0038 (047D0 + 0038 = 04808)
      • 047E:0028 (047E0 + 0028 = 04808)


    由於種種問題,造成在 real mode 中設計程式是一件非常困難的事情。

  • 相关阅读:
    shell脚本大小写转换
    python写xml及几个问题
    Java集合系列导读
    Java集合系列之Collection接口
    并发编程之锁机制
    Java中的堆内存和栈内存
    Java与ElasticSearch的交互操作
    ElasticSearch基础概念
    Java的对象和类
    Spring Validator参数校验
  • 原文地址:https://www.cnblogs.com/bittorrent/p/3791814.html
Copyright © 2020-2023  润新知