- •Архитектура эвм и систем.
- •Стороженко а.С.
- •Валюкевич н.Е.
- •Оглавление
- •Введение Архитектура персонального компьютера
- •Набор регистров
- •Регистры состояния и управления
- •Организация памяти
- •Типы данных
- •Лабораторная работа №1 Применение inline assembler
- •Краткая теория
- •Функции ввода-вывода
- •Порядок выполнения
- •Задания
- •Контрольные вопросы
- •Лабораторная работа №2 Линейное программирование
- •Краткая теория
- •Команды пересылки данных
- •Арифметические команды
- •Сложение двоичных чисел без знака
- •Вычитание двоичных чисел без знака
- •Умножение двоичных чисел со знаком
- •Деление двоичных чисел со знаком
- •Преобразование типов
- •Порядок выполнения
- •Задания
- •Варианты
- •Контрольные вопросы
- •Лабораторная работа №3 Организация ветвлений в программе
- •Краткая теория
- •Команда сравнения cmp
- •Порядок выполнения
- •Задания
- •Контрольные вопросы
- •Лабораторная работа №4 Циклы
- •Краткая теория
- •Порядок выполнения
- •Задания
- •Варианты
- •Контрольные вопросы
- •Лабораторная работа №5 Циклы
- •Краткая теория
- •Порядок выполнения
- •Задания
- •Контрольные вопросы
- •Лабораторная работа №6 Работа с дисассемблером
- •Краткая теория
- •Порядок выполнения
- •Задания
- •Список рекомендованной литературы
- •Список дополнительной литературы
Набор регистров
Программная модель микропроцессора содержит 32 регистра, в той или иной мере доступных для использования программистом. Их можно разделить на две большие группы:
16 пользовательских регистров;
16 системных регистров.
В программах на языке ассемблера регистры используются очень интенсивно. Большинство из них имеют определенное функциональное назначение. Системные регистры предназначены в основном для поддержания защищенного режима работы процессора, поэтому обсуждать их не будем.
Рисунок 2 – Пользовательские регистры микропроцессора i486 и Pentium
Пользовательские регистры
Как следует из названия, пользовательскими регистры называются так потому, что программист может использовать их при написании своих программ. К этим регистрам относятся (Рисунок 2):
восемь 32-битных регистров, которые могут использоваться программистами для хранения данных и адресов (их еще называют регистрами общего назначения (РОН)): eax/ax/ah/al, ebx/bx/bh/Ы, edx/dx/dh/dl, ecx/cx/ch/cl, ebp/bp, esi/si, edi/di, esp/sp;
шесть регистров сегментов: cs, ds, ss, es, fs, gs;
регистры состояния и управления: регистр флагов eflags/flags и регистр указателя команды eip/ip.
Регистры, записанные через символ «/», являются частями одного большого 32-х разрядного регистра. Их можно использовать в программе как отдельные объекты. Это сделано для обеспечения работоспособности программ, написанных для младших 16-разрядных моделей микропроцессоров фирмы Intel, начиная с i8086.
Микропроцессоры i486 и Pentium имеют в основном 32-х разрядные регистры. Их количество, за исключением сегментных регистров, такое же, как и у i8086, но размерность больше, что и отражено в их обозначениях — они имеют приставку «е» (Extended).
Регистры общего назначения
Все регистры этой группы позволяют обращаться к своим «младшим» частям (см. Рисунок 2). Рассматривая этот рисунок, заметим, что использовать для самостоятельной адресации можно только младшие 16- и 8-битные части этих регистров. Старшие 16 бит этих регистров как самостоятельные объекты недоступны. Это сделано для совместимости с младшими 16-разрядными моделями микропроцессоров фирмы Intel. Перечислим регистры, относящиеся к группе регистров общего назначения. Так как эти регистры физически находятся в микропроцессоре внутри арифметико-логического устройства (АЛУ), то их еще называют регистрами АЛУ:
eax/ax/ah/al (Accumulator register) — аккумулятор. Применяется для хранения промежуточных данных. В некоторых командах использование этого регистра обязательно;
ebx/bx/bh/bl (Base register) — базовый регистр. Используется для хранения базового адреса некоторого объекта в памяти;
ecx/cx/ch/cl (Count register) — регистр-счетчик. Предназначен для использования в командах, производящих некоторые повторяющиеся действия. Его использование зачастую неявно и скрыто в алгоритме работы соответствующей команды. К примеру, команда организации цикла loop кроме передачи управления команде, находящейся по некоторому адресу, анализирует и уменьшает на единицу значение регистра есх/сх;
edx/dx/dh/dl (Data register) — регистр данных. Так же, как и регистр еах/ах/ 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 при описании каждой команды это обстоятельство особо отмечается. Использование жесткого закрепления регистров для некоторых команд позволяет более компактно кодировать их машинное представление. Знание этих особенностей позволит при необходимости хотя бы на несколько байт сэкономить память, занимаемую кодом программы.
Сегментные регистры
В программной модели микропроцессора имеется шесть сегментных регистров: cs, ss, ds, es, gs, fs. Их существование обусловлено спецификой организации и использования оперативной памяти микропроцессорами Intel. Она заключается в том, что микропроцессор аппаратно поддерживает структурную организацию программы в виде трех частей, называемых сегментами. Соответственно, такая организация памяти называется сегментной. Для того чтобы указать на сегменты, к которым программа имеет доступ в конкретный момент времени, и предназначены сегментные регистры. Фактически, с небольшой поправкой в этих регистрах содержатся адреса памяти, с которых начинаются соответствующие сегменты. Логика обработки машинной команды построена так, что при выборке команды, доступе к данным программы или к стеку неявно используются адреса во вполне определенных сегментных регистрах.
Микропроцессор поддерживает следующие типы сегментов:
Сегмент код, содержит команды программы. Для доступа к этому сегменту служит регистр cs (code segment register) — сегментный регистр кода. Он содержит адрес сегмента с машинными командами, к которому имеет доступ микропроцессор (то есть эти команды загружаются в конвейер микропроцессора);
Сегмент данных (СД), содержит обрабатываемые программой данные. Для доступа к этому сегменту служит регистр ds (data segment register) — сегментный регистр данных, который хранит адрес сегмента данных текущей программы;
Сегмент стека представляет собой область памяти, называемую стеком. Работу со стеком микропроцессор организует по следующему принципу: последний записанный в эту область элемент выбирается первым. Для доступа к этому сегменту служит регистр ss (stack segment register) — сегментный регистр стека, содержащий адрес сегмента стека;
Дополнительный сегмент данных. Неявно алгоритмы выполнения большинства машинных команд предполагают, что обрабатываемые ими данные расположены в этом сегменте, адрес которого находится в сегментном регистре ds. Если программе недостаточно одного СД, то она имеет возможность использовать еще три дополнительных СД. Но в отличие от основного СД, адрес которого содержится в сегментном регистре ds, при использовании дополнительных СД их адреса требуется указывать явно с помощью специальных префиксов переопределения сегментов в команде. Адреса дополнительных СД должны содержаться в регистрах es, gs, fs (extension data segment registers).
