Использование селекторов в ASM с VS2010 - PullRequest
0 голосов
/ 11 февраля 2012

У меня есть старое 16-битное приложение на ассемблере, которое я хотел бы перенести на 32-битную версию. Проблема в том, что он интенсивно использует сегменты ds, es и gs. Поэтому я не могу использовать плоскую модель. Так что я могу перенести их на селекторы.

Может ли VS2010 поддерживать селекторы в приложении уровня пользователя в 32-битном режиме?

1 Ответ

1 голос
/ 12 февраля 2012

Вы смешиваете два разных термина.В режиме REAL x86 использует регистры сегментов и вычисляет 20-битный адрес следующим образом:

address = (segment_register << 4) + Offset

В режиме PROTECTED (как 16-битном, так и 32-битном) регистры сегмента удерживают селекторы до 64k /4 ГБ блоков памяти и адрес рассчитывается следующим образом:

address = selector_table[segment_register] + offset

В операционных системах, которые используют 32-битный и 64-битный защищенный режим, ОС обычно сохраняет ES = DS = GS = SS и использует только32- или 64-битное смещение в адресной памяти.

Если ваш код основан на вычислениях адреса в реальном режиме, его необходимо будет полностью переписать для защищенного режима.Однако, если он был написан для 16-разрядного защищенного режима, то он все равно потребует значительных изменений, но меньше, чем в первом случае.

Возвращаясь к вашему вопросу - VS2010 не ограничивает способ написаниякод, ОС делает.Изменение значения регистров сегмента в защищенном режиме может привести к нарушению привилегий.Кроме того, переопределения сегментов (например, ES: [DI]) не нужны, поскольку все регистры сегментов содержат одинаковое значение.

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