2015-10-20 5 views
-1

В этом article мы видим, что 16 битовых систем имеют разные модели памяти.MS-DOS, что определяет выбор модели памяти

С помощью этого answer мы знаем, что COM-приложение всегда использует Tiny Model (все сегменты находятся в одном и том же), но для других исполняемых файлов, что делает операционную систему той или иной моделью?

Я не видел в заголовке MS-DOS любого флага, который бы помог выбрать, и как MS-DOS определяет, какую модель памяти использовать?

+0

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

+0

Возможный дубликат [что определяет модель памяти?] (Http://stackoverflow.com/questions/9778425/what-determines-the-memory-model) –

+0

Возможно, вы не читали [это] (http: // stackoverflow .com/вопросы/9778425/what-определяет-память-модель # комментарий12449647_9778511) комментарий? В принципе, окончание файла определяет, что делает DOS. –

ответ

2

Выбор модели памяти необходим как опция компилятора, а не связанная с ОС. Вы можете предположить, что DOS всегда работает с большой моделью памяти (далеко указатели для CS и DS).

+0

Итак, из вашего ответа я понимаю, что модели памяти более «понятны для человека», что компилятор генерирует для OpCodes, а не что-то, что является неотъемлемой частью ОС/процессора? Если да, то как процессор знает, что он должен использовать «Far Pointer» или «Near Pointer», когда программе необходимо получить доступ к памяти? –

+0

Указатель 'near' предполагает, что номер сегмента уже находится в регистре сегментов (CS для кода, DS для данных). С указателями «far» вы явно загружаете «DS», «ES», «FS» и т. Д. С номером сегмента и выполняете операцию доступа к памяти. С точки зрения OS, сегментные регистры всегда должны загружаться, например, для вызова программы (DOS загружает ее по адресу 0x0100 в сегменте 0x1234, а затем делает CALL до 1234: 0100). То же самое с сегментом данных программы - нет (или мало) шанса для программы DOS использовать тот же сегмент, что и текущий сегмент данных операционной системы. Другими словами, DOS должен загрузить регистр DS. – i486

+0

PS: 'дальние' вызовы или указатели данных' far' похожи на глобальные адреса, а указатели 'near' являются локальными для DOS-программы. Если программа работает с большим количеством данных, она использует соответствующую модель памяти, в которой все указатели данных «далеки» (т. Е. Больше байтов для кодирования, более медленное выполнение, но у него более 64 КБ памяти). – i486

Смежные вопросы