P/ECE・ワンダーウイッチ・BASIC STUDIOat GAMEDEVP/ECE・ワンダーウイッチ・BASIC STUDIO - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト184:名前は開発中のものです。 02/08/02 19:53 .net 8086 の場合は、20 ビットのアドレス空間 (1M バイト) への アクセスを、このあとで説明する 16 ビットの組み合わせでやることに して、それを「セグメント」と称した。 8086 には、CS, DS, ES, SS という 4 つの「セグメントレジスタ」が ある。こいつらは 16 ビットのレジスタ。 で、CPU に対するアドレスの指定は 16 ビットしかふつうはできない。 16 ビットでどうやって 20 ビットの空間全体にアクセスするのか、という と、「セグメントレジスタの値 × 16 + アドレス」という計算をして、 メモリにアクセスすることになる。 この、セグメントレジスタの値のことを「セグメントアドレス」、 加える 16 ビットの部分を「オフセットアドレス」と言ったりする。 185:名前は開発中のものです。 02/08/02 20:02 .net よく「セグメントアドレス:オフセットアドレス」という 書きかたをする。 ちょっと考えるとわかるが、例えば、 0x0001:0x000F と 0x0000:0x001F は、実際には同じメモリを 指している。これにハマることが時々ある。 また、どのセグメントレジスタがアドレスの算出に使われるか、 というのは、目的ごとにデフォルトが決まっていて、 IP レジスタのアドレスから命令を読む時は CS (よく CS:IP と書く) SP レジスタ(スタックポインタ)を参照する場合や、 (スタックへのプッシュやポップ)BP レジスタ (ベースポインタ)を参照するメモリアクセスは SS レジスタ、 そのほかのたいていのデータの読み書きは DS、 となっている。「セグメントオーバーライド」を 指定してやると、セグメントレジスタを指定してメモリに アクセスさせられる。 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch