Позволяет ли использование FreeDOS моей программе получать доступ к более чем 64 Кб памяти?

Я интересуюсь программированием на C на FreeDOS, изучая при этом некоторые базовые ASM. Позволит ли использование FreeDOS моей программе получить доступ к более чем стандартным 640 КБ памяти?

И, во-вторых, что касается ASM, я знаю, что на современных процессорах трудно программировать на сборке из-за сложности архитектуры ЦП, но ограничивает ли использование FreeDOS предположительно более простой 16-битный набор инструкций?

1

Решение

Без какого-либо расширителя программа может использовать максимум 640 КБ памяти в DOS. Но каждая структура будет ограничена размером сегмента, или 64 КБ. Это означает, что вы можете иметь 10 больших массивов размером 64 КБ. Конечно, вы можете использовать больше, имея несколько массивов в сегменте, но их общий размер не должен превышать размер сегмента

1

Другие решения

MS-DOS и FreeDOS используют области «HIMEM»:

  • Некоторые области памяти выше 0xA000: 0x0000 зарезервированы для карт расширения, которые содержат ОЗУ вместо карт расширения
  • Память, начиная с 0xFFFF: 0x0010 до 0xFFFF: 0xFFFF, которая расположена выше 1 МБ, но к ней можно получить доступ с помощью 16-битного кода реального режима (если активна так называемая линия A20).

Максимальный объем памяти, который может быть заархивирован таким образом, составляет около 800 КБ.

Используя XMS и EMS, вы можете использовать до 64M:

  • XMS выделит блоки памяти над областью, к которой можно получить доступ через 16-битный код реального режима. Существуют специальные функции, которые могут копировать данные из этой памяти на 640 КБ памяти и наоборот.
  • EMS похожа; однако, используя EMS, можно «отобразить» верхнюю память на низкий адрес (функция 32-разрядных процессоров), что означает, что вы можете получить доступ к некоторой памяти выше 1 МБ, как если бы она находилась по адресу ниже 1 МБ.
1

По вопросам рекламы [email protected]