Основные понятия.
Входное воздействие в виде двоичного кода, предназначенное для управления микропроцессором, называется командой. Ее главная функция — выполнение операций над данными. Команда предписывает шаги по реализации микропроцессором заданной операции, представляющей собой функционально завершенное действие, которое определяется типом используемых данных, источником их получения, операцией над ними, приемником размещения результата, источником получения следующей команды. Машинное представление команды в памяти, состоящее из ряда нулей и единиц, называется объектным кодом команды. Для лучшего восприятия команды используется ее символическое обозначение или мнемокод.
Каждая команда должна содержать сведения, необходимые для ее выполнения. Сведения кодируются. Для кодировки каждой группы сведений выделяется свое поле. Совокупность полей, содержащих необходимые сведения для выполнения требуемой операции, называют форматом команды. В формате команды должны быть определены:
? функциональное назначение операции в виде кода операции;
? адреса источников данных. В общем случае должны быть указаны адреса двух операндов;
? адрес места расположения результата;
? адрес следующей команды.
Способы уменьшения формата команды.
Рассмотрим гипотетическую ситуацию. Допустим, что в формате команды:
? поле кода операций (КО) занимает 4 разряда, что позволяет закодировать 24 = 16 операций;
? под адреса двух операндов–источников, адрес места расположения результата, адрес следующей команды выделены поля А O 1, А O 2, АР, АСК (рис. 2.7.1) по 12 разрядов, что позволяет в каждом случае адресовать 212 = 4К ячеек памяти.
Как видно из рис. 2.7.1, несмотря на скромные возможности команды, ее общая длина составляет достаточно большое число (52) бит. Для сокращения количества разрядов команды часть информации должна быть задана неявно и не должна зависеть от особенностей конкретной команды.
Наиболее употребительными являются следующие способы сокращения длины кода команды:
? использование специально предусмотренных для адресации регистров: программного счетчика, указателя стека и др. Например, при выполнении команд с последовательно возрастающими адресами программный счетчик автоматически считывает из памяти следующую команду. В этом случае в формате команды отсутствует поле адреса следующей команды;
? использование неявных способов адресации. Например, при использовании неявной регистровой адресации адрес следующей команды или операнда хранится в регистре, код которого содержит значительно меньшее число разрядов, чем код исполнительного адреса;
? совмещение источника одного из операндов с приемником результата. В этом случае в формате команды исключается поле адреса результата;
? использование команд с укороченной адресацией, т. е. части адресного пространства памяти;
? использование для некоторой группы операций одного регистра. Наиболее часто для этой цели используется аккумулятор. В операциях с аккумулятором не требуется его кодировка. Например, команда ADD
В выполняет операцию сложение содержимого регистра В с аккумулятором А и в него же помещает результат. Такая команда является одноадресной. Ее формат состоит из двух полей: кода операции и адреса операнда. Однако одноадресные команды требуют дополнительных команд для предварительной загрузки операндов в аккумулятор и последующего размещения результатов в памяти;
? использование нескольких аккумуляторов (Motorola 6800, National РАСЕ, Signetic 2650). В этом случае каждая команда имеет два адреса, однако адрес источника и места назначения может быть задан другим аккумулятором. Следует отметить, что в одних процессорах все команды имеют одинаковую длину, в других — разную длину. Одинаковая длина всех команд упрощает декодирование, однако требует большего пространства, поскольку все команды должны быть такой же длины, как самая длинная. Команды могут быть короче слова, равными слову или длиннее слова. В процессорах с неймановской архитектурой команды и данные имеют одинаковую длину и поступают в процессор по шине данных. Поэтому для отличия команд отданных в процессоре предусмотрены средства, обеспечивающие:
? засылку команд (первого байта) в регистр команд с дальнейшей их дешифрацией для активизации устройства управления;
? поступление данных (последующих байт) в аккумулятор или другие регистры для обработки в АЛУ.
Форматы команд некоторых процессоров.
Рассмотрим в общих чертах форматы команд 8–разрядного (8080) и 16–разрядного (8086) процессоров. Длина команды кратна байту и может составлять один, два и более байт.
Достаточно простые форматы имеют команды процессора 8080 (рис. 2.7.2). Длина команд составляет от 1 до 3 байт. Код операции всегда размещается в первом байте команды. Второй и третий байты отводятся под непосредственные данные, адрес порта или ячейки памяти. В командах допускается явное задание только одного адреса памяти. Поэтому система команд процессора 8080 относится к классу одноадресных.
На рис. 2.7.3 изображены форматы команд процессора 8086. Длина команд составляет от 1 до 6 байт.
На рис. 2.7.2 и 2.7.3 обозначено: ОР — код операции; X — биты кода операции; dst , src — указатели приемника и источника данных; port — адрес порта; data — данные; addr — адрес памяти; w — тип операнда ( w = 0 — байт, w = 1 — слово); d — направление передачи ( d = 0 — «из», d = 1 — «в»); s — признак расширения байта в слово; reg — трехразрядное поле для кодирования регистров AL–BH; seg — двухразрядное поле для кодирования сегментных регистров; mod — определяет режим, заданный полем r / m (регистр/память); port 8 — короткий 8–разрядный адрес порта; disp — смещение; offset — смещение; sel — селектор; vect — вектор прерывания; v — сдвиговый флаг; cc — 4–разрядное поле, для кодирования 16 условий перехода.