2011-09-12 15 views
0

x86の仮想アドレス長

インテル®64およびIA-32アーキテクチャー・ソフトウェア・デベロッパーズマニュアル

と、保護モードに関するいくつかの関連のチュートリアルを読みました。 私はこの質問に出会った。 マニュアルとブログによる http://translate.google.com/translate?hl=en&sl=auto&tl=en&u=http%3A%2F%2Fwww.fh-zwickau.de%2Fdoc%2Fprmo%2Fpmtutor%2Ftext%2Fr_phys7.htm

仮想アドレスは16 + 32ビットでなければなりませんか? いくつかの低レベルのアセンブリ言語を使用してプログラミングするときに提供されるアドレスは何ですか?それとも、単にデバッグするときに見たアドレスは何ですか? これは32ビットです。 アドレスはプログラミングまたはデバッグのリニアアドレスですか? ありがとうございました。

答えて

0

windows/* nixのような最新のx86システムのusermodeでは、仮想アドレスは64ビット(一部のビットは現在未使用)または32ビットです。

0

x86マシンの仮想アドレスは常に32ビットです。通常、アドレスは0〜0x7FFFFFFF、カーネルアドレスは0x8000000〜0xFFFFFFFFです(アドレス空間の分割方法は例外です)。あなたがリンクを投稿したページは、16ビットのリアルモードについて語りますが、アドレスは16ビットですが、セグメンテーションが使用されたため(追加のレジスタ)、実際には1MBのメモリしか扱えません。

私はなぜ16 + 32ビットについて話すのか分かりません。仮想アドレッシングとセグメンテーションが混在しているかもしれません。まだ16ビットのセグメンテーションレジスタがありますが、ほとんどのオペレーティングシステムでセグメンテーションは使用されなくなりました。これがどのように機能するかについては、上記のインテルのマニュアルを参照してください。

仮想アドレスのサイズは低レベルのアセンブリとは関係ありませんが、通常は32ビットアプリケーションを作成します(x86で起動するためにはいくつかのリアルモードコードが必要なOSを作成していない限り) 。

関連する問題