PersCom — Компьютерная Энциклопедия Компьютерная Энциклопедия

Популярное в guess.

Базовая организация ЭВМ

Архитектура ЭВМ

В данном разделе мы ознакомимся с основными принципами работы ЭВМ. Узнаем о особенностях построения и взаимодействия всех компонентах.... А так же многое многое друге. Этот раздел будет познавательным как для начинающих так и для "прошаренных" пользователей.....

Обращение к подпрограммам — передача управления

Для работы с подпрограммами в составе системы команд любого процессора есть две команды (см. рисунок ниже):

  1. Команда обращения к подпрограмме ОП (для этой команды используются мнемоники call, jsr). Эта команда должна автоматически запоминать адрес возврата, т.е. адрес команды, следующей за командой call. В современных процессорах при выполнении команды обращения к ПП адрес возврата запоминается автоматически в стеке.
  2. Команда возврата из ПП (используются мнемоники ret, rts).

Связь с подпрограммой по управлению

Оперативная память (общая характеристика)

Оперативная память (оперативное запоминающее устройство (ОЗУ)) -  компонент компьютера, который хранит команды выполняемых программ и элементы обрабатываемых данных и тесно взаимодействуют с процессором в ходе выполнения программы.

Часть памяти, взаимодействующая с процессором, имеет организацию с произвольным доступом. Эту часть называют оперативной памятью (ОЗУ).

Структурно физически реализованное устройство ОЗУ представляет собой упорядоченный массив запоминающих ячеек одинаковой разрядности, которые далее будем называть минимальными адресуемыми единицами (МАЕ). Разрядность МАЕ в большинстве компьютеров в настоящее время равна одному байту (8 битов), хотя и сегодня есть модели, в которых адресуемая единица памяти имеет другую длину.

Если команды и данные хранятся в одном и том же ОЗУ, такую архитектуру называют пристонской.

Если команды и данные хранятся в разной памяти, такую архитектуру называют гарвардской.

Рисунок. Схема побайтной организации памяти

Ячейки физической памяти пронумерованы подряд. Номер ячейки физической памяти называют её физическим адресом. Длина команды или элементы данных (операнда) нередко превышает длину МАЕ. Таким образом, каждый элемент программы (команда) или данных (операнд) хранится в ОЗУ, начиная с определённого адреса, и занимает там одну и ли несколько МАЕ. Когда говорят об адресе команды или об адресе элемента данных, имеют в виду адрес младшей МАЕ.

Большинство процессоров способно оперировать с двоичными словами (операндами) разной длины. Чаще всего длина операндов измеряется в байтах и кратна степени числа 2.

Во многих процессорах разные команды имеют различную длину. В процессорах x86 длина команды может составлять от 1 до 15 байтов. Команда x86 может начинаться с произвольного адреса.

Бывают процессоры, в которых МАЕ имеют разную длину для команд и для данных. При этом для хранения команд и для хранения данных используются разные устройства ОЗУ. В таком случае говорят, о двух разных адресных пространствах — команд и данных.

Адреса элементов оперативной памяти, подобно командам и данным, во внутреннем представлении в компьютере также представляют собой двоичные слова.

Обращение к подпрограммам — сохранение/восстановление контекста

Для обращения к подпрограмме используется специальная команда вызова подпрограммы. В системе команд х86 она имеет мнемонику call.

Минимальный набор действий, которые выполняет такая команда, это:

  1. сохранение адреса возврата, т.е. адреса команды, следующей за call;
  2. загрузка в счетчик команд адреса первой исполняемой команды ПП.

Для возврата из ПП в системе команд есть специальная команда (в i*86 ее мнемоника ret). Эта команда загружает ранее сохраненный адрес возврата в счетчик команд.

В х86 имеются две разновидности команды call: ближний near вызов (внутри текущего сегмента кода) и дальний far вызов (в другой сегмент кода). В случае использования дальнего вызова в стеке сохраняется, наряду со счетчиком команд (e)ip, и сегментный регистр cs.

Соответственно имеются и две команды возврата ret near и ret far. Состояние стека при ближнем и дальнем вызовах иллюстрируется следующим рисунком (см. рисунок ниже).

Состояние стека при ближнем и дальнем вызовах

Понятие контекста (вектора состояния): в каждой конкретной точке выполнения программы — содержимое всех переменных элементов (регистров, ячеек памяти), которое требуется установить/восстановить, чтобы стало возможным запустить выполнение программы с этой точки.

Подпрограмма при своей работе использует какие-либо ресурсы процессора (регистры), а, кроме того, меняет состояние отдельных ячеек памяти, флагов и т.п. — т.е. ПП изменяет контекст. Естественный способ исключить влияние изменения контекста — непосредственно перед вызовом ПП или сразу после входа в ПП сохранять текущий контекст, а при выходе из ПП все восстанавливать назад. Было бы удобно, если бы программисту не надо было задумываться о сохранении-восстановлении контекста. Проблема сохранения-восстановления контекста возникает и в других ситуациях (прерывания, переключение задач — это будет позже). Чаще всего для автоматического сохранении-восстановлении контекста используется стек.

Рассмотрим типовую последовательность команд, используемую при вызове подпрограммы. Пусть подпрограмма использует два входных параметра (два аргумента) типа int, возвращает значение тоже типа int и использует две локальные переменные. Две команды mov в вызывающей части помещают в стек параметры, после чего выполняется команда вызова подпрограммы call.

Первые две команды подпрограммы сохраняют старое значение ebp (элемент контекста) и устанавливают ebp на адрес внутри стекового кадра. Следующая команда (sub esp,8) занимает в стеке место под две локальные переменные.

Теперь подпрограмма может, используя адресацию косвенно-регистровую со смещением через регистр ebp, иметь доступ к параметрам, используя положительные значения смещения (в примере для доступа к первому параметру смещение должно быть равно 12), и к локальным переменным, используя отрицательные смещения (в примере смещение -8 позволяет обращаться к локальной переменной 2).

Результат, вычисляемый подпрограммой, можно передавать в вызывающую часть разными способами, но чаще всего это делают, помещая результата в регистр перед возвратом из подпрограммы, как сделано в примере. Для освобождения места, занятого локальными переменными, следует вернуть указателю стека то значение, которое он имел в начале подпрограммы (оно хранится в ebp). После этого выполняется команда возвврата ret, использующая сохраненный в стеке адрес возврата в вызывающую часть программы.

После возврата следует освободить место в стеке, занятое параметрами. В нашем примере это делает команда add esp, 8 , однако в архитектуре х86 это может быть сделано с помощью разновидности команды возварата из подпрограммы ret n, она не только осуществляет возварт, но и извлекает из стека (в "никуда") число байтов, указываемое параметром n.

Для облегчения сохранения-восстановления контекста в разных реализациях процессоров могут быть использованы:

1) Специальные команды:

  • В iх86+ команды pusha, popa сохраняют в стеке — восстанавливают регистры данных и адресные в таком порядке: (e)ax, (e)cx, (e)dx, (e)bx, (e)sp, (e)bp, (e)si, (e)di. При этом значение (e)sp берется то, которое было до начала выполнения команды pusha.
  • В Motorola 60ххх есть команды movem (MOVE Multiple), сохраняющие/восстанавливающие регистры в/из памяти. Особенность — можно указать (битовой маской), какие регистры сохранять. Место сохранения указывается с использованием стандартных способов адресации.

2) Несколько экземпляров наборов регистров:

  • TMS9900 — регистров данных и адресов не было вообще. В качестве регистров использовалось несколько ячеек памяти, положение которых в адресном пространстве указывал специальный регистр — указатель рабочей области (аналогично в Transputer фирмы Inmos).
  • Transputer (семейство процессоров фирмы Inmos) — регистров данных/адресов всего 3, и они образуют стек. Переход (и к подпрограмме) производится только, когда стек пуст, поэтому сохранять надо только адрес возврата.
  • IA-64 (Itanium) динамическое переименование регистров в регистровом файле при вызове процедуры (см. Intel IA-64 Architecture Software Developer's Manual, vol.2, IA-64 System Architecture, раздел 6 — IA-64 Register Stack Engine).

Расширения системы команд по мере развития микропроцессорной техники

Кроме упомянутых команд и их групп, в отдельных моделях, как универсальных, так и специализированных процессоров могут быть реализованы специальные команды, предназначенные для выполнения более сложных действий, часто используемых в применениях, для которых разрабатывалась конкретная модель. Приведем несколько примеров:

  1. В специализированных графических процессорах используются специальные команды, облегчающие выполнение операций линейной интерполяции, которые очень часто используются при преобразованиях графических данных.
  2. В специализированных графических процессорах могут быть команды, выполняющие достаточно сложные операции с группами простых элементов данных, например, с двумерными блоками в памяти (это фрагменты изображений). Более подробно этот вопрос затронем, обсуждая графические данные.
  3. В процессорах Pentium MMX реализована группа новых команд. Каждая из команд MMX способна выполнять одно и то же действие одновременно над несколькими "короткими" операндами, расположенными в "длинных" MMX-регистрах. Здесь реализована идеология SIMD (“Single Instruction — Multiple Data” — "одна команда -несколько элементов данных”), позволяющая получать несколько результатов при выполнении каждой MMX-команды. Это частный случай более обширной группы команд, упомянутой в предыдущем пункте.
  4. В разновидности процессоров, известной под названием "цифровые сигнальные процессоры" (DSP — Digital Signal Processors) часто реализованы команды, облегчающие вычисление "цифровой свертки" Y=Sum(Xi*Ki). Операция цифровой свертки очень часто используется в алгоритмах обработки сигналов. Сигнальные процессоры нередко имеют также своеобразную архитектуру, программную модель, хорошо приспособленную для действий с отсчетами сигналов.
  5. В однокристальных микроконтроллерах M68HC12 фирмы Motorola реализованы специальные команды, облегчающие программирование алгоритмов "нечеткой логики" (Fuzzy Logic).

Процессор. Основные компоненты и их назначение

Центральный процессор компьютера (Central Processor Unit, CPU) осуществляет основные действия по выполнению команд. В нём можно выделить несколько составляющих частей:

Элементы, составляющие процессор:

  1. декодер команд;
  2. арифметико-логическое устройство (АЛУ), выполняющее действия над операндами;
  3. регистры для хранения данных, адресов и служебной информации;
  4. устройство для формирования (вычисления) адресов операндов;
  5. устройство управления.

- Устройство управления (УУ)- управляет процессором последовательной выборки, декодирования и исполнения команд программы, хранимой в памяти. УУ формирует временную диаграмму работы всех узлов процессора. Часть регистров также можно отнести к УУ.

- Устройство формирования адресов операндов — вычисляет адрес, по которому произойдёт очередное обращение к участку памяти, содержащему операнд.

- АЛУ — комбинационное логическое устройство, имеющее два (многоразрядных) входа (на которые подаются два слова сходных операндов), на выходе АЛУ формируется результат операций, которые процессор выполняет над операндами, таких, как сложение, умножение и т.п. Минимальный набор операций (машина Фон-Неймана), которые должно выполнять АЛУ, включает операции сложения, инверсии и логического "И", все остальные операции можно получить на базе этих.

- Регистры. Минимальный набор регистров, необходимый для функционирования процессора включает следующие регистры:

-- Аккумулятор — хранит результат операций, часто имеет удвоенною. длину по сравнению с разрядностью процессора (для хранения результатов операций умножения и сдвига).

-- Счётчик команд — содержит адрес следующей команды.

-- Регистр адреса — содержит адрес операнда, используется при косвенной адресации.

-- Регистр флагов (состояния и управления) — содержит код, характеризующий результаты предыдущих операций, а так же информацию о текущем состоянии центрального процессора компьютера.

Рисунок. Регистры процессора MC68HC05

центральный процессор компьютера

- Регистровый файл — набор однотипных регистров.

Каждый процессор имеет свой набор регистров. Можно выделить две группы процессоров: с регистрами общего назначения и со специализированным набором регистров (Пример IntelX86). В первом случае все регистры регистрового файла одинаковы и их можно использовать произвольно в командах. Во втором — за каждым регистром закреплена своя функция, и использование регистров в командах оговорено в формате каждой команды. Однако, процессоры с регистровыми файлами требуют большие аппаратные затраты на организацию связи между регистрами.

Рисунок. Регистры процессоров MC68xxx и Intel X86

центральный процессор компьютера

центральный процессор компьютера

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

- на пользовательском уровне (регистры общего назначения и флагов)

- на системном уровне (регистры управления процессором и организации памяти, элементы организации прерываний и прямого доступа к памяти (ПДП)).

Вычислительное ядро (Core) — этим термином обозначают совокупность элементов процессора, необходимых для выполнения команды.

Переферийные устройства — устройства, внешние по отношению к связке "процессор-память".

Устройства ввода-вывода — часть переферийных устройств, предназначенная для связи ЭВМ с "внешним миром".

Подкатегории