Электронный учебник:


Курс лекций:


Дополнительно:

Практикум:



Наши хостеры:

Адресация памяти в DOS

В DOSпроцессор работает в реальном режиме (или режиме виртуального процессора). Он эмулирует процессор I8086, который работает с 16-битовыми числами, не превышающими 65536.

Для обращения к большей памяти с применением 16-битовых чисел используются сегментные адреса. Сегментные адреса образуются при объединении двух 16-битовых слов, которые обеспечивают адресацию 1 Мбайт памяти.

Арифметика объединения двух слов в сегментный адрес основана на сдвинутом сложении, которое позволяет образовать 20-битовое двоичное слово.

Пример:

Имеются два 16-битовых слова с 16-ричными значениями ABCD и 1234. Если к ABCD приписать в конце 0, то получим ABCD0. Эта операция эквивалентна сдвигу числа влево на 16-ричный разряд, либо умножению на 16. Теперь его длина составляет 20 битов, что переводит его в диапазон одного миллиона. Полученное число может адресовать каждый 16-й байт. Для реализации сегментной адресации второе 16-битовое число прибавляют к сдвинутому числу:

ABCD0                сегмент

   1 23 4                смещение

ACF0 4

Адреса памяти, кратные 16, называются сегментными параграфами.

Смещение сегментного адреса определяет положение байта относительно сегментного параграфа. Смещение сегментного адреса позволяет работать с 64 килобайтами памяти, имеющими один сегментный адрес.

Стандартный способ записи сегментных адресов: ABCD:1234.

Кроме сегментной формы записи адресов существует форма записи абсолютных адресов. Для ABCD:1234 абсолютным адресом будет ACF04.

Для сегментной части сегментного адреса предназначаются сегментные регистры. Каждый из них определяет сегментный параграф, предназначенный для конкретной цели:

·        Сегментный регистр кода CSпоказывает, где находится код;

предыдущаяследующая