技術日誌

DB,Java,セキュリティ,機械学習など。興味のあることを雑多に学ぶ

486のセグメントデスクリプタが直感的に読めないようになっている理由

486のセグメントデスクリプタは...

63       55       47       39       31       23       15       7        0
+--------+----+----+--------+--------+--------+--------+--------+--------+
|base_hi |ar  |l_hi|   ar   |base_mid|     base_low    |    limit_low    |
+--------+----+----+--------+--------+--------+--------+--------+--------+

こんな感じで上位2ビットを分解して各メンバに分解しないと解読できません。 なんでこんな面倒な作りになっているのだろう?と思っていましたが、本日はじめて読む486を読んでいたところ腑に落ちました。


63       55       47       39       31       23       15       7        0

286のセグメントデスクリプタ
                   +--------+--------+--------+--------+--------+--------+
                   |   ar   |           base           |    limit        |
                   +--------+--------+--------+--------+--------+--------+

         
この辺が486で追加された
<------------------>

+--------+----+----+--------+--------+--------+--------+--------+--------+
|base_hi |ar  |l_hi|   ar   |base_mid|     base_low    |    limit_low    |
+--------+----+----+--------+--------+--------+--------+--------+--------+

こんな感じで下位ビットは286と同じ形式にして互換性を持たせるためだったんですね。