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 и проанализируйте загрузочный код.
Придерживайтесь темы - вы многое узнаете о своей машине!