Тонкая настройка и оптимизация MS-DOS


Область от 1024 килобайт и выше


Это расширенная память. Её начальный участок от 1024 до 1088 килобайт - область старшей памяти (High Memory Area - HMA). Именно в эту область MS-DOS версии 5.0 может помещать значительную часть своего ядра и области данных. Интересной особенностью области HMA является то, что она доступна для процессора, работающего в реальном режиме, то есть как раз в том режиме, который использует MS-DOS.

Как такое может быть? Для того, чтобы это понять, необходимо вспомнить механизм сегментной адресации памяти, используемый всеми процессорами серии Intel 80XXX. Физический адрес получается из двух компонент - сегментного адреса и смещения. Каждая компонента - двухбайтовая. Для вычисления адреса в реальном режиме работы процессора к сегментной компоненте, сдвинутой влево на четыре бита, прибавляется компонента смещения.

Например, пусть у нас имеется логический адрес 1234:0005 (при работе с адресами обычно используются шестнадцатеричные числа). Сегментный адрес равен 1234, а смещение - 0005. Сдвигаем сегментный адрес влево на четыре бита, получаем 12340. Затем прибавляем смещение 0005 и получаем физический адрес 12345.

Задавая какое-нибудь значение сегментного адреса и меняя смещение, мы можем адресоваться к любым 64 килобайтам памяти в пределах первого мегабайта.

А что получится, если задать сегментный адрес FFFF, то есть самое большое значение для сегментного адреса?

Очевидно, что конец области оперативной памяти, простирающейся от 0 до 1024 килобайт, имеет адрес FFFF:000F, так как этому логическому адресу соответствует физический адрес FFFFF. Адрес FFFFF - это самый большой адрес, который может быть задан при использовании 20-разрядной адресации. А реальный режим работы процессора использует именно 20-разрядную адресацию.

Зададим себе вопрос: что произойдёт, если, например, при записи в память будет указан логический адрес FFFF:0010?

Если в вашем компьютере установлен процессор 8086 или 8088, то произойдет запись в самую первую ячейку оперативной памяти, имеющую физический адрес 00000, так как перенос из 19-го разряда в двадцатый будет игнорирован (адресные разряды в процессоре 8086 или 8088 нумеруются от 0 до 19).




- Начало -  - Назад -  - Вперед -