[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[WitchTech 00031] Re: SS!=DS 問題 (Re: [WitchFan 00036] Re: はじめまして)



樋口です。

>x86のセグメントってみんなから嫌われてますよねぇ。
>#僕もさんざん苦労させられたんで、イメージは良くはないですが(笑

ですねぇ。もっとも386以降になるとちゃんと32bitCPUなんですが
こんどはLDTだのGDTだのってのがでてきて全然わかんない。

組み込み用のファーム書くぶんには8086ってそんなに使いにくく無い
んですけどね。只最近はROMモノでもネットワークアクセスがデフォ
みたいになってきてるんで8086だと辛い気もしますが。

>もっとも、セグメント間のアドレス空間が、完全に独立している訳では
>無いのが、中途半端だとは思いますが。

つまりこれですね。
             segment 1000           segment 1FFF
         +)  offset   FFFF   ==  +)  offset  000F
         -----------------       --------------------
実アドレス           1FFFF                  1FFFF

20Bitの実アドレスはセグメントレジスタとオフセットレジスタで表され、
4ビットずれている。このため、レジスタの値が違っても同じアドレスを
示すことができる。
 DS=1000, AX =FFFF -> DS:AX = 1FFFF
 DS=1FFF, AX =000F -> DS:AX = 1FFFF

で、混乱しやすいのがアドレスの言いまわし。セグメントレジスタの
ことを考えないで単純にメモリ空間を言う場合、64K単位でセグメント
がインクリされるんで、
  20000H == 2000:0000H == 2セグの0番地

とか言う表現になり、このときにはオーバーラップする12ビット
のことには触れられない。よってちんぷらかんぷら、となる。
ってとこですか。

#同じセグメントモデルでもZ8000のほうがスマートで好きでしたね。

higuchi

--------------------------------------------------------------------------------
Takahiro Higuchi                                  Office higuchi@sims.co.jp
                                                Internet higuchi@lares.dti.ne.jp 


ML Archives