Состав машинных команд
Структура и виды команд
Решение задач на компьютере реализуется программным способом, путем выполнения последовательно во времени отдельных операций над данными, предусмотренных алгоритмом решения задачи.
Алгоритм – это точно определенная конечная последовательность действий, которые нужно выполнить над исходными данными, чтобы получить решение задачи.
Машинная программа – это алгоритм, заданный в виде последовательности машинных команд.
Машинная команда – это элементарная инструкция компьютеру, выполняемая им автоматически без дополнительных указаний и пояснений.
Машинная команда состоит из двух частей: операционной и адресной.
Операционная часть команды – это группа разрядов в команде, предназначенная для указания кода операции.
Адресная часть команды – это группа разрядов в команде, в которых записываются коды адреса (адресов) ячеек памяти компьютера, предназначенных для оперативного хранения данных, задействованных при выполнении команды. Часто эти адреса называют адресами операндов, т.е. чисел, участвующих в операции.
По количеству адресов, записываемых в команде, команды делятся на безадресные, одно-, двух- и трехадресные.
Трехадресная команда: | КОП | а1 | а2 | а3 |
а1 и а2 – адреса ячеек (регистров), где расположены данные, участвующие в операции;
а3 – адрес ячейки (регистра), куда нужно поместить результат операции.
Двухадресная команда: | КОП | а1 | а2 |
а1 – адрес ячейки (регистра), где расположено первое из данных, участвующее в операции, и куда нужно поместить результат операции
а2 – адрес ячейки (регистра), где расположено второе из данных, участвующее в операции.
Одноадресная команда: | КОП | а1 |
а1 – в зависимости от модификации команды либо адрес ячейки (регистра), где расположено одно из данных, участвующее в операции, либо адрес ячейки (регистра) куда нужно поместить результат операции.
Безадресная команда содержит только код операции, а данные для нее должны быть заранее помещены в определенные регистры машины.
Стандартный набор современных ПК содержит около 240 машинных команд. Их можно разделить на группы по видам выполняемых операций:
— операции пересылки данных внутри компьютера;
— арифметические операции над данными;
— логические операции над данными;
— операции обращения к внешним устройствам компьютера;
— операции передачи управления;
— обслуживающие и вспомогательные операции.
Операции передачи управления служат для изменения естественного порядка выполнения команд. Их два вида. Операции безусловной передачи управления требуют выполнения данной команды не следующую по порядку, а той, адрес которой в явном или неявном виде указан в адресной части. Операции условной передачи управления тоже требуют передачи управления по адресу указанному в адресной части команды, но только в том случае, если выполняется некоторое заранее оговоренное для этой команды условие. Условие задается в коде операции в явном или неявном виде.
Последовательность команд которые должна выполнить машина
4) Машинные команды, циклы и такты. Микропрограммный принцип выполнения команд.
Каждая команда в МП выполняется на протяжении командного цикла. Командный цикл состоит из цикла выборки команды и цикла выполнения команды (рис.1.8).
Рис.1.8. Пример командного цикла 8-разрядного МП
В зависимости от действий, выполняемых МП, различают следующие типы машинных циклов:
Первым машинным циклом команды всегда является цикл ВЫБОРКА, на протяжении которого осуществляется выборка из памяти байта кода команды по адресу, определяемому содержимым указателя команд. Содержимое указателя в цикле увеличивается на единицу. Для выполнения однобайтных команд с регистровой адресацией требуется лишь один цикл ВЫБОРКА.
Для выборки двух- или трехбайтных команд, кроме цикла ВЫБОРКА, нужны еще один или два машинных цикла для чтения второго или второго и третьего байтов команды. Эти циклы определяются как циклы ЧТЕНИЕ ПАМЯТИ. Цикл ЧТЕНИЕ ПАМЯТИ необходим также для выборки операнда при выполнении команд с косвенной или прямой адресацией. Для записи операндов или сохранения адресов при выполнении команд пересылок нужны машинные циклы ЗАПИСЬ В ПАМЯТЬ.
В командах с обращением к стеку выполняются циклы ЧТЕНИЕ СТЕКА и ЗАПИСЬ В СТЕК. Адрес памяти определяются указателем стека SP.
Для выполнения команд ввода/вывода выполняются машинные циклы ВВОД и ВЫВОД; для организации прерываний программы и остановки процессора — циклы ПРЕРЫВАНИЕ, ОСТАНОВ, ПРЕРЫВАНИЕ ПРИ ОСТАНОВЕ.
Каждый машинный цикл процессора идентифицируется байтом, называемым байтом состояния. Байт состояния выдается на шину данных в начале каждого машинного цикла и сопровождается одновременной выдачей сигнала SYNC на одноименный контакт БИС МП. Байт состояния несет информацию о последующих действиях процессора. Его можно запомнить по сигналу SYNC и сформировать такие управляющие сигналы, которые не удалось вывести в явном виде на контакты БИС МП из-за ограниченного количества контактов микросхемы. Байты состояния для процессора i8080 приведены в табл. 1.1.
Рис.1.10. Цикл ЗАПИСЬ В ПАМЯТЬ
Такты отсчитываются по передним фронтам последовательности F1, а микрооперации в каждом такте определяются передним фронтом последовательности F2. При тактовой частоте 2МГц продолжительность такта равна 0,5мкс.
Сигналы на линиях шин А15—А0 (D7—D0) изображены на рис.1.9 на одной временной диаграмме в виде линий L- и Н-уровней одновременно. Таким образом, на диаграмме указан лишь тип информации на шине, например — присутствие на ней адреса или данных. Пунктирной линией обозначено высокоимпедансное состояние линий шин (z-состояние).
Во втором такте Т2 заканчивается поступление байта состояния и сигнала SYNC, продолжительность которых равняется одному такту. В машинном цикле ВЫБОРКА содержимое IP увеличивается для адресации следующего байта команды или следующей команды. В этом же такте устройство управления МП производит анализ сигналов на входах READY и HOLD, а также контроль выполнения команды останова hlt. Если память или внешнее устройство не готовы к обмену (READY = 0) вследствие того, что поступил запрос ПДП (HOLD = 1) или выполняется команда останова hit, то обмен данными осуществляться не может, и процессор переходит в один из режимов — ожидания, захвата шин или останова. В этих режимах осуществляется ожидание сигнала на протяжении нескольких тактов ожидания Tw, количество которых определяется внешними сигналами. На рис.1.9 в такте Т2 сигнал READY равняется логическому нулю, а в такте Тw — логической единице.
В такте ТЗ в зависимости от типа машинного цикла осуществляется обращение к памяти, стеку или внешнему устройству. В результате в МП вводится (см. рис.1.9) или из него выводится (см. рис.1.10) байт команды, адреса или данных. В зависимости от типа команды машинный цикл может содержать такты Т4 и Т5 (например, если для выполнения команды нужна обработка операндов). В последнем такте команды (ТЗ, Т4 или Т5) анализируется наличие сигнала запроса прерывания INT. Если прерывание разрешено, то процессор переходит к машинному циклу ПРЕРЫВАНИЕ.
Машинная команда
Каждая программа состоит из отдельных машинных команд; команда является указанием процессору произвести какую-либо элементарную операцию, например, копирования информации, сложения
и др. Все программы более высокого уровня (текстовый редактор, лазерный проигрыватель и прочие, в том числе написанные на языках программирования) сводятся к последовательности машинных команд.
Совокупность всех операций, которые может выполнять машина, образует систему ее команд. Система команд зависит от конструкции ЭВМ;
в пределах одного семейства компьютеры имеют совместимые инструкции.
Несмотря на отдельные отличия, системы машинных команд имеют много общего. Любая ЭВМ обязательно содержит следующие группы команд обработки информации.
1. Команды передачи данных (перепись), копирующие информацию из одного места в другое.
2. Арифметические операции, которым фактически обязана своим рождением вычислительная техника. Конечно, доля вычислительных действий в современном компьютере заметно уменьшилась, но они по-прежнему играют в программах важную роль.
3. Логические операции, позволяющие компьютеру производить анализ получаемой информации. После выполнения такой команды, с помощью условного перехода ЭВМ способна выбрать дальнейший ход выполнения программы. Простейшими примерами команд рассматриваемой группы могут служить сравнение, а также известные логические операции И, ИЛИ, НЕ (инверсия). Кроме того, к ним часто добавляется анализ отдельных битов кода, их сброс и установка.
4. Сдвиги двоичного кода. Для доказательства важности этой группы команд достаточно вспомнить правило умножения столбиком: каждое последующее произведение записывается в такой схеме со сдвигом на одну цифру влево.
5. Команды ввода и вывода информации для обмена с внешними устройствами.
6. Команды управления, к которым прежде всего следует отнести условный и безусловный переход, а также команды обращения к подпрограмме (переход с возвратом). Некоторые ЭВМ имеют специальные команды для организации циклов, но это не обязательно: любой цикл может быть сведен к той или иной комбинации условного и безусловного переходов. Часто к этой же группе команд относят операции по управлению процессором; с ростом сложности устройства процессора количество такого рода команд увеличивается.
По степени сложности команд и их ассортименту процессоры разделяют на две группы — RISC и CISC (см. “Процессор”).
Пожалуй, наиболее удивительным является тот факт, что с помощью относительно небольшого многообразия универсальных команд удается создать программное обеспечение, которое способно себя вести весьма сложным образом.
Любая команда ЭВМ обычно состоит из двух частей — операционной и адресной. Операционная часть (иначе она еще называется кодом операции — КОП) указывает, какое действие необходимо выполнить с информацией. Адресная часть описывает, где используемая информация хранится и куда поместить результат.
Команды могут быть одно-, двух- и трехадресные в зависимости от количества возможных операндов. Первые ЭВМ имели наиболее простую и наглядную трехадресную систему команд. Например: взять числа из адресов памяти А1 и А2, сложить их и сумму поместить в адрес А3. Для реализации этого сложения на одноадресной машине потребуется выполнить не одну, а три команды:
a) извлечь содержимое ячейки А1 в сумматор;
b) сложить сумматор с числом из А2;
c) записать результат из сумматора в А3.
Может показаться, что одноадресной машине для решения любой задачи потребуется втрое больше команд, чем трехадресной. На самом деле это далеко не всегда так. Попробуйте самостоятельно спланировать программу вычисления выражения Y = (X1 + X2) * X3/X4 и вы с удивлением обнаружите, что потребуется 3 трехадресных команды и всего 5 одноадресных. Таким образом, одноадресная машина в чем-то даже эффективнее, т.к. она не производит ненужной записи в память промежуточных результатов.
Ради полноты изложения следует сказать о возможности реализации безадресной (нульадресной) машины, использующей особый способ организации памяти — стек. Хотя подобная машина неудобна для человека, она легко реализуется в компьютере; в частности, именно так устроена JAVA-машина.
Чтобы получить хотя бы некоторое представление об уровне машинных команд, приведем примеры нескольких типичных инструкций для процессоров семейства Intel.
С точки зрения программиста, машинные команды — это самый низкий уровень. Но для процессора каждая инструкция распадается на еще более простые составные части, которые принято называть тактами. На каждом такте процессор выполняет какие-либо совсем элементарные действия, например, обнуляет один из своих внутренних регистров, копирует содержимое из одного регистра в другой, анализирует содержимое отдельных битов информации и т.д. Для синхронизации последовательных машинных тактов они инициируются с помощью специального тактового генератора. Его частота выбирается инженерами таким образом, чтобы к началу следующего такта все операции предыдущего успевали надежно заканчиваться.
Различные по сложности операции выполняются за разное количество тактов. Например, передача содержимого одного регистра в другой выполняется гораздо быстрее, чем умножение чисел. Существенно удлиняется выполнение команды, если ее данные берутся не из внутренних регистров самого процессора, а из оперативной памяти (именно поэтому в процессор встраивается внутренний кэш).
Из сказанного выше отчетливо следует, что тактовая частота, определяющая время выполнения составляющих машинной команды, является важной характеристикой процессора: чем она выше, тем быстрее при прочих равных условиях работает процессор. Подчеркнем, что в случае различных алгоритмов выполнения операций внутри разных моделей процессоров использовать тактовую частоту как меру сравнения их быстродействия весьма проблематично.
Методические рекомендации
Курс информатики основной школы
В базовом курсе достаточно дать ученикам лишь наиболее общее представление о машинных командах. При этом важно подчеркнуть два аспекта проблемы. Во-первых, как и любой исполнитель, компьютер имеет собственную систему команд. А во-вторых, эта система является базовой для реализации всех остальных уровней программного обеспечения.
Предложенное в статье объяснение понятия тактовой частоты не является традиционным, но оно достаточно просто для понимания и хорошо согласуется с устройством процессоров.
Курс информатики в старших классах
При изучении программного обеспечения можно рекомендовать учителю в ознакомительном плане изложить материал данной статьи. Хотя полученные знания, вероятно, не будут непосредственно применяться учениками, для формирования общих представлений об обработке информации на компьютере они являются весьма полезными.
5 См., например, эксперименты 3.6.2 в: Еремин Е.А. Популярные лекции об устройстве компьютера. СПб.: BHV-Петербург, 2003, 272 с.
Цикл выполнения команды
Для улучшения понимания вопросов взаимодействия узлов и устройств ЭВМ рассмотрим автоматическое выполнение команды в трехадресной ЭВМ с классической архитектурой. Структурная схема такой ЭВМ показана на рис. 12.1
Обработку команды можно разбить на ряд функционально завершенных действий (этапов), составляющих ее цикл ( рис. 12.2).
Изучение цикла команды проведем при следующих начальных условиях и предположениях:
Определим взаимодействие узлов и устройств ЭВМ на каждом этапе.
Если данная команда не является командой перехода, то реализуется следующая последовательность этапов как продолжение первого.
Третий этап – выборка второго операнда ( b ). Производится по аналогии со вторым этапом. Соответствующие передачи на рис. 12.1 отмечены цифрой 3.
Приведенная последовательность этапов повторяется и в дальнейшем для каждой из последующих команд программы, что обеспечивает автоматическое выполнение программы.
В команде условного перехода нарушение естественного порядка выполнения программы (то есть передача кода k + j в СК ) происходит только при выполнении определенного условия. Это условие характеризует результат, полученный командой, предшествующей команде условного перехода.
Таким условием может быть, например, отрицательный результат или результат, равный нулю.
Структура и форматы машинных команд
Машинная команда представляет собой код, определяющий операцию вычислительной машины и данные, участвующие в операции. Команда должна содержать в явной или неявной форме информацию об адресе результата операции, и об адресе следующей команды.
Машинная операция – это действия машины по преобразованию информации, выполняемые под воздействием одной команды.
Программа – последовательность команд, отображающих все действия, необходимые для решения задачи по некоторому алгоритму.
Машинный такт – период тактовой частоты работы процессора.
Машинный цикл – количество машинных тактов, требуемых для выполнения одной команды.
По характеру выполняемых операций различают следующие основные группы команд:
Машинная команда состоит из операционной и адресной частей. Эти части могут состоять из нескольких полей. В общем виде машинная команда имеет следующую структуру:
Операционная часть содержит код, задающий вид операции (сложение, умножение, передача и т.д.).
Адресная часть содержит информацию об адресах операндов, результата операции и следующей команды.
Структура команды определяется составом, назначением и расположением полей в команде.
Формат команды – это структура команды с разметкой номеров разрядов, определяющих границы отдельных полей команды.
Возможные структуры машинных команд
Двухадресная структура
используется в вычислительных машинах, построенных так, что результат операции будет всегда помещаться в фиксированный регистр процессора, например на место первого операнда. В этом случае адрес результата может явно не указываться.
Безадресная структура фиксирует адреса обоих операндов и результата операции, например при работе со стековой памятью.
Обычно в вычислительной машине используется несколько форматов команд разной длины (чаще всего безадресные, одноадресные и двухадресные).