Команды в микропроцессореОсновные понятия. Входное воздействие в виде двоичного кода, предназна­ченное для управления микропроцессором, называется командой. Ее главная функция — выполнение операций над данными. Команда предписывает шаги по реализации микропроцессором заданной операции, представляющей собой функционально завершенное действие, которое определяется типом использу­емых данных, источником их получения, операцией над ними, приемником разме­щения результата, источником получения следующей команды. Машинное представление команды в памяти, состоящее из ряда нулей и единиц, называет­ся объектным кодом команды. Для лучшего восприятия команды используется ее символическое обозначение или мнемокод.

Каждая команда должна содержать сведения, необходимые для ее выполне­ния. Сведения кодируются. Для кодировки каждой группы сведений выделяется свое поле. Совокупность полей, содержащих необходимые сведения для выпол­нения требуемой операции, называют форматом команды. В формате команды должны быть определены:

●     функциональное назначение операции в виде кода операции;

●     адреса источников данных. В общем случае должны быть указаны адреса двух операндов;

●     адрес места расположения результата;

●     адрес следующей команды.

Способы уменьшения формата команды. Рассмотрим гипотетическую ситуацию. Допустим, что в формате команды:

●     поле кода операций (КО) занимает 4 разряда, что позволяет закодировать 24 = 16 операций;

●     под адреса двух операндов–источников, адрес места расположения результа­та, адрес следующей команды выделены поля АO1, АO2, АР, АСК (рис. 2.7.1) по 12 разрядов, что позволяет в каждом случае адресовать 212 = 4К ячеек памяти.

Как видно из рис. 2.7.1, несмотря на скромные возможности команды, ее об­щая длина составляет достаточно большое число (52) бит. Для сокращения коли­чества разрядов команды часть информации должна быть задана неявно и не должна зависеть от особенностей конкретной команды.

рис. 2.7.1

Наиболее употребительными являются следующие способы сокраще­ния длины кода команды:

●     использование специально предусмотренных для адресации регистров: про­граммного счетчика, указателя стека и др. Например, при выполнении ко­манд с последовательно возрастающими адресами программный счетчик ав­томатически считывает из памяти следующую команду. В этом случае в фор­мате команды отсутствует поле адреса следующей команды;

●     использование неявных способов адресации. Например, при использовании неявной регистровой адресации адрес следующей команды или операнда хранится в регистре, код которого содержит значительно меньшее число раз­рядов, чем код исполнительного адреса;

●     совмещение источника одного из операндов с приемником результата. В этом случае в формате команды исключается поле адреса результата;

●     использование команд с укороченной адресацией, т. е. части адресного про­странства памяти;

●     использование для некоторой группы операций одного регистра. Наиболее часто для этой цели используется аккумулятор. В операциях с аккумулятором не требуется его кодировка. Например, команда ADD В выполняет операцию сложение содержимого регистра В с аккумулятором А и в него же помещает результат. Такая команда является одноадресной. Ее формат состоит из двух полей: кода операции и адреса операнда. Однако одноадресные команды требуют дополнительных команд для предварительной загрузки операндов в аккумулятор и последующего размещения результатов в памяти;

●     использование нескольких аккумуляторов (Motorola 6800, National РАСЕ, Signetic 2650). В этом случае каждая команда имеет два адреса, однако ад­рес источника и места назначения может быть задан другим аккумулятором. Следует отметить, что в одних процессорах все команды имеют одинаковую длину, в других — разную длину. Одинаковая длина всех команд упрощает деко­дирование, однако требует большего пространства, поскольку все команды долж­ны быть такой же длины, как самая длинная. Команды могут быть короче слова, равными слову или длиннее слова. В процессорах с неймановской архитектурой команды и данные имеют одинаковую длину и поступают в процессор по шине данных. Поэтому для отличия команд отданных в процессоре предусмотрены средства, обеспечивающие:

●     засылку команд (первого байта) в регистр команд с дальнейшей их дешифра­цией для активизации устройства управления;

●     поступление данных (последующих байт) в аккумулятор или другие регистры для обработки в АЛУ.

Форматы команд некоторых процессоров. Рассмотрим в общих чертах форматы команд 8–разрядного (8080) и 16–разрядного (8086) процессоров. Дли­на команды кратна байту и может составлять один, два и более байт.

Достаточно простые форматы имеют команды процессора 8080 (рис. 2.7.2). Длина команд составляет от 1 до 3 байт. Код операции всегда размещается в первом байте команды. Второй и третий байты отводятся под непосредствен­ные данные, адрес порта или ячейки памяти. В командах допускается явное зада­ние только одного адреса памяти. Поэтому система команд процессора 8080 от­носится к классу одноадресных.

рис. 2.7.2

На рис. 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 (регистр/память); port8 — корот­кий 8–разрядный адрес порта; disp — смещение; offset — смещение; sel — селек­тор; vect — вектор прерывания; v — сдвиговый флаг; cc — 4–разрядное поле, для кодирования 16  условий перехода.

рис. 2.7.3