P/ECE・ワンダーウイッチ・BASIC STUDIOat GAMEDEVP/ECE・ワンダーウイッチ・BASIC STUDIO - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト183:名前は開発中のものです。 02/08/02 20:02 よく「セグメントアドレス:オフセットアドレス」という 書きかたをする。 ちょっと考えるとわかるが、例えば、 0x0001:0x000F と 0x0000:0x001F は、実際には同じメモリを 指している。これにハマることが時々ある。 また、どのセグメントレジスタがアドレスの算出に使われるか、 というのは、目的ごとにデフォルトが決まっていて、 IP レジスタのアドレスから命令を読む時は CS (よく CS:IP と書く) SP レジスタ(スタックポインタ)を参照する場合や、 (スタックへのプッシュやポップ)BP レジスタ (ベースポインタ)を参照するメモリアクセスは SS レジスタ、 そのほかのたいていのデータの読み書きは DS、 となっている。「セグメントオーバーライド」を 指定してやると、セグメントレジスタを指定してメモリに アクセスさせられる。 184:名前は開発中のものです。 02/08/02 20:13 で、「スモールモデル」ってのは、CS==DS==ES==SS を 前提にしてるということで、プログラムのコードは単純で 済むが、でかいデータを扱えない。 「ラージモデル」ってのは、全てのアドレッシングを、 前述のセグメントオーバーライドを使ったりして、 セグメントを指定して行う、ってことでメモリはフルに 使えるけどプログラムは重くなる。 「far」ってのは、ポインタがオフセットアドレスだけの ポインタじゃなくて、セグメントアドレスもセットになった ポインタだよ、ってのを C コンパイラに伝えるキーワードで、 8086 用の処理系にはみんなあった。 この far を使ってプログラムをうまく書けば、DS==SS を 前提としてる LSI C-86 試食版でも、DS!=SS なウィッチで ちゃんと動くコードが生成できる、ってコト。 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch