02. Сегментные регистры. Адресация в реальном режиме. Понятие сегментной части адреса и смещения. - mRrvz/bmstu-asm GitHub Wiki
Сегментные регистры
■ Сегмент кода (CS)
■ Сегменты данных (DS, ES, FS, GS)
■ Сегмент стека (SS)
Каждый регистр содержит адрес для разных сегментов программы, с помощью них и происходит доступ к этим сегментам.
Мы знаем что регистр IP "указывает" на следующую команду, мы также знаем что регистры у нас размером в 16 бит, таким образом, используя один регистр программист имеет доступ только к 2^16 адресам, это примерно 64 кБ. Это достаточно мало, поэтому адресация в 8086 по 2^20 адресам, то есть примерно 1 МБ памяти. Для этого используют адрес начала сегмента и смещение. Сегментные регистры как раз хранят адрес. Реальный адрес высчитывается так: сегментная_часть × 16 + смещение. (умножение на 16 = сдвиг на четыре бита влево)
При такой адресации адреса 0400h:0001h и 0000h:4001h будут ссылаться на одну и ту же ячейку памяти, так как 400h × 16 + 1 = 0 × 16 + 4001h.