CS против DS в защищенной плоской модели

Имеют ли одинаковые значения регистры сегментов CS & DS для данного процесса в защищенной плоской модели?
Другими словами, выполните следующие кодовые последовательности в одной программе
mov dword ptr [0x7fffffff], ebx
а также
org 0x7fffffff
...some instruction ...

ссылаетесь на то же место? (и если да, то какова цель иметь отдельные CS & DS в защищенной плоской модели?) Спасибо.

1 ответ

Значения и значение регистров сегмента зависят от среды (т. Е. Операционной системы и режима ОС), которые сегодня в основном используют защищенный режим с моделью плоской памяти. Я предполагаю, что вы разрабатываете для Windows (Win32), так как вы используете синтаксис MASM.

Модель программирования Win32 использует плоское 32-битное адресное пространство, как и большинство вариантов Unix. Местоположения, адресованные через CS, DS, ES и SS, относятся к одним и тем же логическим адресам. Регистр FS i386 указывает на информационный блок задач Win32 (TIB).

Сегментные регистры CS, DS, ES и SS (я забыл один:-)?) Имеют в основном историческое значение, относящееся к эпохе 8086 года. Любое приличное руководство по сборке x86 поможет вам в этом.

org псевдо-код операции сообщает ассемблеру, чтобы он изменил свой счетчик местоположений на заданное значение. Это влияет на то, где находится код и на какие базовые относительные адреса рассчитываются. Разные ассемблеры обрабатывают эту команду по-разному (NASM/MASM). Для прикладных программ придерживайтесь значений по умолчанию из примеров. Если вы заинтересованы в системном программировании, загрузите ядро ​​Linux и Grub и проанализируйте загрузочный код.

Придерживайтесь темы - вы многое узнаете о своей машине!

Другие вопросы по тегам