アセンブリについてしばらく勉強し、それに関する多くの優れたチュートリアルを確認して、非常に困惑しています。
完全に理解していないことを行うためのいくつかの指示を覚えることは別として、その有用性のスキーム全体を完全に理解することは驚くほど難しいと言わざるを得ません.
私はオペレーティング システムの開発者および設計者になることを目指しているため、低レベルのハードウェア データ処理、メモリ管理、プロセッサのフェッチ、デコード、およびメモリ セグメンテーション、メモリの使用、ビットとバイトの使用、コール スタックとハードウェア スタック、およびハードウェア自体からの機械レベルのプログラムの仕組み。
私が混乱している主な質問は次のとおりです。
プロセッサは RAM からバイトをフェッチします。ブートローダを書き込むときは、命令を書き込む前にアドレスに「ジャンプ」します。メモリ内のアドレスにジャンプした後に実行される最初の命令 (移動/データ コピーMOV AL, MOV BL
のような命令など) は、メモリ内で直接使用されない CPU のパイプライン上のデータを取得します。しかし、命令がメモリからロード/フェッチされる場合、プロセッサはパイプライン上でコード データ セグメントをどのように生成できるでしょうか? それとも、ここですべて間違っていますか?マイクロプロセッサがブートローダーで実行する基本的な手順は何ですか? また、命令がすべてメモリからフェッチされると想定される場合 (たとえば、アセンブリのコード セグメントですが、データ セグメントとテキスト セグメントはすべて命令です)、CPU はメモリを使用せずにパイプラインからコード データを生成する方法を教えてください。プロセッサー用)?
また、私の次の主な質問は、おそらく私よりも経験豊富な人にとっては非常に簡単に答えることができます。
x86 およびその他のアーキテクチャのメモリ/RAM がオフセット付きの「セグメント」として格納されるのはなぜですか? 私にとって、これは必要以上に複雑です。すべてのメモリをより簡単な方法で、線形、アドレス指定、フェッチ、格納、計算、およびレジスタの内外でメモリ セルに移動できないのはなぜですか? これにより、アーキテクチャの説明と理解がより理解しやすくなり、多数のレジスタがメモリベースのデータ ストレージとアクセスの 2 次元セグメントを処理するよりも直接的なものになるのではないでしょうか?