Yabu.log

ITなどの雑記

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と同じ形式にして互換性を持たせるためだったんですね。