Адресация памяти в 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показывает, где находится код;
предыдущаяследующая