Логический адрес в сегментации - PullRequest
1 голос
/ 20 февраля 2012

Руководство Intel гласит: «Логический адрес состоит из 16-разрядного селектора и 32-разрядного смещения». Теперь, если вы используете небольшую программу на C:

printf("The address of a=%x", &a);

Выход: 0xbffa8343

Приведенный выше адрес является 32-битным, как его можно разделить на селектор (16-битный) и смещение (32-битный)?

1 Ответ

2 голосов
/ 20 февраля 2012

32-битный адрес в этом случае равен 32-битное смещение относительно направляющей. «16-битный селектор», как правило, не включается в код на C и, фактически, часто остается неявным в ассемблерном коде. (Во многих современных операционных системах сегментация даже не используется, за исключением внутреннего доступа к локальному хранилищу потоков. По большей части установлен сегмент по умолчанию, который указывает на все 4 ГБ виртуальной памяти.)

Возможно, вам будет полезно поискать в Интернете хорошее введение в регистры сегментов и узнать, как сегодня используется сегментация.

...