• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:8086のメモリ管理について。)

8086のメモリ管理について

shokker02の回答

  • shokker02
  • ベストアンサー率45% (204/446)
回答No.1

8086の物理アドレスは最大1MByteです。 アドレス信号として、A0~19 と BHE- の21本ありますが、BHE-とA0 は 16bitデータの上位8bit・下位8bitの指定に使われるもので、他のアドレスと性格が若干異なります。 (4つのセグメントで物理アドレスに分けるなら更に4倍になりますけど、普通しません) で、「セグメント」という領域の先頭アドレスを指定するのですが... ・物理アドレス20bitを指定したいが、レジスタ群は16bitなので扱いにくい ・セグメントのアドレスは、1番地きざみの必要はないだろう(細かい必要がなかろう) ということで、セグメントアドレスのうち下位4bitを"0000"固定とし、 上位側16bitをセグメントレジスタで指定する事にしました。 というわけで、セグメントレジスタの16bitを、物理アドレス20bitに変換する方法が 「16倍して(=4bitシフトして)下位4bit"0000"とする」という事なのです。 >問題はセグメントアドレス X 10Hがどこの箇所(例えばCPUの中)で行われているのでしょうか そうです。 プログラマの意識によらず、プログラムですらCS(コードセグメント)を知らないうちに使われ、 20bit物理アドレスに変換して使われています。 プログラム自体のジャンプ先などは、セグメント内のオフセット値なので、 物理アドレスを意識しない作りになっています。 >MMUはもちろんないはずだと思います はい。8086にはMMUはありません。

HackHack
質問者

お礼

shokker02さん、ご回答頂き誠に感謝申し上げます。 ご教示頂いた、 >・物理アドレス20bitを指定したいが、レジスタ群は16bitなので扱いにくい >・セグメントのアドレスは、1番地きざみの必要はないだろう(細かい必要がなかろう) >ということで、セグメントアドレスのうち下位4bitを"0000"固定とし、 >上位側16bitをセグメントレジスタで指定する事にしました。 とても勉強になりました。 そして、20bit物理アドレス変換はCPUの中で行われているのですね! 沢山のご教示頂き、更に知識が深まりました。 本当にありがとうございました!

関連するQ&A

  • MASMのセグメント+オフセットと物理アドレス値

    素人、アセンブリ言語をかじっています。専門的な教育は受けてません。 MASMではアドレス値を指定するのに セグメント値+オフセット値でしていします。 セグメント値を確定しオフセット値が決まれば当然物理アドレス値はきまります。 セグメント+オフセット -> 物理アドレス値 :一対一に対応しています。 しかし 物理アドレス値 -> セグメント+オフセット :一対一の対応 不可 だと思います。 セグメント値がきまらなければ一対一の対応はしませんし、物理アドレスからセグメント値は決められないと思っています。 物理アドレスからセグメント値がきまるのでしょうか? この辺の対処はどうなっているのでしょうか? MASM -> 機械語  対応はできますが、 機械語->MASM どう対応するのか? をふくめて、どうなっているのでしょうか 宜しく願います。

  • ポケコン(Z-1GR)でのアセンブリ言語の記述方法について。

    ポケコン(Z-1GR)でのアセンブリ言語の記述方法について。 いつもお世話になっております。 小生、只今Z-1GRというポケコンを使用し、x86のアセンブリ言語を習得しようとしています。 そこで、先輩方に質問なのですが、私のもっている3種類のポケコンでアセンブリ言語を入力する際、必ず先に使用するメモリの量を指定しなければいけません。 かといって、私の今のスキルでは、どのくらいのプログラムの量になるかはわかりませんので、最初に指定するメモリの量もわかりません。 先輩方はこのような時、まず、紙などにプログラムを書き、それでメモリの量などを計算していらしたのでしょうか? それとも、最初から各ニーモニックを機械語に変換した際のバイト数を把握した上でメモリ量を指定されていたのでしょうか? 私はまだまだ、ニーモニックから機械語に変換するスキルを持っていないので、先に紙に書き、書いたニーモニックを機械語に自分で翻訳し、プログラムのバイト量を計算しようと思っています。 この方法以外にも、ポケコンでアセンブリ言語をプログラムする際の便利な考え方があればご教示願います。 お忙しい中申し訳ございませんが、先輩方ご教示宜しくお願い致します。

  • OSはどのようにして、CPUにメモリ上の物理アドレスを伝えるのか?

    一般的なシステムにおいて、プログラムを実行するには、コンパイラが再配置可能なオブジェクトファイルにして、そのオブジェクトファイルをローダがメモリ上にローディングして、CPUによって実行が行われると認識しています。 では、実際にCPUにより実行される時に、どのようにしてCPUは、ローディングされている物理アドレスを知ることが出来るのですか?一番初めにOSがどのようにCPUに先頭番地を伝えているのかが見当がつきません。例えば、486では、セグメントレジスタの値とオフセットアドレスを加算したアドレスを基にメモリとやり取りしていますが、OSがこのセグメントレジスタに先頭アドレスをどのように格納しているのかを教えてください。お願いします。

  • CASIOのポケコンZ-1GRのアセンブリプログラミングについて教えて

    CASIOのポケコンZ-1GRのアセンブリプログラミングについて教えてください。 いつもお世話になっております。 小生、5月6日にとあるオークションでCASIOのポケコンZ-1GRを落札しました。 しかし、落札した商品には取り扱い説明書が付いていません。。。 ネットでも調べたのですが、Z-1GRのアセンブリによるプログラムの手順等が書かれてある、サイトもないです。。。 そこで、皆様に簡単な順序で全然構わないので、起動した画面から、AXレジスタに値1を格納する手順をお教え願いないでしょうか? お忙しい中、申し訳ございませんが、ご教示宜しくお願い致します。

  • メモリ管理機能

    OSのメモリ管理機能についておしえてください。 OSの機能にメモリ管理というのがありますが、これは 論理アドレスと物理アドレスのマッピングなど仮想記憶管理を行ったりしています、そのほか、アプリケーションの名前やデータサイズなども管理してるのでしょうか?(たとえば、Word.exeというプログラム名は論理アドレス何番から何番までに配置、xyz.mp3という名前のデータ名は論理アドレス何番から何番に配置といった感じで)

  • 「ビデオメモリはメインメモリから最大xxMB」の方式

    最近のPCはビデオメモリをメインメモリから、解像度や処理内容(3D等)に応じて動的に確保するようになっているようです。 動作中に、より多くのビデオメモリが必要となった場合、かならずしも物理アドレスが連続したメモリを確保できないと思いますが、その場合どうしているのでしょうか? 思いつくのは、 ・Windowsがメモリを物理アドレス上でメモリブロックを再配置して連続領域を空けてビデオチップに渡す ・ビデオチップにもMMUの仕組みがあって、物理アドレスが不連続のままでも論理的に連続領域と見なして処理できる くらいです。どちらかが合っているのか、また別の方法なのか、どうでもいいようなことですが、気になったのでご存知の方お教えください。

  • x86のプロテクトモードのセグメントについて

    x86のプロテクトモードについて勉強中なのですがわからないことがあるので教えて下さい。 まず「セレクタによってディスクリプタテーブルの中のセグメントディスクリプタが指定されベースアドレスが決まりオフセットが足され物理メモリにアクセスする」と理解しているのですが、これで正しいのでしょうか? またセレクタは8の倍数であると調べたのですが、なぜ8の倍数なのでしょうか。いろいろ調べたのですが、根拠がわかりません。 x86については詳しく知らないので、詳細に教えていただければ嬉しいです。 どうぞよろしくお願いいたします。

  • CASIOのポケコンZ-1GRのRET命令について。

    CASIOのポケコンZ-1GRのRET命令について。 いつもお世話になっております。 小生、現在CASIOのポケコンZ-1GRにて8086アセンブリを勉強している、 アセンブリ初心者です。 今回質問させて頂きたいのは、Z-1GRのアセンブリでラベル内にRET命令を記述し、 アセンブル、実行するとZ-1GRが終了してしまう現象についてです。 再現手順は以下のようになります。 1.Z-1GRを起動。 2.CREAR ,200と入力し、エンターキー押下。 3.menuキー押下し、メニュー画面を表示。 4.キー5を押下し、アセンブリモードに推移。 5.キーSを押下し、エディタを起動。 6.下記のプログラムを記述 ORG 2000H START: MOV AX, 0001H MOV DX, 000FH CMP AX,DX JC LABEL_1 MOV CX, 000FH JMP EXIT LABEL_1: MOV CX,0001H RET EXIT: IRET END 7.Shift+menuキーでアセンブリモードに推移。 8.キーAでアセンブル。 9.アセンブル完了画面が表示される。 10.BRKキー押下、monと入力、エンターキー押下。 11.デバッグ画面に推移し、G2000 ,2014と入力しエンターキー押下。 12.Z-1GRが終了する。 以上です。 もしかして、Z-1GRの仕様でラベル内ではRET命令を使えない事になっているのでしょうか? お忙しい中、大変申し訳ございませんが、先輩方ご教示宜しくお願い致します。

  • 仮想メモリアドレスについて

    OSが管理している仮想メモリアドレスについて質問させて下さい。 物理メモリのアドレスといわれるものと、 仮想メモリのアドレスといわれるものは、 いずれもハードディスク上に存在し、ハードディスク上で OSによって管理されている情報(アドレス)ということになりますか?

  • メモリアドレスについて

    こんにちは アセンブリで、メモリアドレスが指す内容を調べるにはどんな方法がありますか 追跡することはできます そうではなくて例えば、Windows2000 で x0bff8d6a1 は Exitprocess 、x077e62b8d は CreateFile という API を指します このような決まりきった情報を調べるには、どんな方法がありますか