Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Программнаямодельмикропроцессора.Регистрыпроцессора






Итак, на ассемблере пишут:

• все, чтотребуетмаксимальнойскоростивыполнения: основные компоненты компьютерных игр, ядра операционных систем реального времени и просто критические участки программ;

• все, чтовзаимодействуетсвнешнимиустройствами: драйверы, программы, работающие напрямую с портами, звуковыми и видеоплатами;

• все, чтоиспользуетполностьювозможностипроцессора: ядра многозадачных операционных систем, DPMI-серверы и вообще любые программы, переводящие процессор в защищенный режим;

• все, чтополностьюиспользуетвозможностиоперационнойсистемы: вирусы и антивирусы, защиты от несанкционированного доступа, программы, обходящие эти защиты, и программы, защищающиеся от этих программ;

• имногоедругое.

Программная модель компьютера- часть компьютера оставлена видимой и доступной для программирования на этом языке, частью ПМ которой является программнаямодельмикропроцессора, которая содержит 32 регистра в той или иной мере доступных для использования программистом.

Регистры можно разделить на две большие группы: 16 пользовательских регистров; 16 системных регистров.

В программах на языке ассемблера регистры используются очень интенсивно. Большинство регистров имеют определенное функциональное назначение.

Пользовательскиерегистры

Как следует из названия, пользовательскими регистры называются потому, что программист может использовать их при написании своих программ. К этим регистрам относятся (рис. 1):

• восемь 32-битных регистров, которые могут использоваться программистами для хранения данных и адресов (их еще называют регистрами общего назначения (РОН)):

o eax/ax/ah/al; o ebx/bx/bh/bl; o edx/dx/dh/dl; o ecx/cx/ch/cl; o ebp/bp; o esi/si; o edi/di; o esp/sp.

шесть регистров сегментов: cs, ds, ss, es, fs, gs; • регистры состояния и управления:

o регистр флагов eflags/flags; o регистр указателя команды eip/ip.

 
 

 

       
       
     
 
         
 

Рис. 1. Пользовательскиерегистрымикропроцессоров i486 и Pentium

Почему многие из этих регистров приведены с наклонной разделительной чертой? Нет, это не разные регистры — это части одного большого 32-разрядного регистра. Их можно использовать в программе как отдельные объекты. Так сделано для обеспечения работоспособности программ, написанных для младших 16-разрядных моделей микропроцессоров фирмы Intel, начиная с i8086. Микропроцессоры i486 и Pentium имеют в основном 32-разрядные регистры. Их количество, за исключением сегментных регистров, такое же, как и у i8086, но размерность больше, что и отражено в их обозначениях — они имеют приставку e (E xtended).

Разберемся подробнее с составом и назначением пользовательских регистров.

Регистрыобщегоназначения

Все регистры этой группы позволяют обращаться к своим “младшим” частям (см. рис. 1). Рассматривая этот рисунок, заметьте, что использовать для самостоятельной адресации можно только младшие 16 и 8-битные части этих регистров. Старшие 16 бит этих регистров как самостоятельные объекты недоступны. Это сделано, как мы отметили выше, для совместимости с младшими 16-разрядными моделями микропроцессоров фирмы Intel.

Перечислим регистры, относящиеся к группе регистров общего назначения. Так как эти регистры физически находятся в микропроцессоре внутри арифметико-логического устройства (АЛУ), то их еще называют регистрамиАЛУ:

eax/ax/ah/al (Accumulator register) — аккумулятор. Применяется для хранения промежуточных данных. В некоторых командах использование этого регистра обязательно;

ebx/bx/bh/bl (Base register) — базовый регистр. Применяется для хранения базового адреса некоторого объекта в памяти;

ecx/cx/ch/cl (Count register) — регистр - счетчик. Применяется в командах, производящих некоторые повторяющиеся действия. Его использование зачастую неявно и скрыто в алгоритме работы соответствующей команды.

К примеру, команда организации цикла loop кроме передачи управления команде, находящейся по некоторому адресу, анализирует и уменьшает на единицу значение регистра ecx/cx;

edx/dx/dh/dl (Data register) — регистр данных. Так же, как и регистр eax/ax/ah/al, он хранит промежуточные данные. В некоторых командах его использование обязательно; для некоторых команд это происходит неявно.

Следующие два регистра используются для поддержки так называемых цепочечных операций, то есть операций, производящих последовательную обработку цепочек элементов, каждый из которых может иметь длину 32, 16 или 8 бит:

esi/si (Source Index register) — индексисточника. Этот регистр в цепочечных операциях содержит текущий адрес элемента в цепочке-источнике;

edi/di (Destination Index register) — индексприемника (получателя). Этот регистр в цепочечных операциях содержит текущий адрес в цепочке-приемнике.

В архитектуре микропроцессора на программно-аппаратном уровне поддерживается такая структура данных, как стек. Для работы со стеком в системе команд микропроцессора есть специальные команды, а в программной модели микропроцессора для этого существуют специальные регистры:

esp/sp (Stack Pointer register) — регистр указателястека.

Содержит указатель вершины стека в текущем сегменте стека.

ebp/bp (Base Pointer register) — регистр указателябазыкадрастека.

Предназначен для организации произвольного доступа к данным внутри стека.

Не спешите пугаться столь жесткого функционального назначения регистров АЛУ. На самом деле, большинство из них могут использоваться при программировании для хранения операндов практически в любых сочетаниях. Но, как мы отметили выше, некоторые команды используют фиксированные регистры для выполнения своих действий. Это нужно обязательно учитывать. Использование жесткого закрепления регистров для некоторых команд позволяет более компактно кодировать их машинное представление. Знание этих особенностей позволит вам при необходимости хотя бы на несколько байт сэкономить память, занимаемую кодом программы.

Сегментныерегистры

В программной модели микропроцессора имеется шесть сегментных регистров: cs, ss, ds, es, gs, fs.

Их существование обусловлено спецификой организации и использования оперативной памяти микропроцессорами Intel. Она заключается в том, что микропроцессор аппаратно поддерживает структурную организацию программы в виде трех частей, называемых сегментами. Соответственно, такая организация памяти называется сегментной.

Для того чтобы указать на сегменты, к которым программа имеет доступ в конкретный момент времени, и предназначены сегментныерегистры. Фактически, с небольшой поправкой, как мы увидим далее, в этих регистрах содержатся адреса памяти с которых начинаются соответствующие сегменты. Логика обработки машинной команды построена так, что при выборке команды, доступе к данным программы или к стеку неявно используются адреса во вполне определенных сегментных регистрах. Микропроцессор поддерживает следующие типы сегментов:

1. Сегменткода. Содержит команды программы. Для доступа к этому сегменту служит регистр cs (code segment register) — сегментныйрегистркода. Он содержит адрес сегмента с машинными командами, к которому имеет доступ микропроцессор (то есть эти команды загружаются в конвейер микропроцессора).

2. Сегментданных. Содержит обрабатываемые программой данные. Для доступа к этому сегменту служит регистр ds (data segment register) — сегментныйрегистрданных, который хранит адрес сегмента данных текущей программы.

3. Сегментстека. Этот сегмент представляет собой область памяти, называемую стеком. Работу со стеком микропроцессор организует по следующему принципу: последнийзаписанныйвэтуобластьэлементвыбираетсяпервым. Для доступа к этому сегменту служит регистр ss (stack segment register) — сегментныйрегистрстека, содержащий адрес сегмента стека.

4. Дополнительныйсегментданных. Неявно алгоритмы выполнения большинства машинных команд предполагают, что обрабатываемые ими данные расположены в сегменте данных, адрес которого находится в сегментном регистре ds. Если программе недостаточно одного сегмента данных, то она имеет возможность использовать еще три дополнительных сегмента данных. Но в отличие от основного сегмента данных, адрес которого содержится в сегментном регистре ds, при использовании дополнительных сегментов данных их адреса требуется указывать явно с помощью специальных префиксовпереопределениясегментов в команде. Адреса дополнительных сегментов данных должны содержаться в регистрах es, gs, fs (extension data segment registers).

Регистрысостоянияиуправления

В микропроцессор включены несколько регистров (см. рис. 1), которые постоянно содержат информацию о состоянии как самого микропроцессора, так и программы, команды которой в данный момент загружены на конвейер. К этим регистрам относятся:

• регистр флагов eflags/flags; • регистр указателя команды eip/ip.

Используя эти регистры, можно получать информацию о результатах выполнения команд и влиять на состояние самого микропроцессора. Рассмотрим подробнее назначение и содержимое этих регистров:

eflags/flags (flag register) — регистр флагов. Разрядность eflags/flags — 32/16 бит. Отдельные биты данного регистра имеют определенное функциональное назначение и называются флагами. Младшая часть этого регистра полностью аналогична регистру flags для i8086. На рис. 2 показано содержимое регистра eflags.

Рис. 2. Содержимоерегистра eflags

Исходя из особенностей использования, флаги регистра eflags/flags можно разделить на три группы:

8 флаговсостояния. Эти флаги могут изменяться после выполнения машинных команд. Флагисостояниярегистра eflags отражают особенности результата исполнения арифметических или логических операций. Это дает возможность анализировать состояние вычислительного процесса и реагировать на него с помощью команд условных переходов и вызовов подпрограмм. В табл. 1 приведены флаги состояния и указано их назначение;

1 флагуправления. Обозначается df (Directory Flag). Он находится в 10-м бите регистра eflags и используется цепочечными командами. Значение флага df определяет направление поэлементной обработки в этих операциях: от начала строки к концу (df = 0) либо наоборот, от конца строки к ее началу (df = 1). Для работы с флагом df существуют специальные команды: cld (снять флаг df) и std (установить флаг df). Применение этих команд позволяет привести флаг df в соответствие с алгоритмом и обеспечить автоматическое увеличение или уменьшение счетчиков при выполнении операций со строками;

5 системныхфлагов, управляющих вводом/выводом, маскируемыми прерываниями, отладкой, переключением между задачами и виртуальным режимом 8086. Прикладным программам не рекомендуется модифицировать без необходимости эти флаги, так как в большинстве случаев это приведет к прерыванию работы программы. В табл. 2 перечислены системные флаги, их назначение.

Таблица 1. Флагисостояния

Мнемоника Номер бита Флаг Содержание и назначение флага в eflags
cf Флаг переноса (Carry Flag)   1 — арифметическая операция произвела перенос из старшего бита результата. Старшим является 7, 15 или 31-й бит в
  зависимости от размерности операнда; 0 — переноса не было
Флаг паритета pf (Parity Flag) 1 — 8 младших разрядов (этот флаг — только для 8 младших разрядов операнда любого размера) результата содержат четное 2 число единиц; 0 — 8 младших разрядов результата содержат нечетное число единиц
af Вспомогательный флаг переноса (Auxiliary carry Flag)   Только для команд работающих с BCDчислами. Фиксирует факт заема из младшей тетрады результата: 1 — в результате операции сложения был произведен перенос из разряда 3 в старший разряд или при вычитании был заем в разряд 3 младшей тетрады из значения в старшей тетраде; 0 — переносов и заемов в(из) 3 разряд(а) младшей тетрады результата не было
Флаг нуля (Zero zf Flag) 1 — результат нулевой; 6 0 — результат ненулевой
Флаг знака sf (Sign Flag) Отражает состояние старшего бита результата (биты 7, 15 или 31 для 8, 16 или 7 32-разрядных операндов соответственно): 1 — старший бит результата равен 1; 0 — старший бит результата равен 0
of Флаг переполнения (Overflow Flag)   Флаг of используется для фиксирования факта потери значащего бита при арифметических операциях: 1 — в результате операции происходит перенос (заем) в(из) старшего, знакового бита результата (биты 7, 15 или 31 для 8, 16 или 32-разрядных операндов соответственно); 0 — в результате операции не происходит переноса (заема) в(из) старшего, знакового бита результата
Уровень Привилегий iopl ввода-вывода (Input/Output Privilege Level) Используется в защищенном режиме работы микропроцессора для контроля доступа к 12, 13 командам ввода-вывода в зависимости от привилегированности задачи
флажок вложенности nt задачи (Nested Task) Используется в защищенном режиме работы 14 микропроцессора для фиксации того факта, что одна задача вложена в другую

Таблица 2. Системныефлаги

Номер Мнемоника Флаг бита в Содержание и назначение флага eflags
tf Флаг трассировки   Предназначен для организации пошаговой работы микропроцессора.
(Trace Flag) 1 — микропроцессор генерирует прерывание с номером 1 после выполнения каждой машинной команды. Может использоваться при отладке программ, в частности отладчиками; 0 — обычная работа
Предназначен для разрешения или запрещения Флаг (маскирования) аппаратных прерываний прерывания if 9 (прерываний по входу INTR). (Interrupt enable 1 — аппаратные прерывания разрешены; Flag) 0 — аппаратные прерывания запрещены
Флаг Используется при обработке прерываний от rf возобновления 16 регистров отладки. (Resume Flag)
Признак работы микропроцессора в режиме Флаг виртуального 8086. виртуального 1 — процессор работает в режиме виртуального vm 17 (Virtual 8086 8086; Mode) 0 — процессор работает в реальном или защищенном режиме
Предназначен для разрешения контроля выравнивания при обращениях к памяти. Используется совместно с битом am в системном Флаг контроля регистре cr0. К примеру, Pentium разрешает выравнивания размещать команды и данные с любого адреса. ac 18 (Alignment Если требуется контролировать выравнивание Check) данных и команд по адресам кратным 2 или 4, то установка данных битов приведет к тому, что все обращения по некратным адресам будут возбуждать исключительную ситуацию

eip/ip (Instraction Pointer register) — регистр - указателькоманд. Регистр eip/ip имеет разрядность 32/16 бит и содержит смещение следующей подлежащей выполнению команды относительно содержимого сегментного регистра cs в текущем сегменте команд. Этот регистр непосредственно недоступен программисту, но загрузка и изменение его значения производятся различными командами управления, к которым относятся команды условных и безусловных переходов, вызова процедур и возврата из процедур. Возникновение прерываний также приводит к модификации регистра eip/ip.






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.