На современном компьютерном рынке наблюдается большое разнообразие
различных типов компьютеров. Поэтому возможно предположить возникновение
у потребителя вопроса — как оценить возможности конкретного типа (или модели)
компьютера и его отличительные особенности от компьютеров
других типов (моделей). Рассмотрения для этого одной лишь только структурной схемы компьютера
недостаточно, так как она принципиально
мало чем различается у разных машин: у всех компьютеров есть
оперативная память, процессор, внешние устройства.
Различными
являются способы, средства и используемые ресурсы, с помощью
которых компьютер функционирует как единый механизм. Чтобы
собрать воедино все понятия, характеризующие компьютер с точки
зрения его функциональных программно-управляемых свойств,
существует специальный термин — архитектура ЭВМ.
Впервые понятие архитектура ЭВМ стало упоминаться с появлением машин 3-го поколения
для их сравнительной оценки.
К изучению языка ассемблера любого компьютера имеет смысл приступать
только после выяснения того, какая часть компьютера оставлена
видимой и доступной для программирования на этом языке. Это
так называемая программная модель компьютера,
частью которой является программная модель микропроцессора, которая
содержит 32 регистра в
той или иной мере доступных для использования программистом.
Данные регистры можно разделить на две большие группы:
восемь 32-битных регистров, которые могут использоваться
программистами для хранения данных и адресов (их еще называют
регистрами общего назначения (РОН)):
Все регистры этой группы позволяют обращаться к своим
“младшим” частям (см. рис. 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) — регистр указателя базы
кадра стека.
Предназначен для организации произвольного
доступа к данным внутри стека.
Не спешите пугаться столь жесткого функционального
назначения регистров АЛУ. На самом деле, большинство из них
могут использоваться при программировании для хранения
операндов практически в любых сочетаниях. Но, как мы отметили выше, некоторые команды
используют фиксированные регистры для выполнения своих
действий. Это нужно обязательно учитывать.
Использование жесткого закрепления регистров для
некоторых команд позволяет более компактно кодировать их
машинное представление. Знание этих особенностей позволит вам
при необходимости хотя бы на несколько байт сэкономить
память, занимаемую кодом программы.
В микропроцессор включены несколько регистров (см. рис. 1),
которые постоянно содержат информацию о состоянии как
самого микропроцессора, так и программы, команды которой в
данный момент загружены на конвейер.
К этим регистрам относятся:
Используя эти регистры, можно получать информацию о
результатах выполнения команд и влиять на состояние самого
микропроцессора. Рассмотрим подробнее назначение и содержимое
этих регистров:
eflags/flags (flag register) — регистр флагов. Разрядность
eflags/flags — 32/16 бит. Отдельные биты данного регистра
имеют определенное функциональное назначение и называются
флагами. Младшая часть этого регистра полностью аналогична
регистру flags для i8086. На рис. 2 показано содержимое
регистра eflags.
1 флаг управления. Обозначается df (Directory Flag).
Он находится в 10-м бите регистра eflags и используется
цепочечными командами. Значение флага df определяет
направление поэлементной обработки в этих операциях: от начала
строки к концу (df = 0) либо наоборот, от конца строки к ее
началу (df = 1).
Для работы с флагом df существуют специальные
команды: cld (снять флаг df) и std (установить флаг df).
Применение этих команд позволяет привести флаг df в
соответствие с алгоритмом и обеспечить автоматическое
увеличение или уменьшение счетчиков при выполнении операций со
строками;
5 системных флагов, управляющих вводом/выводом,
маскируемыми прерываниями, отладкой, переключением между
задачами и виртуальным режимом 8086.
Прикладным программам не
рекомендуется модифицировать без необходимости эти флаги, так
как в большинстве случаев это приведет к прерыванию работы
программы. В табл. 2 перечислены системные флаги, их
назначение.