DS, ES зарегистрируйтесь - PullRequest
       4

DS, ES зарегистрируйтесь

4 голосов
/ 20 марта 2012

Я разобрал определенный двоичный файл (Linux Elf).И я нашел этот код:

movsl %ds:(%esi),%es:(%edi)

Есть два регистра 'ds' и 'es'.Я знаю, что они называются «Сегментный регистр».Но нет таких строк, как «mov addr,% es (или% ds)».Куда указывают эти регистры?

1 Ответ

1 голос
/ 20 марта 2012

Сегментные регистры инициализируются ОС. Для большинства современных ОС они указывают на тот же сегмент, который относится ко всему адресному пространству, так как большинство ОС используют модель с плоской памятью (то есть без сегментации).

Причина, по которой не используется только ds (по умолчанию почти для всех обращений к памяти), заключается в том, что операнды для movs являются неявными и имеют смысл во времена DOS.

Во времена DOS (реального режима) их фактически использовали, поскольку регистры были ограничены 16-битным и, следовательно, ограничены 64 КБ адресного пространства. Адресное пространство (1M) было разделено на перекрывающиеся сегменты 64K.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...