Шаг 32 - Адресация сегмент - смещение

Ранее уже было сказано, что для процессора 286 регистры все 16 разрядные. Они состоят из двух слов по 8 бит. Так вот 16 разрядный регистр позволяет хранить число не больше чем 65536 или 64 KB (65536/1024). Но оперативная память в DOS имеет размер 640 KB. Соответственно возникает вопрос как в данном случает производить адресацию ко всему диапазону памяти. Выход был найден компанией Intel в использовании для адресации сегмента и смещения. Используя два 16 разрядных числа и специальный алгоритм можно обращаться к памяти размером 1048576 байта или 1024 KB тем самым, предоставив все необходимое пространство адресов. С данной адресаций мы сталкивались в шагах - "Шаг 9 - Указатель на данные" для получения адреса строки. Результатом арифметических операций является 20 разрядное число которое реально подается на шину адреса системной платы. Смотрите схему:

32_1.gif (2273 b)

Сегмент расширяется до 20 разрядов и сдвигается вправо на 4 разряда. Освободившиеся место заполняется нулями. Смещение тоже расширяется до 20 разрядов и в добавленные разряды записывается ноль. Сегмент и смещение складываются и получается адрес который используется в дальнейшем. Обычно подобные адреса пишутся в формате

cегмент : смещение

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем.