質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
アセンブリ言語

アセンブリ言語とは、機械語を人間にわかりやすい形で記述した低水準言語です。

OS

OS(オペレーティングシステム)は、システムソフトウェアの一種であり、一般的に、ハードウェアを直接的に管理・操作する最も中心的な機能を有するソフトウェアがオペレーティングシステムとして呼ばれます。

Q&A

0回答

479閲覧

アセンブリ言語LDT作成に関して LDTのセグメントセレクタとはどうやって求めるのか?

kazuyakazuya

総合スコア193

アセンブリ言語

アセンブリ言語とは、機械語を人間にわかりやすい形で記述した低水準言語です。

OS

OS(オペレーティングシステム)は、システムソフトウェアの一種であり、一般的に、ハードウェアを直接的に管理・操作する最も中心的な機能を有するソフトウェアがオペレーティングシステムとして呼ばれます。

0グッド

0クリップ

投稿2020/01/13 04:39

編集2020/01/14 07:47

アセンブリ言語でLDTを定義しています。
この参考書ではLDTを2つ作成し
それぞれに入っているコード・データセグメントディスクリプタ
はメモリ空間の0x00・・・~0xFF・・・(つまり、すべて)を指すように設定されています。

イメージ説明
イメージ説明
作って理解するOS

CS_TASK_0 equ(.cs_task_0 - LDT) | 4 DS_TASK_0 equ(.ds_task_0 - LDT) | 4

上記のコードでセグメントセレクタを求めることができるようですが
(認識が間違っているかもしれないので一応・・・)

・セレクタを使ってセグメントディスクリプタを指定できる。 ・セレクタとはそのテーブルのインデックスである。 ・LDTは1つのタスクに1つずつ存在する。 タスクごとのLDTは全くの別のテーブルとして扱われる。 ・GDTとLDTは全くの別物(用途)でそれぞれ別のテーブルである。

と、言ったことを踏まえると
TASK_0のコードディスクリプタにアクセスしたいなら
そのタスクのLDTの範囲を指定したうえで
セレクタ(インデックス)が・・・
上から2番目なので(0からカウントするから・・・)
1
となると思ったのですが

CS_TASK_0 equ(.cs_task_0 - LDT) | 4 DS_TASK_0 equ(.ds_task_0 - LDT) | 4

なぜこのような処理で求める必要があるのでしょうか?

私のLDTの概念に対する理解がどこかで間違えているのだと思うのですが・・・

分からないのでお願いします。
イメージ説明
GDT先頭アドレスをベースにするのが規格として決まっていて
それらを利用してLDTなどのインデックスが求められるなら
順番はベース以外重要じゃないってことなのか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問