その過程で基本的な ASM を学びながら、FreeDOS で C でプログラミングすることに興味があります。
次に、ASM についてですが、最新のプロセッサでは、CPU アーキテクチャが複雑なため、アセンブリでプログラミングするのが難しいことはわかっていますが、FreeDOS を使用すると、おそらくより単純な 16 ビット命令セットに制限されますか?
その過程で基本的な ASM を学びながら、FreeDOS で C でプログラミングすることに興味があります。
次に、ASM についてですが、最新のプロセッサでは、CPU アーキテクチャが複雑なため、アセンブリでプログラミングするのが難しいことはわかっていますが、FreeDOS を使用すると、おそらくより単純な 16 ビット命令セットに制限されますか?
MS-DOS と FreeDOS は "HIMEM" 領域を使用します: これらは:
この方法でアーカイブできる最大メモリ サイズは約 800K です。
XMS と EMS を使用すると、最大 64M を使用できます。
エクステンダがなければ、プログラムは DOS で最大 640KB の低メモリを使用できます。ただし、各構造はセグメントのサイズ、つまり 64KB に制限されます。つまり、サイズが 64KB の大きな配列を 10 個持つことができます。もちろん、1 つのセグメントに複数の配列を含めることができますが、それらの合計サイズがセグメント サイズを超えてはなりません。一部のコンパイラは、複数のセグメントにまたがるアドレスも自動的に処理するため、64KB を超えるオブジェクトをシームレスに使用できます。また、アセンブリで記述している場合も同じことができます。
より多くのメモリにアクセスするには、 EMSやXMSなどのエクステンダが必要です。ただし、アドレス空間は依然として 20 ビット幅であることに注意してください。エクステンダーは、高メモリ領域をアドレス可能なスペースのいくつかのセグメントにマップするだけなので、一度にデータの小さなウィンドウしか見ることができません
アセンブリに関しては、16 ビット モードで 32 ビット レジスタを使用できます。オペランドのサイズを変更するための 66h および 67h プレフィックスがあります。ただし、それは 16 ビット コードを書く方が簡単だという意味ではありません。実際、メモリ アドレッシングでの制限されたレジスタの使用など、覚えておくべき多くの特異性があります。32 ビットの x86 命令セットは、よりクリーンなアドレッシング モードと、より使いやすいフラットなアドレス空間を備えています。