トップ-> アセンブラ入門:1章.基礎-> 1-2.セグメントとは

←前ページへ :  トップへ :  次章へ→



1-2.セグメントとは

  8086,80186,(V30),80286のアドレスバスは20bitです。アドレスバスとは、電話番号の 桁数のようなものです。10桁の電話番号では1010すなわち10,000,000,000個の電話を管理できることに なります。20bitですと220すなわち10進数では1,048,575(1メガ)まで管理できることになります。 16進数で表すと0x00000から0xFFFFFまでで、5桁となります。 しかし、データバスやレジスタは16bitであり、16進数で4桁しか覚えられません。電話番号を メモしなければならないのに、メモ用紙に8桁しか書くスペースがなく、残りの2桁が書けないのと同じ状態です。 そこでメモ用紙を2枚使用することになります。しかし2枚目に足りない2桁をメモすると、8桁メモできる スペースがあるのに残りの2桁しかメモしないのはもったいないです。

  そこで例えば、03-3123-4567をメモする場合に、1枚目に03-3123-45とメモし、2枚目に 0000-0067とメモし、これを2桁ずらして足します。そうすると03-3123-4567となります。 03-0000-00、3123-4567とメモしても同じです。「0」で埋めなくても、03-1111-11と 2012-3467としても同じです。

03-3123-45
+) 0000-0067

 03-3123-4567
03-0000-00
+) 3123-4567

 03-3123-4567
03-1111-11
+) 2012-3467

 03-3123-4567

  これをアドレスについても適用させます。12345hというアドレスを16bitレジスタ 2つで表すのに、1234hと0005hと記憶し、これを1桁ずらして足すことで、12345hと表すことが できます。これを「1234h:0005h」と表記します。「1000h:2345h」や「1111h:1235h」 も12345hを表します。

1234
+) 0005

 12345
10000
+) 2345

 12345
1111
+) 1235

 12345

  1234h:0005hと表したとき、上の4桁「1234h」をセグメント、下の4桁「0005h」を オフセットと呼びます。


←前ページへ :  トップへ :  次章へ→