длина виртуального адреса x86 - PullRequest
0 голосов
/ 12 сентября 2011

При чтении

Руководства разработчика программного обеспечения для архитектуры Intel® 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 (перевод Google)

Виртуальный адрес должен быть 16 + 32 бита, я прав? Итак, какой адрес указан при программировании на некоторых языках ассемблера низкого уровня? Или, проще говоря, какой адрес мы видели при отладке? Я предполагаю, что это 32 бита. Адрес в программировании или отладке, линейный адрес? Большое спасибо.

Ответы [ 2 ]

0 голосов
/ 14 сентября 2011

Виртуальные адреса на компьютерах с архитектурой x86 всегда 32-битные, обычно с пользовательским пространством по адресам 0 - 0x7FFFFFFF и адресами ядра 0x8000000 - 0xFFFFFFFF (конечно, существуют исключения, когда адресное пространство разделяется). Страница, на которую вы разместили ссылку, говорит о 16-битном реальном режиме, где адреса 16-битные, но на самом деле можно адресовать только 1 МБ памяти, поскольку также использовалась сегментация (дополнительный регистр).

Я не уверен, почему вы говорите о 16 + 32 битах - возможно, вы смешали виртуальную адресацию и сегментацию. Все еще существуют 16-битные регистры сегментации, однако сегментация устарела, и в большинстве операционных систем она не используется. См. Руководства Intel, которые вы упомянули, чтобы узнать, как это работает.

Размер виртуальных адресов не имеет ничего общего с низкоуровневой сборкой, там вы все еще обычно пишете 32-битные приложения (если вы не пишете свою собственную ОС, для которой требуется код реального режима для загрузки на x86).

0 голосов

В пользовательском режиме в современных системах x86, таких как windows / * nix, виртуальные адреса являются либо 64-битными (хотя некоторые биты в настоящее время не используются), либо 32-битными.

...