セグメントレジスタ
セグメントレジスタの種類
以前説明した 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が担当します
私たちが扱うのはオフセットアドレスであり、セグメントレジスタは基本的に操作しません