セグメントレジスタ


セグメントレジスタの種類

以前説明した 8086 のレジスタ群の中に「セグメントレジスタ」が存在します
このレジスタは、前回説明したセグメントアドレスを管理するものです

セグメントレジスタは、セグメントアドレスを指定するのに用いられます
メモリにアクセスする時、コンピュータはセグメントレジスタを参照します
セグメントレジスタは全てで4つ存在し、それぞれに専用の役割が存在します

セグメントレジスタは、CS(コード)、DS(データ)、ES(エクストラ)、SS(スタック)の4つあり
CSであれば、コードセグメントの略がレジスタ名となっているのがわかります

CSレジスタは、自分自身のセグメントです
このレジスタが指すセグメントアドレスは、実行中の機械語プログラムが格納されているアドレスです
CPUが、機械語を実行するために必要で、自動的に使用されます

DSレジスタは、データを格納する専用のセグメントを表します
レジスタとメモリのデータ転送で参照されるのがこのセグメントです

ESレジスタは、基本的な役割はDSレジスタと同じです
データセグメント以外にセグメントが必要な場合に使用します

SSレジスタは、スタック操作に使われるセグメントアドレスを格納します

では、MS-DOSのDEBUGを用いて調べてみましょう
Rコマンドで、もう一度レジスタ一覧を表示してセグメントレジスタを表示させます
-R
AX=0000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=15F2  ES=15F2  SS=15F2  CS=15F2  IP=0100   NV UP EI PL NZ NA PO NC
全てのセグメントレジスタが、同じ値になっています
このプログラムは、セグメントアドレス 15F2 に格納されていることがわかります
他のセグメントレジスタも同じ値なので、15F2セグメントのプログラムは
メモリからレジスタにデータを転送する時、同じセグメントを参照します

MS-DOSは、セグメントの管理はOSが担当します
私たちが扱うのはオフセットアドレスであり、セグメントレジスタは基本的に操作しません



前のページへ戻る次のページへ