Память состоит из отдельных элементов, каждый из которых предназначен для хранения минимальной единицы информации — одного байта. Каждому элементу соответствует уникальный числовой адрес. Первому элементу присвоен адрес 0, второму — 1 и т. д., включая последний элемент, адрес которого определяется общим количеством элементов памяти минус единица. Обычно адрес задается шестнадцатеричным числом (в тексте шестнадцатеричные числа помечаются заглавной «Н», например ЮН). Сегменты. Процессор компьютера делит память на блоки, называемые сегментами. В Ms-Dos каждый сегмент занимает 64 Кбайт и каждому сегменту соответствует уникальный числовой адрес. Процессор имеет четыре регистра сегмента.
Регистр — это участок сверхоперативной памяти процессора, предназначенной для хранения информации.
Регистры сегмента предназначены для хранения адресов отдельных сегментов. Они называются CS (сегмент кода), DS (сегмент Данных), SS (сегмент стека) и ES (запасной сегмент).
Процессор имеет еще 9 регистров: IP (указатель команды) и SP (указатель стека). Регистры CS и IP в паре составляют длинный адрес команды, которая будет выполняться следующей. Регистры SS и SP в паре составляю длинный адрес стека.
Регистры общего назначения. К регистрам общего назначения (их четыре) относятся регистры АХ, ВХ, СХ и DX. Это многофункциональные регистры. Регистры памяти. Регистр памяти включает 2 байта данных (или 16 битов). Реально регистры общего назначения однобайтные. Так, регистр АХ включает регистр АН (который составляет старший байт регистра АХ) и регистр AL (который составляет младший байт регистра АХ). Аналогично регистры ВН, BL, CH, CL, DH и DL — однобайтные.
Сегментные регистры. Сегментные регистры используются при идентификации сегмента памяти. Сегментные регистры применяются в комбинации с регистром указателя или индексными регистрами и в этом случае идентифицируют конкретную ячейку памяти. Всего сегментных регистра четыре. Регистр CS обычно используется при идентификации блока памяти, в котором хранится код программы. Регистр DS — при идентификации участка памяти, в котором находятся данные этой программы. С помощью регистра SS организуется доступ к стеку. (Стек — это временно выделенная область памяти, обеспечивающая интерфейс «MS-DOS-прикладная программа».) Регистр ES — дополнительный (или запасной) сегментный регистр. На него возложены разнообразные функции, часть из которых рассматривается ниже.
Регистры стека. Имеются два регистра стека. Они применяются, комбинации с регистром SS и определяют местонахождение стека, регистр SP называется указателем начала стека и в комбинации с регистром SS идентифицирует первый байт стека. Регистр ВР называется указателем базы стека и в комбинации с регистром SS идентифицирует последний байт стека.
Индексные регистры. Индексных регистров тоже два. Регистры SI и DI применяются в комбинации с одним из сегментных регистров и определяют местонахождение конкретной ячейки памяти. Регистр SI обычно комбинируют с регистром DS, регистр DI — с регистром ES.
Регистр указателя команды. Регистр IP обычно применяется в комбинации с регистром CS и определяет адрес следующей команды.
Регистр флагов состояния. В регистре флагов обычно находятся девять флагов состояния процессора (каждый флаг занимает 1 бит). Эти флаги определяют результат конкретных операций, выполняемых под управлением MS-DOS.
Доступ к памяти. Доступ к ячейкам памяти осуществляется посредством соединения содержимого регистра сегмента с содержимым того или другого регистра. Таким образом, определяется адрес требуемого участка памяти. Например, адрес следующей команды определяется содержимым регистров CS и IP (записывается «CS:IP»). После выполнения команды и ее удаления из памяти содержимое IP изменяется так, чтобы в регистрах CS IP находился адрес команды, которая будет выполнена после данной.
Способ объединения регистров для определения адреса ячейка памяти не накладывает ограничений на количество доступной памяти. Верхнее ограничение зависит от физического строения памяти (т. е. от общего количества ячеек). Первые версии MS-DOS разрабатывались для процессора Intel 8088 CPU. Каждый регистр этого процессора рассчитан на хранение 16-битового числа. То есть CPU 8088 комбинирует содержимое сегментного регистра (скажем, CS) с содержимым другого регистра (скажем, IP), получая 20-битовый адрес памяти, что ограничивает доступную память до 220 байтов или 1 Мб.
Позже появились усовершенствованные процессоры CPU 80286 и 80386 и соответственно им усовершенствованные версии MS-DOS, позволяющие производить доступ к ячейкам, расположенным за пределом 1 Мб памяти.
Доступ к памяти организуется соединением содержимого одного из регистров сегмента с содержимым одного из оставшихся регистров. Значение сегментного регистра называется адресом сегмента. Значение остальных регистров в этом случае называется относительным адресом ячейки памяти (от начала сегмента) или ее коротким адресом. Таким образом, адрес байта вычисляется посредством умножения адреса сегмента на 16 и к полученному значению добавляется короткий адрес.