Командный цикл процессора
Командой называется элементарное действие, которое может выполнить процессор без дальнейшей детализации. Последовательность команд, выполнение которых приводит к достижению определенной цели, называется программой. Команды программы кодируются двоичными словами и размещаются в памяти ЭВМ. Вся работа ЭВМ состоит в последовательном выполнении команд программы. Действия по выбору из памяти и выполнению одной команды называются командным циклом.
В составе любого процессора имеется специальная ячейка, которая хранит адрес выполняемой команды — счетчик команд или программный счетчик. После выполнения очередной команды его значение увеличивается на единицу (если код одной команды занимает несколько ячеек памяти, то содержимое счетчика команд увеличивается на длину команды). Таким образом осуществляется выполнение последовательности команд. Существуют специальные команды (передачи управления), которые в процессе своего выполнения модифицируют содержимое программного счетчика, обеспечивая переходы по программе. Сама выполняемая команда помещается в регистр команд — специальную ячейку процессора.
Во время выполнения командного цикла процессор реализует следующую последовательность действий:
1. Извлечение из памяти содержимого ячейки, адрес которой хранится в программном счетчике, и размещение этого кода в регистре команд (чтение команды).
2. Увеличение содержимого программного счетчика на единицу.
3. Формирование адреса операндов.
4. Извлечение операндов из памяти.
5. Выполнение заданной в команде операции.
6. Размещение результата операции в памяти.
7. Переход к п. 1.
Пункты 1, 2 и 7 обязательно выполняются в каждом командном цикле, остальные могут не выполняться в некоторых командах. Если длина кода команды составляет несколько машинных слов, то пп. 1 и 2 повторяются.
Фактически вся работа процессора заключается в циклическом выполнении пунктов 1-—7 командного цикла. При запуске машины в счетчик команд аппаратно помещается фиксированное значение — начальный адрес программы (часто 0 или последний адрес памяти; встречаются и более экзотические способы загрузки начального адреса). В дальнейшем содержимое программного счетчика модифицируется в командном цикле. Прекращение выполнения командных циклов может произойти только при выполнении специальной команды "СТОП".
Система команд процессора
Разнообразие типов данных, форм их представления и действий, которые необходимы для обработки информации и управления ходом вычислений, порождает необходимость использования различных команд — набора команд. Каждый процессор имеет собственный вполне определенный набор команд, называемый системой команд процессора. Система команд должна обладать двумя свойствами — функциональной полнотой и эффективностью.
Функциональная полнота — это достаточность системы команд для описания любого алгоритма. Требование функциональной полноты не является слишком жестким. Доказано, что свойством функциональной полноты обладает система, включающая всего три команды (система Поста):
- присвоение 0,
- присвоение 1,
- проверка на 0.
Однако составление программ в такой системе команд крайне неэффективно.
Эффективность системы команд — степень соответствия системы команд назначению ЭВМ, т. е. классу алгоритмов, для выполнения которых предназначается ЭВМ, а также требованиям к производительности ЭВМ. Очевидно, что реализация развитой системы команд связана с большими затратами оборудования и, следовательно, с высокой стоимостью процессора. В то же время ограниченный набор команд приводит к снижению производительности и повышенным требованиям к памяти для размещения программы. Даже простые и дешевые современные микропроцессоры поддерживают систему команд, содержащую несколько десятков (а с модификациями— сотен) команд.
Система команд процессора характеризуется тремя аспектами: форматами, способами адресации и системой операций.
Форматы команд
Под форматом команды следует понимать длину команды, количество, размер, положение, назначение и способ кодировки ее полей.
Команды, как и любая информация в ЭВМ, кодируются двоичными словами, которые должны содержать в себе следующие виды информации:
П тип операции, которую следует реализовать в данной команде (КОП); П место в памяти, откуда следует взять первый операнд (А1); П место в памяти, откуда следует взять второй операнд (А2); О место в памяти, куда следует поместить результат (A3).
Каждому из этих видов информации соответствует своя часть двоичного слова — поле, а совокупность полей (их длины, расположение в командном слове, способ кодирования информации) называется форматом команды. В свою очередь, некоторые поля команды могут делиться на подполя. Формат команды, поля которого перечислены выше, называется трехадресным (рис. 2, а).
Рис. 2. Форматы команд: а — трехадресный; 6 — двухадресный; в — одноадресный; г — безадресный
Команды трехадресного формата занимают много места в памяти, в то же время далеко не всегда поля адресов используются в командах эффективно. Действительно, наряду с двухместными операциями (сложение, деление, конъюнкция и др.) встречаются и одноместные (инверсия, сдвиг, инкремент и др.), для которых третий адрес не нужен. При выполнении цепочки вычислений часто результат предыдущей операции используется в качестве операнда для следующей. Более того, нередко встречаются команды, для которых операнды не определены (СТОП) или подразумеваются самим кодом операций (DAA, десятичная коррекция аккумулятора).
Поэтому в системах команд реальных ЭВМ трехадресные команды встречаются редко. Чаще используются двухадресные команды (рис. 2.1,6), в этом случае в бинарных операциях результат помещается на место одного из операндов.
Для реализации одноадресных форматов (рис. 2.1, б) в процессоре предусматривают специальную ячейку — аккумулятор. Первый операнд и результат всегда размещаются в аккумуляторе, а второй операнд адресуется полем А.
Реальная система команд обычно имеет команды нескольких форматов, причем тип формата определяется в поле КОП.
Способы адресации
Способ адресации определяет, каким образом следует использовать информацию, размещенную в поле адреса команды.
Не следует думать, что во всех случаях в поле адреса команды помещается адрес операнда. Существует пять основных способов адресации операндов в командах.
· Прямая — в этом случае в адресном поле располагается адрес операнда. Разновидность — прямая регистровая адресация, адресующая не ячейку памяти, а РОН. Поле адреса регистра имеет в команде значительно меньшую длину, чем поле адреса памяти.
· Непосредственная — в поле адреса команды располагается не адрес операнда, а сам операнд. Такой способ удобно использовать в командах с константами.
· Косвенная — в поле адреса команды располагается адрес ячейки памяти, в которой хранится адрес операнда ("адрес адреса"). Такой способ позволяет оперировать адресами как данными, что облегчает организацию циклов, обработку массивов данных и др. Его основной недостаток— потеря времени на двойное обращение к памяти — сначала за адресом, потом — за операндом. Разновидность — косвенно-регистровая адресация, при которой в поле команды размещается адрес РОН, хранящего адрес операнда. Этот способ, помимо преимущества обычной косвенной адресации, позволяет обращаться к большой памяти с помощью коротких команд и не требует двойного обращения к памяти (обращение к регистру занимает гораздо меньше времени, чем к памяти).
· Относительная — адрес формируется как сумма двух слагаемых: базы, хранящейся в специальном регистре или в одном из РОН, и смещения, извлекаемого из поля адреса команды. Этот способ позволяет сократить длину команды (смещение может быть укороченным, правда в этом случае не вся память доступна в команде) и/или перемещать адресуемые массивы информации по памяти (изменяя базу). Разновидности — индексная и базово-индексная адресации. Индексная адресация предполагает наличие индексного регистра вместо базового. При каждом обращении содержимое индексного регистра автоматически модифицируется (обычно увеличивается или уменьшается на 1). Базово-индексная адресация формирует адрес операнда как сумму трех слагаемых: базы, индекса и смещения.
· Безадресная — поле адреса в команде отсутствует, а адрес операнда или не имеет смысла для данной команды, или подразумевается по умолчанию. Часто безадресные команды подразумевают действия над содержимым аккумулятора. Характерно, что безадресные команды нельзя применить к другим регистрам или ячейкам памяти.
Одной из разновидностей безадресного обращения является использование т. н. магазинной памяти или стека. Обращение к такой памяти напоминает обращение с магазином стрелкового оружия. Имеется фиксированная ячейка, называемая верхушкой стека. При чтении слово извлекается из верхушки, а все остальное содержимое "поднимается вверх" подобно патронам в магазине, так что в верхушке оказывается следующее по порядку слово. Одно слово нельзя прочитать из стека дважды. При записи новое слово помещается в верхушку стека, а все остальное содержимое "опускается вниз" на одну позицию. Таким образом, слово, помещенное в стек первым, будет прочитано последним. Говорят, что стек поддерживает дисциплину LIFO — Last In First Out (последний пришел — первый ушел). Реже используется безадресная память типа очередь с дисциплиной FIFO — First In First Out (первый пришел — первый ушел).
Система операций
Все операции, выполняемые в командах ЭВМ, принято делить на пять классов.
· Арифметико-логические и специальные — команды, в которых выполняется собственно преобразование информации. К ним относятся арифметические операции сложение, вычитание, умножение и деление (с фиксированной и плавающей занятой), команды десятичной арифметики, логические операции конъюнкции, дизъюнкции, инверсии и др., сдвиги, преобразование чисел из одной системы счисления в другую и такие экзотические, как извлечение корня, решение системы уравнений и др. Конечно, очень редко встречаются ЭВМ, система команд которых включает все эти команды.
· Пересылки и загрузки — обеспечивают передачу информации между процессором и памятью или между различными уровнями памяти (СОЗУ <-> ОЗУ). Разновидность — загрузка регистров и ячеек константами.
· Ввода/вывода — обеспечивают передачу информации между процессором и внешними устройствами. По структуре они очень похожи на команды предыдущего класса. В некоторых ЭВМ принципиально отсутствует различие между ячейками памяти и регистрами внешних устройств (единое адресное пространство) и класс команд ввода/вывода не выделяется, все обмены осуществляются в рамках команд пересылки и загрузки.
· Передачи управления — команды, которые изменяют естественный порядок выполнения команд программы. Эти команды меняют содержимое программного счетчика, обеспечивая переходы по программе. Существуют команды безусловной и условной передачи управления. В последнем случае передача управления происходит, если выполняется заданное в коде команды условие, иначе выполняется следующая по порядку команда.
В качестве условий обычно используются признаки результата предыдущей операции, которые хранятся в специальном регистре признаков (флажков). Чаще всего формируются и проверяются признаки нулевого результата, отрицательного результата, наличия переноса из старшего разряда, четности числа единиц в результате и др. Различают три разновидности команд передачи управления:
• переходы;
• вызовы подпрограмм;
• возвраты из подпрограмм.
Команды переходов помещают в программный счетчик содержимое своего адресного поля — адрес перехода. При этом старое значение программного счетчика теряется. В микроЭВМ часто для экономии длины адресного поля команд условных переходов адрес перехода формируется как сумма текущего значения программного счетчика и относительно короткого знакового смещения, размещаемого в команде. В крайнем случае, в командах условных переходов можно и вовсе обойтись без адресной части — при выполнении условия команда "перепрыгивает" через следующую команду, которой обычно является безусловный переход.
Команда вызова подпрограммы работает подобно команде безусловного перехода, но старое значение программного счетчика предварительно сохраняется в специальном регистре или в стеке. Команда возврата передает содержимое верхушки стека или специального регистра в программный счетчик. Команды вызова и возврата работают "в паре". Подпрограмма, вызываемая командой вызова, должна заканчиваться командой возврата, что обеспечивает по окончании работы подпрограммы передачу управления в точку вызова. Хранение адресов возврата в стеке обеспечивает возможность реализации вложенных подпрограмм.
· Системные— команды, выполняющие управление процессом обработки информации и внутренними ресурсами процессора. К таким командам относятся команды управления подсистемой прерывания, команды установки и изменения параметров защиты памяти, команда останова программы и некоторые другие. В простых процессорах класс системных команд немногочисленный, а в сложных мультипрограммных системах предусматривается большое число системных команд.
Задания для выполнения:
1. Ознакомиться с теоретическими сведениями по архитектуре ЭВМ
2. Запустите программу CompModel.exe.
3. Записать в ОЗУ "программу", состоящую из пяти команд— номер задания выбрать из табл. 3, в соответствии с номером Вашего варианта. Команды разместить в последовательных ячейках памяти.
Таблица 3. Варианты заданий
№ | IR | Команда 1 | Команда 2 | Команда 3 | Команда 4 | Команда 5 | ||||||
IN | MUL #2 | WR10 | WR @10 | JNS 001 | ||||||||
X | RD #17 | SUB #9 | WR16 | WR @16 | JNS 001 | |||||||
IN | ADD #16 | WR8 | WR@8 | JS 001 | ||||||||
X | RD #2 | MUL #6 | WR 11 | WR @11 | JNZ 00 | |||||||
IN | WR8 | DIV #4 | WR @8 | JMP 002 | ||||||||
X | RD #4 | WR 11 | RD @11 | ADD #330 | JS 000 | |||||||
IN | WR9 | RD @9 | SUB#1 | JS 001 | ||||||||
X | RD 4 | SUB #8 | WR8 | WR @8 | JNZ 001 | |||||||
IN | ADD #12 | WR 10 | WR @10 | JS 004 | ||||||||
X | RD 4 | ADD #15 | WR 13 | WR 013 | JMP 001 | |||||||
IN | SUB #308 | WR11 | WR 011 | JMP 001 | ||||||||
X | RD #988 | ADD #19 | WR9 | WR §9 | JNZ 001 | |||||||
IN | WR11 | ADD 11 | WR 011 | JMP 002 | ||||||||
X | RD #5 | MUL #9 | WR10 | WR @10 | JNZ 001 | |||||||
При необходимости установить начальное значение в устройство ввода IR.
3. Определить те программно-доступные объекты ЭВМ, которые будут изменяться при выполнении этих команд.
4. Выполнить в режиме Шаг введенную последовательность команд, фиксируя изменения значений объектов, определенных в п. 4, в таблице следующего формата.
Таблица 2. Результаты выполнения программы
PC | Асс | М(хх) | М(нн) | PC | Асс | М(мм) | М(оо) |
5. Если в программе образуется цикл, необходимо просмотреть не более двух повторений каждой команды, входящей в тело цикла.
Содержание отчета
2.1.
Пример 1
Дана последовательность мнемокодов, которую необходимо преобразовать в машинные коды, занести в ОЗУ ЭВМ, выполнить в режиме Шаги зафиксировать изменение состояний программно-доступных объектов ЭВМ (табл. 1).
Таблица 1. Команды и коды
Последовательность | Значения | ||||
Команды | RD#20 | WR30 | ADD #5 | WR@30 | JNZ 002 |
Коды | 21 1 020 | 22 0 030 | 23 1 005 | 22 2 030 | 12 0 002 |
2.2. Введите коды табл.1 последовательно в ячейки ОЗУ, начиная с адреса 000.
2.3. Выполняя команды в режиме Шаг, фиксируйте в табл. 2 изменения программно-доступных объектов (в данном случае это Асс, PC и ячейки ОЗУ 020 и 030).
Таблица 2.Содержимое регистров ЭВМ в результате выполнения примера программы
PC | Асс | М(30) | М(20) | PC | Асс | М(30) | М(20) |