1

パーティション テーブルを読み取り、ブータブル パーティションの最初のセクターをロードする基本的な MBR を作成しています。CHS と LBA のアドレッシング モードで混乱しています。互換性の理由を除いて、CHS は多かれ少なかれ使用されていないことをチュートリアルで読みました。そこで、LBA (INT 13h 拡張機能) を使用することにしました。ドライブのセクターをロードするには、そのパーティションのパーティション テーブルから CHS 値を読み取る必要があります。そうして初めて、それを LBA に変換し、「ディスク アドレス パケット」に格納することができました。

私の疑問は、パーティション テーブルの CHS がそれぞれ 1 バイトであることです。この値を直接取得して LBA に変換する必要があります (または) 最初に変換する必要があります。

Cylinder = 10 bits
Sector   = 6 bits
Head     = 8 bits

そしてそれをLBAに変換しますか?

注: 私の MBR は、HDD と USB の両方のセクターにアクセスできる必要があります - それが動機です。

OS: Ubuntu

アセンブラー : ガス

4

1 に答える 1

2

パーティション テーブル エントリは、非常に古い OS との下位互換性のためにのみ CHS を使用します。
LBA アドレスのフィールドもあります。

 
 
                    MBR パーティション テーブルの形式

 
 

これは LBA32 を使用するため、パーティションのサイズと位置に制限があることに注意してください。ウィキペディアを引用:

ブロック アドレスとサイズは 32 ビットを使用して MBR のパーティション テーブルに格納されるため、512 バイト セクター (実際のまたはエミュレートされた) を持つドライブを使用するパーティションの最大サイズと最大開始アドレスは、2 TiB-512 を超えることはできません。バイト (2,199,023,255,040 バイトまたは 4,294,967,295 (232−1) セクター × 512 (29) バイト/セクター) [2] この容量制限を緩和することが、GPT 開発の主な動機の 1 つでした。

同じことが CHS アドレッシングにも当てはまります。
CHS フィールドを使用する OS のサイズは、約 8 GiB に制限されています。
したがって、それらと互換性を維持したい場合は、その制限内にとどまる必要があります.


LBA <-> CHS を変換するための式は、簡単に導出したり、インターネットで見つけたりすることができます。セクター番号 (つまり、LBA) で考えて、パーティション エントリを作成するときに CHS に変換できます (または、デフォルトの 1023、255、63 を使用します)。 CHS には大きすぎるパーティションの場合)。

行の一番下で、LBA フィールドを使用します。またはGPT
に行きます。

于 2016-12-21T09:59:20.280 に答える