Монеты золотые купить инвестиционные золотые и серебряные монеты.
В данном разделе мы ознакомимся с основными принципами работы ЭВМ. Узнаем о особенностях построения и взаимодействия всех компонентах.... А так же многое многое друге. Этот раздел будет познавательным как для начинающих так и для "прошаренных" пользователей.....
Для работы с подпрограммами в составе системы команд любого процессора есть две команды (см. рисунок ниже):
Оперативная память (оперативное запоминающее устройство (ОЗУ)) - компонент компьютера, который хранит команды выполняемых программ и элементы обрабатываемых данных и тесно взаимодействуют с процессором в ходе выполнения программы.
Часть памяти, взаимодействующая с процессором, имеет организацию с произвольным доступом. Эту часть называют оперативной памятью (ОЗУ).
Структурно физически реализованное устройство ОЗУ представляет собой упорядоченный массив запоминающих ячеек одинаковой разрядности, которые далее будем называть минимальными адресуемыми единицами (МАЕ). Разрядность МАЕ в большинстве компьютеров в настоящее время равна одному байту (8 битов), хотя и сегодня есть модели, в которых адресуемая единица памяти имеет другую длину.
Если команды и данные хранятся в одном и том же ОЗУ, такую архитектуру называют пристонской.
Если команды и данные хранятся в разной памяти, такую архитектуру называют гарвардской.
Рисунок. Схема побайтной организации памяти
Ячейки физической памяти пронумерованы подряд. Номер ячейки физической памяти называют её физическим адресом. Длина команды или элементы данных (операнда) нередко превышает длину МАЕ. Таким образом, каждый элемент программы (команда) или данных (операнд) хранится в ОЗУ, начиная с определённого адреса, и занимает там одну и ли несколько МАЕ. Когда говорят об адресе команды или об адресе элемента данных, имеют в виду адрес младшей МАЕ.
Большинство процессоров способно оперировать с двоичными словами (операндами) разной длины. Чаще всего длина операндов измеряется в байтах и кратна степени числа 2.
Во многих процессорах разные команды имеют различную длину. В процессорах x86 длина команды может составлять от 1 до 15 байтов. Команда x86 может начинаться с произвольного адреса.
Бывают процессоры, в которых МАЕ имеют разную длину для команд и для данных. При этом для хранения команд и для хранения данных используются разные устройства ОЗУ. В таком случае говорят, о двух разных адресных пространствах — команд и данных.
Адреса элементов оперативной памяти, подобно командам и данным, во внутреннем представлении в компьютере также представляют собой двоичные слова.
Для обращения к подпрограмме используется специальная команда вызова подпрограммы. В системе команд х86 она имеет мнемонику call.
Минимальный набор действий, которые выполняет такая команда, это:
Для возврата из ПП в системе команд есть специальная команда (в 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) Специальные команды:
2) Несколько экземпляров наборов регистров:
Кроме упомянутых команд и их групп, в отдельных моделях, как универсальных, так и специализированных процессоров могут быть реализованы специальные команды, предназначенные для выполнения более сложных действий, часто используемых в применениях, для которых разрабатывалась конкретная модель. Приведем несколько примеров:
Центральный процессор компьютера (Central Processor Unit, CPU) осуществляет основные действия по выполнению команд. В нём можно выделить несколько составляющих частей:
- Устройство управления (УУ)- управляет процессором последовательной выборки, декодирования и исполнения команд программы, хранимой в памяти. УУ формирует временную диаграмму работы всех узлов процессора. Часть регистров также можно отнести к УУ.
- Устройство формирования адресов операндов — вычисляет адрес, по которому произойдёт очередное обращение к участку памяти, содержащему операнд.
- АЛУ — комбинационное логическое устройство, имеющее два (многоразрядных) входа (на которые подаются два слова сходных операндов), на выходе АЛУ формируется результат операций, которые процессор выполняет над операндами, таких, как сложение, умножение и т.п. Минимальный набор операций (машина Фон-Неймана), которые должно выполнять АЛУ, включает операции сложения, инверсии и логического "И", все остальные операции можно получить на базе этих.
- Регистры. Минимальный набор регистров, необходимый для функционирования процессора включает следующие регистры:
-- Аккумулятор — хранит результат операций, часто имеет удвоенною. длину по сравнению с разрядностью процессора (для хранения результатов операций умножения и сдвига).
-- Счётчик команд — содержит адрес следующей команды.
-- Регистр адреса — содержит адрес операнда, используется при косвенной адресации.
-- Регистр флагов (состояния и управления) — содержит код, характеризующий результаты предыдущих операций, а так же информацию о текущем состоянии центрального процессора компьютера.
Рисунок. Регистры процессора MC68HC05
- Регистровый файл — набор однотипных регистров.
Каждый процессор имеет свой набор регистров. Можно выделить две группы процессоров: с регистрами общего назначения и со специализированным набором регистров (Пример IntelX86). В первом случае все регистры регистрового файла одинаковы и их можно использовать произвольно в командах. Во втором — за каждым регистром закреплена своя функция, и использование регистров в командах оговорено в формате каждой команды. Однако, процессоры с регистровыми файлами требуют большие аппаратные затраты на организацию связи между регистрами.
Рисунок. Регистры процессоров MC68xxx и Intel X86
Модель процессора для программиста — набор регистров, форматы команд, способы адресации, организация памяти и др. Можно рассматривать регистровую модель процессора — набор регистров, их форматы и способы работы с ними.
- на пользовательском уровне (регистры общего назначения и флагов)
- на системном уровне (регистры управления процессором и организации памяти, элементы организации прерываний и прямого доступа к памяти (ПДП)).
Вычислительное ядро (Core) — этим термином обозначают совокупность элементов процессора, необходимых для выполнения команды.
Переферийные устройства — устройства, внешние по отношению к связке "процессор-память".
Устройства ввода-вывода — часть переферийных устройств, предназначенная для связи ЭВМ с "внешним миром".
.
•Процессор — аппаратный уровень. Операционные устройства.
•Устройство управления. Микропрограммный автомат.
•Конвейер команд.
•Архитектуры системы команд.
•Система команд процессора.
•Способы адресации.
•Управление вычислительным процессом.
•Кодирование команд в процессоре х86.