что определяет модель памяти? - PullRequest
4 голосов
/ 20 марта 2012

Конкретно этот вопрос касается плоской и сегментированной модели в реальном режиме.Я читаю книгу по сборке, в которой упоминается, что в DOS COM-файлы используют модель плоской памяти, а EXE-файлы - сегментированную модель памяти.Однако я не понимаю, что говорит DOS, какую модель памяти использовать.Я задаю этот вопрос, потому что я читаю о загрузчиках.

Ответы [ 3 ]

4 голосов
/ 20 марта 2012

COM-файлы использовали «плоскую модель памяти» в том смысле, что регистры сегментов были полностью установлены DOS, когда программа была загружена так, чтобы указывать на один и тот же сегмент, и весь код и указатели были, по соглашению, относительно этогоодно значение в сегментных регистрах.

Формат файла EXE, с другой стороны, позволяет загружать сегменты с разными смещениями.DOS не будет устанавливать регистры сегмента в значения по умолчанию;это было до самого кода.16-битный EXE-код намного сложнее, потому что код должен управлять сегментными регистрами.

В настоящее время большая часть EXE-кода более или менее игнорирует сегментные регистры снова;32-битные или 64-битные регистры не нужно добавлять в регистр сегмента для генерации используемого адреса.

1 голос
/ 20 марта 2012

В DOS нет ничего, что могло бы помешать COM-файлу использовать модель сегментированной памяти, поскольку DOS не применял политику управления памятью в своих приложениях.

Вы можете прочитать запись в Википедии о COM-файлах , она дает представление об этих старых вопросах.

1 голос
/ 20 марта 2012

Исполняемые файлы COM и EXE содержали требования к памяти в заголовке файла: Заголовок EXE и Заголовок COM (MS-DOS) .Если программе требуется <64 КБ, используйте плоское пространство, если> 64 КБ, используйте сегментированную память.

...