Обозначается df (Directory Flag). Он находится в 10-м бите регистра eflags и используется цепочечными командами. Значение флага df определяет направление поэлементной обработки в этих операциях: от начала строки к концу (df = 0) либо наоборот, от конца строки к ее началу (df = 1). Для работы с флагом df существуют специальные команды: cld (снять флаг df) и std (установить флаг df).
Применение этих команд позволяет привести флаг df в соответствие с алгоритмом и обеспечить автоматическое увеличение или уменьшение счетчиков при выполнении операций со строками. 3) пять системных флагов.
Управляют вводом-выводом, маскируемыми прерываниями, отладкой, переключением между задачами и виртуальным режимом 8086. Прикладным программам не рекомендуется модифицировать без необходимости эти флаги, так как в большинстве случаев это приведет к прерыванию работы программы.
2. eip/ip (Instraction Pointer register) – регистр-указатель команд. Регистр eip/ip имеет разрядность 32/16 бит и содержит смещение следующей подлежащей выполнению команды относительно содержимого сегментного регистра cs в текущем сегменте команд. Этот регистр непосредственно недоступен программисту, но загрузка и изменение его значения производятся различными командами управления, к которым относятся команды условных и безусловных переходов, вызова процедур и возврата из процедур. Возникновение прерываний также приводит к модификации регистра eip/ip.
43. Системные регистры микропроцессора
Само название этих регистров говорит о том, что они выполняют специфические функции в системе. Использование системных регистров жестко регламентировано. Именно они обеспечивают работу защищенного режима. Их также можно рассматривать как часть архитектуры микропроцессора, которая намеренно оставлена видимой для того, чтобы квалифицированный системный программист мог выполнить самые низкоуровневые операции.
Системные регистры можно разделить на три группы:
1) четыре регистра управления;
В группу регистров управления входят 4 регистра:
– cr0;
– cr1;
– cr2;
– cr3;
2) четыре регистра системных адресов (которые также называются регистрами управления памятью);
К регистрам системных адресов относятся следующие регистры:
– регистр таблицы глобальных дескрипторов gdtr;
– регистр таблицы локальных дескрипторов Idtr;
– регистр таблицы дескрипторов прерываний idtr;
– 16-битовый регистр задачи tr;
3) восемь регистров отладки. К их числу относятся:
– dr0;
– dr1;
– dr2;
– dr3;
– dr4;
– dr6;
– dr7.
Знание системных регистров не является необходимым для написания программ на Ассемблере, в связи с тем, что они применяются, главным образом, для осуществления самых низкоуровневых операций. Однако в настоящее время тенденции в разработке программного обеспечения (особенно в свете значительно увеличившихся возможностей по оптимизации современных компиляторов высокоуровневых языков, зачастую формирующих код, превосходящий по эффективности код, созданный человеком) сужают область применения Ассемблера до решения самых низкоуровневых задач, где знание вышеозначенных регистров может оказаться весьма полезным.
44. Регистры управления
В группу регистров управления входят четыре регистра: cr0, cr1, cr2, cr3. Эти регистры предназначены для общего управления системой. Регистры управления доступны только программам с уровнем привилегий 0.
Хотя микропроцессор имеет четыре регистра управления, доступными являются только три из них – исключается cr1, функции которого пока не определены (он зарезервирован для будущего использования).
Регистр cr0 содержит системные флаги, управляющие режимами работы микропроцессора и отражающие его состояние глобально, независимо от конкретных выполняющихся задач.
Назначение системных флагов:
1) pe (Protect Enable), бит 0 – разрешение защищенного режима работы. Состояние этого флага показывает, в каком из двух режимов – реальном (pe = 0) или защищенном (pe = 1) – работает микропроцессор в данный момент времени;
2) mp (Math Present), бит 1 – наличие сопроцессора. Всегда 1;
3) ts (Task Switched), бит 3 – переключение задач. Процессор автоматически устанавливает этот бит при переключении на выполнение другой задачи;
4) am (Alignment Mask), бит 18 – маска выравнивания.
Этот бит разрешает (am = 1) или запрещает (am = 0) контроль выравнивания;
5) cd (Cache Disable), бит 30 – запрещение кеш-па-мяти.
С помощью этого бита можно запретить (cd = 1) или разрешить (cd = 0) использование внутренней кеш-памяти (кеш-памяти первого уровня);
6) pg (PaGing), бит 31 – разрешение (pg = 1) или запрещение (pg = 0) страничного преобразования.
Флаг используется при страничной модели организации памяти.
Регистр cr2 используется при страничной организации оперативной памяти для регистрации ситуации, когда текущая команда обратилась по адресу, содержащемуся в странице памяти, отсутствующей в данный момент времени в памяти.
В такой ситуации в микропроцессоре возникает исключительная ситуация с номером 14, и линейный 32- битный адрес команды, вызвавшей это исключение, записывается в регистр cr2. Имея эту информацию, обработчик исключения 14 определяет нужную страницу, осуществляет ее подкачку в память и возобновляет нормальную работу программы;
Регистр cr3 также используется при страничной организации памяти. Это так называемый регистр каталога страниц первого уровня. Он содержит 20-битный физический базовый адрес каталога страниц текущей задачи. Этот каталог содержит 1024 32-битных дескриптора, каждый из которых содержит адрес таблицы страниц второго уровня. В свою очередь, каждая из таблиц страниц второго уровня содержит 1024 32-битных дескриптора, адресующих страничные кадры в памяти. Размер страничного кадра – 4 Кбайта.
45. Регистры системных адресов
Эти регистры еще называют регистрами управления памятью.
Они предназначены для защиты программ и данных в мультизадачном режиме работы микропроцессора. При работе в защищенном режиме микропроцессора адресное пространство делится на:
1) глобальное – общее для всех задач;
2) локальное – отдельное для каждой задачи. Этим разделением и объясняется присутствие в архитектуре микропроцессора следующих системных регистров:
1) регистра таблицы глобальных дескрипторов gdtr (Global Descriptor Table Register), имеющего размер 48 бит и содержащего 32-битовый (биты 16–47) базовый адрес глобальной дескрипторной таблицы GDT и 16-битовое (биты 0—15) значение предела, представляющее собой размер в байтах таблицы GDT;
2) регистра таблицы локальных дескрипторов ldtr (Local Descriptor Table Register), имеющего размер 16