Использование указателей в программах на языках С/С++/С# . Васильев В.Г. - 23 стр.

UptoLike

Составители: 

Это происходит следующим образом. Процессор расширяет сегментный
регистр котором хранится начальный адрес сегмента) четырьмя нулевыми
битами (это равносильно умножению адреса начала сегмента в
шестнадцатеричной системе счисления на 10h) и прибавляет к полученному
значению смещение адреса как показано на рисунке:
Например, если адрес сегмента равен 1234h, смещение равно 1116h, то
полный (исполнительный) 20 -разрядный адрес будет 12340h+1116h=13456h.
Таким образом, оперируя 16-разрядными адресами сегмента и смещением,
процессор может адресовать 1Мбайт памяти. Для хранения сегментных
адресов и смещений процессор имеет специальные регистры: CS,DS,ES,SS.
Эти регистры содержат соответственно адреса сегментов кода, данных,
дополнительных данных и стека.
Физический адрес памяти принято записывать таким образом:
XXXXh:XXXXh (адрес сегмента : адрес смещения в сегменте).
2.2 Ближние и дальние указатели
В DOS - программах можно использовать указатели типа near (близкие) и
far (дальние). Для Windows-программ понятие ближнего и дальнего указателя
не существует. В языке С++ нет и ключевых слов near и far.
Для явного объявления ближнего указателя используется ключевое
слово near, например,
float near * point;.
Если просто
float * point;,
то по умолчанию данный указатель ближний и в нем хранится смещение
некоторой переменной относительно начала сегмента, в котором размещена
данная переменная (сегмент стека или сегмент данных программы). Для
хранения значения смещения достаточно двух байт памяти. Поэтому всем
переменным типа указатель, которые объявлены явно или по умолчанию как
близкие, выделяется два байта памяти.
Ключевое слово far используется для объявления дальнего указателя,
например,
float far * point;.
23