Что такое система команд эвм. Процессоры. Система команд ЭВМ. Устройства управления. Организация внутрипроцессорных систем ввода-вывода информации. Команды арифметической и логической обработки

Что такое система команд эвм. Процессоры. Система команд ЭВМ. Устройства управления. Организация внутрипроцессорных систем ввода-вывода информации. Команды арифметической и логической обработки

Лекция 11 ОСНОВНЫЕ КОМАНДЫ ЭВМ Классификация команд по различным признакам Структура команд ЭВМ Команды передачи данных Команды обработки данных Команды передачи управления Команды для работы с подпрограммами. Стеки. Прочие команды ЭВМ.

Система команд ЭВМ Все разнообразие решаемых на ЭВМ задач реализуется с помощью небольшого набора очень простых команд. Система команд у типичной ЭВМ включает в себя всего 60 -150 базовых команд. Все команды в основном служат для выполнения очень простых действий, таких, как прочитать, запомнить, сложить, сдвинуть, сравнить и т. д. Интеллектуальность ЭВМ достигается за счет того, что ЭВМ способна выполнять программы, состоящие из большого числа таких простых действий с огромной, не достижимой для человека скоростью. При описании системы команд ЭВМ обычно принято классифицировать команды по следующим признакам.

Классификация команд ЭВМ По функциональному назначению Команды передачи данных Команды обработки данных Команды передачи управления Дополнительные (прочие) По количеству адресов Нульадресные или безадресные С одним адресом С двумя адресами С тремя адресами По способу кодирования операции По длине С фиксированной длиной кода операции С переменной длиной кода операции По способу адресации Один байт (слово) Два байта (слова) Три байта (слова)

Код операции а 1 а 2 а 3 - Трехадресная команда а 1, а 2 – адреса ячеек (регистров), где находятся числа, участвующие в операции (операнды) а 3 – адрес ячейки оперативной памяти, куда нужно поместить результат Код операции а 1 а 2 - Двухадресная команда Результат записывается в ячейку а 2 Код операции а 1 - Одноадресная команда а 1 – адрес ячейки, где хранится число участвующее в операции или адрес ячейки, где записывается результат Код операции - Нуль адресная команда Все операнды в регистре ЦП

Команды передачи данных Данная группа команд включает в себя подгруппы команд передачи кодов между регистрами внутри процессора, из регистров процессора в память, из памяти в регистры процессора, из одних ячеек памяти в другие и передачи данных между процессором и портами внешних устройств. Отдельную подгруппу составляют команды работы со стеком. Они позволяют включить данные в стек для временного хранения и извлекать данные из стека при необходимости их использования.

Команды обработки данных Данную группу команд с точки зрения выполняемых над данными операций можно подразделить на арифметические (сложить, вычесть, умножить, сравнить), логические (операции И, ИЛИ, НЕ и т. д.) и команды сдвига. Команды этого типа могут иметь один или два операнда. Операнды могут храниться к регистрах центрального процессора, в памяти или в самой команде.

Результат операции формируется в регистре-приемнике или в специализированном регистреаккумуляторе. Команды данной группы формируют также признаки результатов, устанавливаемые в регистре флагов процессора: перенос из старшего разряда, переполнение, нулевой результат и др.

Подробнее о команде сравнения Обычно для сравнения двух чисел процессор выполняет операцию вычитания. По результату вычитания устанавливаются флаги во флаговом регистре. Очевидно, что если сравниваемые числа равны, результат вычитания будет нулевым и в регистре установится флаг нулевого результата. Если первое из сравниваемых чисел больше - результат вычитания будет отрицательным и установится флаг отрицательного результата. Результат вычитания не сохраняется в памяти, поскольку по состоянию флагового регистра можно судить о результатах сравнения чисел.

Команды передачи управления Они имеют важное значение, так как используются для изменения естественного порядка следования команд и организации циклических участков в программах. Простейшей командой передачи управления является команда безусловного перехода JMP , которая загружает адрес перехода, указанный в команде, в программный счетчик. Команды условного перехода проверяют указанное в команде условие и модифицируют программный счетчик, если условие истинно.

Src="http://present5.com/presentation/3/-29919247_13569617.pdf-img/-29919247_13569617.pdf-11.jpg" alt="Пример команды условного перехода Оператор IF (A>B) then go to L некоторого языка"> Пример команды условного перехода Оператор IF (A>B) then go to L некоторого языка высокого уровня может быть реализован двумя командами ЭВМ: СРАВНИТЬ А и В ПЕРЕЙТИ ЕСЛИ БОЛЬШЕ К АДРЕСУ L Если А>В, то результат вычитания будет положителен и соответственно флаг знака во флаговом регистре не установится. Вторая команда (условный переход) проверяет состояние флага знака и, если он не установлен, модифицирует программный счетчик так, чтобы его значение указывало на адрес L.

Организация подпрограмм В программировании широко используется такой прием, как организация подпрограмм. Подпрограмма описывается один раз, а вызываться может из различных мест программы неоднократно. Подпрограмма в процессе своей работы может вызвать другую. После того как подпрограмма закончила свою работу, управление должно быть передано на команду, следующую в памяти сразу за командой обращения к этой подпрограмме. Адрес команды, на которую управление передается после окончания работы подпрограммы, называется адресом возврата.

Где надо хранить адрес возврата? Для того, чтобы начать выполнять подпрограмму, в программный счетчик необходимо загрузить адрес первой команды подпрограммы. Для осуществления возврата из подпрограммы необходимо запомнить в каком-то месте адрес возврата. Можно, например, сохранить адрес возврата в одном из регистров процессора. Такой способ сохранения адреса возврата очень прост и легко реализуется. Однако часто встречаются подпрограммы, которые вызывают другие подпрограммы. Пусть основная программа вызвала подпрограмму А. Она в свою очередь обратилась к подпрограмме В. Если адрес возврата для подпрограммы А хранится в регистре процессора, то куда размещать адрес возврата при вызове подпрограммы В?

Обобщенный алгоритм функционирования фон – неймановской ЭВМ Инициализация Выборка команды Увеличение программного счетчика Дешифрация и выполнение команды Нет Команда «Остановка процессора» Да Инициализация

Понятие стека Большинство ЭВМ используют аппаратно поддерживаемую структуру данных, называемую стеком. Стек - это структура данных, организованная по принципу: последним вошел - первым вышел, т. е. последние записанные в стек данные извлекаются из него первыми. В переводе с англ. stack - стопка. Аналогом стека может служить стопка тарелок. Положить тарелку в стопку можно только сверху, извлечь без проблем опятьтаки только верхнюю тарелку.

Организация стека 1. В ЭВМ для организации стека выделяется область оперативной памяти, а для ее адресации и доступа к стеку используется регистр- указатель стека. 2. Регистр -указатель стека хранит адрес ячейки памяти, содержащей последнее помещенное в стек значение. 3. При записи числа в стек указатель стека модифицируется так, чтобы он указывал на следующую свободную ячейку, и в нее записываются данные.

4. При извлечении из стека данные считываются из той ячейки ОП, на которую показывает указатель, затем указатель стека модифицируется так, чтобы указывать на предпоследнее сохраненное в стеке значение. 5. Обычно стеки растут в сторону уменьшения адресов, т. е. при записи числа указатель стека уменьшается, при извлечении числа из стека - увеличивается.

Команды для работы с подпрограммами. Стеки Стек = ячейки ОП + регистр - указатель стека (АЛУ ЦП) Регистр - указатель стека хранит адрес ячейки ОП, в которой содержится последний помещенный в стек адрес возврата Структура данных стека на примере А) Начальное состояние: стек пустой Ячейки ОП Адреса ячеек 1000 Указатель стека 998 996 Б) В стек записаны два адреса возврата: 1234 и 5678 1234 1000 Указатель стека 5678 998 Запись адресов возврата 996 В) Из стека извлечен один адрес, последний Указатель стека 1234 1000 998 996 Считывание 1000

Src="http://сайт/presentation/3/-29919247_13569617.pdf-img/-29919247_13569617.pdf-19.jpg" alt="Работа команды вызова подпрограмм САLL 1. Когда процессор считывает из памяти команду САLL"> Работа команды вызова подпрограмм САLL 1. Когда процессор считывает из памяти команду САLL , программный счетчик увеличивается и показывает на команду, следующую за командой САLL. То есть программный счетчик теперь содержит адрес возврата, с которого должно продолжиться выполнение основной программы после окончания работы подпрограммы. 2. При выполнении обращения к подпрограмме процессор сохраняет содержимое программного счетчика в стеке, точнее, в его ячейках ОП. 3. Далее в программный счетчик загружается адрес команды, с которого начинается подпрограмма. Процессор приступает к выполнению подпрограммы.

Работа команды возврата RETURN 1. Для возврата из подпрограммы в основную программу служат команды возврата RETURN. 2. Команда возврата из подпрограммы извлекает из стека сохраненный в нем адрес возврата помещают его в программный счетчик. 3. Процессор приступает к выполнению основной программы. 4. Если имели место несколько вложенных вызовов подпрограмм, то возврат произойдет по адресу возврата, сохраненному последнего вызова, (так как для хранения адресов возврата используется стек и последний сохраненный адрес возврата будет вызван первым).

Прочие команды ЭВМ В ЭВМ могут быть дополнительные (специальные) команды. К их числу можно отнести команды остановки центрального процессора, сброса внешних устройств, установки или сброса отдельных признаков и т. д. Итак, на этой лекции были кратко рассмотрены базовые команды, используемые в типичных ЭВМ, и действия реализуемые этими командами.

Важной составной частью архитектуры ЭВМ является система команд. Несмотря на большое число разновидностей ЭВМ, на самом низком («машинном») уровне они имеют много общего. Система команд любой ЭВМ обязательно содержит следующие группы команд обработки информации. 1. Команды передачи данных (перепись), копирующие информацию из одного места в другое. 2. Арифметические операции, которым фактически обязана своим названием вычислительная техника. Конечно, доля вычислительных действий в современном компьютере заметно уменьшилась, но они по-прежнему играют в программах важную роль. Отметим, что к основным арифметическим действиям обычно относятся сложение и вычитание (последнее в конечном счете чаще всего тем или иным способом также сводится к сложению). Что касается умножения и деления, то они во многих ЭВМ выполняются по специальным программам. 3. Логические операции, позволяющие компьютеру анализировать обрабатываемую информацию. Простейшими примерами могут служить сравнение, а также известные логические операции И, ИЛИ, НЕ (инверсия). Кроме того к ним часто добавляются анализ отдельных битов кода, их сброс и установка. 4. Сдвиги двоичного кода влево и вправо. Для доказательства важности этой группы команд достаточно вспомнить правило умножения столбиком: каждое последующее произведение записывается в такой схеме со сдвигом на одну цифру влево. В некоторых частных случаях умножение и деление вообще может быть заменено сдвигом (вспомните, что дописав или убрав ноль справа, т.е. фактически осуществляя сдвиг десятичного числа, можно увеличить или уменьшить его в 10 раз). 5. Команды ввода и вывода информации для обмена с внешними устройствами. В некоторых ЭВМ внешние устройства являются специальными служебными адресами памяти, поэтому ввод и вывод осуществляется с помощью команд переписи. 6. Команды управления, реализующие нелинейные алгоритмы. Сюда прежде всего следует отнести условный и безусловный переход, а также команды обращения к подпрограмме (переход с возвратом). Некоторые ЭВМ имеют специальные команды для организации циклов, но это не обязательно: цикл может быть сведен к той или иной комбинации условного и безусловного переходов. Часто к этой же группе команд относят немногочисленные операции по управлению процессором -типа «останов» или НОП («нет операции»). Иногда их выделяют в особую группу. С ростом сложности устройства процессора увеличивается и число команд, анализирующих состояние управляющих битов и воздействующих на них. Здесь для примера можно назвать биты режима работы процессора и биты управления механизмами прерываний от внешних устройств. В последнее время все большую роль в наборе команд играют команды для преобразования из одного формата данных в другой (например, из 8-битного в 16-битный и т.п.), которые заметно упрощают обработку данных разного типа, но в принципе могут быть заменены последовательностью из нескольких более простых команд. Рассматривая систему команд, нельзя не упомянуть о двух современных взаимно конкурирующих направлениях в ее построении: компьютер с полным набором команд CISC (Complex Instruction Set Computer) и с ограниченным набором - RISC (Reduced Instruction Set Computer). Разделение возникло из-за того, что основную часть времени компьютеру приходится выполнять небольшую часть из своего набора команд, остальные же используются эпизодически (в одной из популярных статей это в шутку сформулировано в виде следующей наглядной аналогии: «20% населения выпивают 80% пива»). Таким образом, если существенно ограничить набор операций до наиболее простых и коротких, зато тщательно оптимизировать их, получится достаточно эффективная и быстродействующая RISC-машина. Правда за скорость придется платить необходимостью программной реализации «отброшенных» команд, но часто эта плата бывает оправданной: например, для научных расчетов или машинной графики быстродействие существенно важнее проблем программирования. Подробнее вопросы, связанные с системой команд современных микропроцессоров, будут рассмотрены ниже в этой главе. Подводя итог, еще раз подчеркнем, что основной набор команд довольно слабо изменился в ходе бурной эволюции ЭВМ. В то же время способы указания адреса расположения информации в памяти претерпели значительное изменение и заслуживают особого рассмотрения. Команда ЭВМ обычно состоит из двух частей - операционной и адресной. Операционная часть (иначе она еще называется кодом операции - КОП) указывает, какое действие необходимо выполнить с информацией. Адресная часть описывает, где используемая информация хранится. У нескольких немногочисленных команд управления работой машины адресная часть может отсутствовать, например, в команде останова; операционная часть имеется, всегда. Код операции можно представить себе как некоторый условный номер в общем списке системы команд. В основном этот список построен в соответствии с определенными внутренними закономерностями, хотя они не всегда очевидны. Адресная часть обладает значительно большим разнообразием и ее следует рассмотреть подробнее. Прежде всего отметим, что команды могут быть одно-, двух- и трехадресные в зависимости от числа участвующих в них операндов. Первые ЭВМ имели наиболее простую и наглядную трехадресную систему команд. Например: взять числа из адресов памяти А1 и А2, сложить их и сумму поместить в адрес A3. Если для операции требовалось меньшее число адресов, то лишние просто не использовались. Скажем, в операции переписи указывались лишь ячейки источника и приемника информации А1 и A3, а содержимое А2 не имело никакого значения. Трехадресная команда легко расшифровывалась и была удобна в использовании, но с ростом объемов ОЗУ ее длина становилась непомерно большой. Действительно, длина команды складывается из длины трех адресов и кода операции. Отсюда следует, например, что для скромного ОЗУ из 1024 ячеек только для записи адресной части одной команды требуется 3*10 = 30 двоичных разрядов, что для технической реализации не очень удобно. Поэтому появились двухадресные машины, длина команды в которых сокращалась за счет исключения адреса записи результата. В таких ЭВМ результат операции оставался в специальном регистре (сумматоре) и был пригоден для использования в последующих вычислениях. В некоторых машинах результат записывался вместо одного из операндов. Дальнейшее упрощение команды привело к созданию одноадресных машин. Рассмотрим систему команд такой ЭВМ на конкретном простом примере. Пусть надо сложить числа, хранящиеся в ячейках с адресами ОЗУ А1 и А2, а сумму поместить в ячейку с адресом A3. Для решения этой задачи одноадресной машине потребуется выполнить три команды: извлечь содержимое ячейки А1 в сумматор; сложить сумматор с числом из А2; записать результат из сумматора в A3. Может показаться, что одноадресной машине для решения задачи потребуется втрое больше команд, чем трехадресной. На самом деле это не всегда так. Попробуйте самостоятельно спланировать программу вычисления выражения А5 = (А1 + А2)*АЗ/А4 и вы обнаружите, что потребуется три трехадресных команды и всего пять одноадресных. Таким образом, одноадресная машина в чем-то даже эффективнее, так как она не производит ненужной записи в память промежуточных результатов. Ради полноты изложения следует сказать о возможности реализации безадресной (нуль-адресной) машины, использующей особый способ организации памяти -стек. Понимание принципов устройства такой машины потребовало бы некоторых достаточно подробных разъяснений. Сейчас безадресные ЭВМ практически не применяются. Поэтому ограничимся лишь упоминанием того факта, что устроенная подобным образом система команд лежала в основе некоторых программируемых микрокалькуляторов (например, типа «БЗ-21» и «БЗ-34» и им подобных). До сих пор в описании структуры машинной команды мы пользовались интуитивным понятием об адресе информации. Рассмотрим теперь вопрос об адресации элементов ОЗУ более подробно и строго. Наиболее просто была организована память в ЭВМ первых двух поколений. Она состояла из отдельных ячеек, содержимое каждой из которых считывалось или записывалось как единое целое. Каждая ячейка памяти имела свой номер, который и получил название адреса. Очевидно, что адреса соседних ячеек ОЗУ являются последовательными целыми числами, т.е. отличаются на единицу. В рассматриваемых ЭВМ использовались данные только одного типа (вещественные числа), причем их длина равнялась длине машинной команды и совпадала с разрядностью памяти и всех остальных устройств машины. Для примера укажем, что ячейка типичной ЭВМ второго поколения состояла из 36 двоичных разрядов. Очень часто программа предназначалась для обработки по одним и тем же формулам определенного количества содержимого последовательно расположенных ячеек (в языках высокого уровня такого рода структуры получили впоследствии название массивов). В ЭВМ первых двух поколении были предусмотрены особые механизмы циклической обработки массивов информации. С этой целью в машинных командах помимо обычных адресов можно было использовать модифицируемые, у которых специальный управляющий бит был установлен в единицу. К помеченным таким образом модифицируемым адресам при выполнении команды прибавлялось значение из специальных индексных ячеек. Меняя содержимое индексных ячеек, можно было получать доступ к различным элементам массива. Особо подчеркнем, что формирование результирующего адреса осуществлялось в УУ в момент исполнения команды, поэтому исходная команда в ОЗУ сохранялась без изменений. Описанный механизм модификации адресов существенно упрощал написание циклических программ, таких как нахождение суммы последовательных ячеек ОЗУ, копирование отдельных участков памяти и т.п. В ЭВМ третьего поколения идеология построения памяти существенно изменилась: минимальная порция информации для обмена с ОЗУ была установлена равной 8 двоичных разрядов, т.е. один байт. Стало возможным обрабатывать несколько типов данных: символы текста (1 байт), целые числа (2 байта), вещественные числа обычной или двойной точности (4 или 8 байт соответственно). В связи с этим была введена новая условная единица измерения информации - машинное слово. Оно равнялось 4 байтам и соответствовало длине стандартного вещественного числа. Все объемы информации начали измеряться в единицах, кратных слову: двойное слово, полуслово и т.п. Естественно, что адрес (номер ячейки ОЗУ) в машинах с байтовой организацией стал относится к отдельному байту; байты памяти имеют возрастающие на единицу номера. Слово состоит из нескольких последовательно расположенных байтов. В качестве адреса слова удобно принимать адрес одного из образующих его байтов (обычно используется младший байт, имеющий наименьший номер). Таким образом, адреса слов меняются уже не через единицу; их приращение зависит от длины машинного слова в байтах и равняется четырем. Размер машинного слова был, по-видимому, выбран исходя из форматов обрабатываемой информации, а не в связи с разрядностью каких-либо устройств. Для подтверждения этого приведем несколько фактов о типичных ЭВМ третьего поколения из семейства ЕС. Арифметико-логическое устройство модели «ЕС-1022» имело 16 двоичных разрядов, «ЕС-1033» - 32 разряда, а «ЕС-1050» - 64 разряда. В то же время за одно обращение к оперативной памяти в «ЕС-1022» и «ЕС-1033» выбиралось 4 байта, в «ЕС-1050» - 8 байт (а в «ЕС-1045» - 16 байт). Таким образом, разнообразие цифр свидетельствует, что 32 разряда (4 байта) не являлись каким-то технически выделенным объемом информации. В машинах третьего поколения появились и еще несколько особенностей: разная длина команд в зависимости от способа адресации данных, наличие специальной сверхоперативной регистровой памяти, вычисление эффективного адреса ОЗУ как суммы нескольких регистров и т.п. Все это получило дальнейшее развитие в компьютерах четвертого поколения, для которых разрядность микропроцессора стала одной из важнейших характеристик. Рассмотрение особенностей строения памяти ЭВМ четвертого поколения отложим до следующего раздела.

Общие сведения. Фиксированный набор команд конкретного микропроцессора называют системой команд. Функциональные способности процессора определяются совокупностью базовых команд с различными кодами операций. Общее число команд (кодов операции) в системе всегда больше числа базовых команд. Например, к базовой команде относится команда MOV dst, scr, которая обеспечивает функцию пересылки данных из источника scr в приемник dst. Таких команд в системе может быть очень много. Система команд представляется в виде таблицы. Таблица может иметь различную структуру, однако обычно она содержит следующие сведения о команде:

  • мнемоническое обозначение команды, представляющее собой сокращенную запись названия команды. Для этого используются 3–4 латинские буквы названия операции, выполняемой командой. Мнемоника является удобной формой представления кода операции команды. Также она используется при описании команды на языке ассемблера. Программа ассемблера преобразует мнемоническое обозначение кодов операции в соответствующие двоичные эквиваленты;
  • шестнадцатеричные коды команд;
  • влияние выполненной команды на флаги регистра состояния программы;
  • число байтов в команде и число машинных циклов и тактов , затрачиваемых на выполнение команды;
  • словесное и (или) символьное описание выполняемой командой операции.

Часто для удобства систему команд разбивают на отдельные группы по функциональному признаку. Например, систему команд микропроцессора КР580ВМ80, содержащую 78 базовых команд, разбивают на 5 групп . Ниже приведено краткое описание функциональных особенностей команд каждой группы.

Команды имеют длину от 1 до 3 байт. Код операции всегда размещен в первом байте команды. Второй байт команды отводится под непосредственный операнд или адрес порта, второй и третий байты являются адресом ячейки памяти. Команды допускают явное задание только одного адреса памяти, т. е. относятся к классу одноадресных команд. При описании команд используются следующие обозначения:

  • src, dst – 8-разрядные источник и приемник. Источником или приемником может быть один из 8-разрядных регистров А, В, С, D, Е, Н или ячейка памяти М, доступ к которой обеспечивает регистровая пара Н L, содержащая адрес пересылаемого байта. В коде операции источник src и приемник dst указаны в виде трехразрядного кода SSS и DDD;
  • RP – двухразрядный код регистровых пар ВС, DE, Н L, А + РП (регистр признаков) или указателя стека SP;
  • data, data 16 – 8- и 16-разрядный операнд;
  • addr, port – 16-разрядный адрес памяти и 8-разрядный адрес порта;
  • (addr), (SP) – содержимое ячейки памяти по указанным адресам;
  • (SP)+, -(SP) – операции постинкремента и предекремента со стеком. Команды пересылки. Г руппа содержит наиболее часто встречающиеся в программах команды пересылки данных, источниками и приемниками которых могут быть внутренние регистры процессора, основная память и внешние устройства. Команды не оказывают воздействия на флаги регистра состояния.

Мнемоника команды отражает особенности выполняемой операции и способ адресации. Например, мнемоника MOV, MVI указывает на перемещение (Move) операндов; LDA, LDAX, LXI, LHLD – на загрузку (Load); STA, STAX, SHLD – на сохранение (Save). Для операций с байтами используется мнемоника MOV, MVI, LDA, STA, LDAX, STAX; для операций со словами– LXI, LHLD, SHLD. Прямая адресация при загрузке и сохранении содержимого аккумулятора отражается мнемоникой LDA и STA, косвенная – мнемоникой LDAX и STAX.

Команды этой группы сведены в табл. 5.8. Они позволяют осуществить:

  • операцию пересылки данных между источником (src) и приемником (dst), которая записывается в виде dst ← src (команда 1). Источниками и приемниками являются внутренние регистры общего назначения (А, В, С, D, Е, Н) и ячейка памяти М. Допускается любая комбинация, за исключением М ← М, т. е. перезагрузка ячейки памяти М не разрешается;
  • загрузку регистров общего назначения и ячейки М вторым байтом В2 (команда 2) и регистровых пар ВС, DE, HL (в том числе указателя стека SP) вторым В2 и третьим В3 байтами (команда 3), причем всегда В3 загружается в старшие регистры (В, D, Н) пары, В2 – в младшие регистры (С, Е,L);
  • пересылку данных между аккумулятором А и основной памятью (команды 4÷7), между аккумулятором и внешним устройством (команды 8, 9). При пересылке между аккумулятором А и памятью адреса ячеек памяти располагаются в регистровых парах ВС, DE или в третьем и втором байтах (В3В2) команды;

Таблица 5.8

Мнемоника

Выполняемая

операция

операции

dst src

А (addr)

Примечания: RP – 2-разрядный код регистровых пар ВС, DE, HL, А + РП (регистр признаков) или указателя стека SP; Б – байты, U – циклы, Т – циклы.

  • пересылку данных между парой регистров HL и памятью (команды 10, 11). При этом операнд из регистра L пересылается в ячейку с адресом В3В2, образованным из третьего и второго байта команды, а из регистра Н – по адресу на единицу больше. При обратной пересылке сначала из ячейки с адресом В3В2 в регистр L загружается первый операнд, затем из ячейки с адресом В3В2+1 в регистр Н – второй;
  • пересылку данных между парами регистров, включая пару из аккумулятора А и регистра признаков РП, и стеком (команды 12, 13). При записи в стек содержимое указателя стека уменьшается на единицу, и по адресу SP-1 загружается первый операнд в один из регистров В, D, Н или А, затем содержимое указателя стека снова уменьшается на единицу, и по адресу SP–2 загружается второй операнд из регистра С, Е, L или РП. При выводе из стека сначала в один из регистров С, Е, L или РП загружается операнд, хранящийся в ячейке с адресом SP указателя стека. Затем содержимое увеличивается на единицу, из ячейки с адресом SP + 1 второй операнд загружается в один из регистров В, D, Н или А, и содержимое указателя стека вновь увеличивается на единицу и принимает значение SP + 2. Следует отметить, что при загрузке регистровой пары А, РП (ее код RP = 11) из стека изменяется состояние триггеров регистра признаков РП. Это единственная команда (из всех команд пересылки данных), которая влияет на признаки;
  • пересылку содержимого пары регистров HL в указатель стека SP и программный счетчик PC (команды 14, 15);
  • обмен данными между парами регистров HL и DE, парой регистров HL и стеком (команды 16, 17). При обмене содержимое регистровой пары HL помещается в пару DE или стек, а содержимое регистровой пары DE или стека – в пару HL. Операция обмена обозначается символом "↔".

Арифметические команды. Вычислительные возможности микропроцессора ограничены простыми командами сложения и вычитания 8-разрядных операндов. Операции умножения и деления реализуются программным способом. Набор команд (табл. 5.9) позволяет выполнить:

  • сложение и вычитание 8-разрядных операндов с учетом и без учета переноса (команды l÷8), при этом один из операндов всегда находится в аккумуляторе, а второй – в одном из регистров общего назначения (ячейке памяти М) или является вторым байтом команды. Команды, учитывающие значение сигнала переноса С регистра признаков, используются при сложении и вычитании многобайтных чисел. Для этой же цели можно использовать команду 9 сложения содержимого пары регистров HL с 16-разрядным адресуемым регистром;
  • арифметическое сравнение содержимого аккумулятора А с содержимым одного из регистров общего назначения Rn (ячейкой памяти М) или вторым байтом В2 (команды 10+11). При этом выполняется вычитание А – Rn или А – В2. Результат сравнения определяется по сигналам триггеров регистра признаков: если Z = 1, то A = Rn или А = В2; если S = 1, то А > Rn или А > В2. Содержимое аккумулятора не изменяется;
  • увеличение и уменьшение на 1 (инкремент и декремент) содержимого регистров и регистровых пар. При программировании часто

Таблица 5.9

Мнемоника

Выполняемая операция

операции

А ← A + src + C

A ←A – src – C

А ← A + data + CY

A ← A – data

А ← A – data – CY

A – scr (сравнение)

A – scr (сравнение)

dst ← dst – 1

A ← 2/10-коррекция A

возникает необходимость увеличения или уменьшения на единицу значения операнда. Для этого можно использовать операции сложения А + В2 или вычитания А – В2, записав в программе В2 = 1. Однако в системе команд предусмотрены специальные команды (12-5-15) инкремента и декремента 8- и 16-разрядных операндов;

десятичную коррекцию содержимого аккумулятора после выполнения арифметических операций в двоично-десятичном коде 8421 (команда 16). При этом содержимое аккумулятора представляется в виде двух полубайтов, каждый из которых соответствует десятичной цифре. Коррекция производится блоком десятичной коррекции по изложенным в § 5.2 правилам (с. 99).

Команды логических операций. Команды этой группы (табл. 5.10) позволяют реализовать:

  • двуместные логические операции умножения (И), сложения (ИЛИ) и исключающее ИЛИ над 8-разрядными операндами (команды 1÷6). Логические операции являются поразрядными и выполняются независимо для каждого из восьми бит операндов. Неадресуемый операнд находится в аккумуляторе, туда же поступает результат операции. Вторым операндом является содержимое одного из регистров общего назначения (ячейки памяти М) или второй байт команды;
  • инвертирование содержимого аккумулятора А (команда 7);
  • флаговые команды (8, 9) инвертирования и установки бита С триггера переноса регистра признаков;
  • два вида циклических сдвигов содержимого аккумулятора влево и вправо (команды Юл-13). Первый вид сдвигов (сдвиги без переноса) реализуется путем замыкания в кольцо всех триггеров аккумулятора, при втором виде сдвигов (сдвиги с переносом, или расширенные сдвиги) в кольцо дополнительно вводится триггер переноса С регистра признаков. Отсутствующие в системе команд логические и арифметические сдвиги в обе стороны можно реализовать предварительной установкой бита С в 0 или 1 совместно с расширенным сдвигом.

Команды передачи управления. При передаче управления нарушается последовательный ход выборки содержимого ячеек памяти и процессор адресуется в другую область памяти. Выделяют

Таблица 5.10

Мнемоника

Выполняемая

операция

операции

А ← А л src – умножение

А ← A v src – сложение

А ← A © src – искл. ИЛ И

А ← А л data

А ← A © data

три вида команд передачи управления: команды перехода по заданному адресу (JMP), вызова подпрограммы (CALL) и возврата из подпрограммы (RET). К ним относятся безусловные и условные команды. Условные команды осуществляют переход, вызов подпрограммы и возврат из подпрограммы в зависимости от состояния флага, задаваемого значением сигнала одного из четырех триггеров Z, С, S, Р регистра признаков (или состояния). В процессоре 8080 используются оба состояния (1 и 0) четырех флагов (Z, С, Р, S), позволяющих получить 8 вариантов каждой команды (табл. 5.11). Обозначение признака (условия) указывается в мнемонике условных команд J**, С**, R** вместо звездочек (**). Например, признаку NC, для которого условия перехода считаются выполненными при С = 0, соответствует команда JNC.

В операциях как условного, так и безусловного перехода и вызова подпрограмм используется полный прямой 16-разрядный адрес, обеспечивающий передачу управления в любую точку 64-килобайтовой области пространства памяти.

Таблица 5.11

Рассмотрим особенности команд, представленных в табл. 5.12.

С помощью трехбайтной команды JМР реализуется безусловная передача управления. При этом второй и третий байты команды (адрес addr продолжения программы) заносятся в счетчик команд PC (содержимое В3 в старшие разряды, В2 – в младшие).

Команды условной передачи управления J** реализуют разветвление вычислительного процесса в зависимости от условия. При выполнении условия (ДА) в счетчик PC заносится второй и третий байты команды, в противном случае (НЕТ) содержимое счетчика увеличивается на 3 единицы. Продолжение программы осуществляется по адресу, находящемуся в счетчике команд, т.е. со следующей команды.

Таблица 5.12

Мнемоника

Выполняемая

операция

операции

Команды безусловного (CALL) и условного (С**) вызовов используются для обращения к подпрограммам, хранящимся в другой части основной памяти. Эти команды всегда предусматривают возможность возврата в прерванную основную программу путем сохранения в стеке содержимого программного счетчика PC. После выполнения операции возврата:

  • при безусловном вызове или выполнении условия второй и третий байты команды заносятся в программный счетчик PC;
  • при невыполнении условия содержимое программного счетчика увеличивается на 3 единицы.

Продолжение программы осуществляется по адресу, находящемуся в счетчике команд PC.

В наборе имеются команды, позволяющие реализовать безусловную (RET) и условную (К**) передачу управления для возврата в прерванную программу. При выполнении этих команд адрес возврата переписывается из стека в программный счетчик PC, для чего используется постинкрементный способ адресации. При невыполнении условия возврата (для команды с условием) осуществляется переход к очередной команде путем увеличения на единицу содержимого программного счетчика PC. Команды возврата являются однобайтными, так как в указателе стека SP хранится адрес ячейки стека с адресом возврата в прерванную программу.

Команда PCHL загружает в программный счетчик PC адрес, хранящийся в регистровой паре HL.

Команды общего управления. Команды этой группы (табл. 5.13) используются для задания режима работы микропроцессора. Команда RST применяется для повторного пуска микропроцессора и при обслуживании прерываний. При ее выполнении:

  • содержимое программного счетчика переносится в стек по адресам SP – 1, SP – 2, формируемым в указателе стека, что обеспечивает возврат к основной программе;
  • в программный счетчик засылается 16-разрядный адрес начала одной из 8 программ обслуживания прерывания.

Таблица 5.13

Мнемоника

Выполняемая

операция

операции

–(SP) ← PC ← 8×n, n = 0 – 7

Разрешение прерываний

Запрет прерываний

Чтение маски

Установка маски

Нет операции

Команда разрешения прерывания EI устанавливает триггер INTE разрешения прерываний в единичное состояние, при этом микропроцессор реагирует на запросы прерываний. Команда запрещения прерываний DI устанавливает триггер INTE в нулевое состояние. Пустая команда NOP используется в циклах программируемой задержки. Команда останова HLT вызывает прекращение выполнения программы.

^

2.8 Типы и форматы команд


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

    • команды пересылки данных;

    • команды арифметической и логической обработки;

    • команды работы со строками;

    • команды SIMD;

    • команды преобразования;

    • команды ввода/вывода;

    • команды управления потоком команд.
^

2.8.1 Команды пересылки данных


Это наиболее распространенный тип машинных команд. В таких командах должна содержаться следующая информация:

  • адреса источника и получателя операндов – адреса ячеек памяти, номера регистров процессора или информация о том, что операнды расположены в стеке;

  • длина подлежащих пересылке данных (обычно в байтах или словах), заданная явно или косвенно;

  • способ адресации каждого из операндов, с помощью которого содержимое адресной части команды может быть пересчитано в физический адрес операнда.
Рассматриваемая группа команд обеспечивает передачу информации между процессором и ОП, внутри процессора и между ячейками памяти. Пересылочные операции внутри процессора имеют тип «регистр-регистр». Передачи между процессором и памятью относятся к типу «регистр-память», а пересылки в памяти - к типу «память-память».
^

2.8.2 Команды арифметической и логической обработки


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

Помимо вычисления результата выполнение арифметических и логических операций сопровождается формированием в АЛУ признаков (флагов), характеризующих этот результат. Наиболее часто фиксируются такие признаки, как:


  • Z (Zero) - нулевой результат;

  • N (Negative) - отрицательный результат;

  • V (oVerflow) - переполнение разрядной сетки;

  • С (Carry) - наличие переноса.
К стандартному набору операций над целыми числами, представленными в форме с фиксированной запятой, следует отнести:

  • двухместные арифметические операции (операции с двумя операндами): сложение, вычитание, умножение и деление;

  • одноместные арифметические операции (операции с одним операндом): вычисление абсолютного значения (модуля) операнда, изменение знака операнда;

  • операции сравнения, обеспечивающие сравнение двух целых чисел и выработку признаков, характеризующих соотношение между сопоставляемыми величинами (=, <>, >, <, <=, >=).
Часто этот перечень дополняют такими операциями, как вычисление остатка от целочисленного деления, сложение с учетом переноса, вычитание с учетом заема, увеличение значения операнда на единицу (инкремент ), уменьшение значения операнда на единицу (декремент ).

Отметим, что выполнение арифметических команд может дополнительно сопровождаться перемещением данных из устройства ввода в АЛУ или из АЛУ на устройство вывода.

Для работы с числами, представленными в форме с плавающей запятой, в АСК большинства машин предусмотрены:


  • основные арифметические операции;

  • операции сравнения, обеспечивающие сравнение двух вещественных чисел с выработкой признаков;

  • операции преобразования: формы представления (между фиксированной и плавающей запятой), формата представления (с одинарной и двойной точностью).
Стандартная система команд ЭВМ содержит команды для выполнения различных логических операций над отдельными битами слов или других адресуемых единиц. Такие команды предназначены для обработки символьных и логических данных. Минимальный набор поддерживаемых логических операций - это «НЕ», «И», «ИЛИ» и сложение по модулю 2.

В дополнение к побитовым логическим операциям, практически во всех АСК предусмотрены команды для реализации операций логического, арифметического и циклического сдвигов.

При логическом сдвиге влево или вправо сдвигаются все разряды слова. Биты, вышедшие за пределы разрядной сетки, теряются, а освободившиеся позиции заполняются нулями.

При арифметическом сдвиге данные трактуются как целые числа со знаком, причем бит знака не изменяет положения. При сдвиге вправо освободившиеся позиции заполняются значением знакового разряда, а при сдвиге влево - нулями. Арифметические сдвиги позволяют ускорить выполнение некоторых арифметических операций. Так, если числа представлены двоичным дополнительным кодом, то сдвиги влево и вправо эквивалентны соответственно умножению и делению на 2.

При циклическом сдвиге смещаются все разряды слова, причем значение разряда, выходящего за пределы слова, заносится в позицию, освободившуюся с противоположной стороны, то есть потери информации не происходит. Одно из возможных применений циклических сдвигов – это перемещение интересующего бита в крайнюю левую (знаковую) позицию, где он может быть проанализирован как знак числа.

Для работы со строками в АСК обычно предусматриваются команды, обеспечивающие перемещение, сравнение и поиск строк. В большинстве машин перечисленные операции просто имитируются за счет других команд.

^ Команды преобразования осуществляют изменение формата представления данных. Примером может служить преобразование из десятичной системы счисления в двоичную или перевод 8-разрядного кода символа из кодировки ASCII в кодировку EBCDIC, и наоборот.

2.8.3 SIMD-команды

Название данного типа команд представляет собой аббревиатуру от Single Instruction Multiple Data - буквально «одна инструкция - много данных». В отличие от обычных команд, оперирующих двумя числами, SIMD-команды обрабатывают сразу две группы чисел (в принципе их можно называть групповыми командами). Операнды таких команд обычно представлены в одном из упакованных форматов.

Идея SIMD-обработки была выдвинута в Институте точной механики и вычислительной техники им. С.А. Лебедева в 1978 году в рамках проекта «Эльбрус-1». С 1992 года команды типа SIMD становятся неотъемлемым элементом АСК микропроцессоров фирм Intel и AMD, Поводом послужило широкое распространение мультимедийных приложений. Видео, трехмерная графика и звук в ЭВМ представляются большими массивами данных, элементы которых чаше всего обрабатываются идентично. Так, при сжатии видео и преобразовании его в формат MPEG один и тот же алгоритм применяется к тысячам битов данных. В трехмерной графике часто встречаются операции, которые можно выполнить за один такт: интерполирование и нормировка векторов, вычисление скалярного произведения векторов, интерполяция компонентов цвета и т. д. Включение SIMD-команд в АСК позволяет существенно ускорить подобные вычисления.

Первой на мультимедийный бум отреагировала фирма Intel, добавив в систему команд своего микропроцессора Pentium ММХ 57 SIMD-команд. Название МMX (MultiMedia eXtention – мультимедийное расширение) разработчики обосновывали тем, что при выборе состава новых команд были проанализированы алгоритмы, применяемые в различных мультимедийных приложениях. Команды ММХ обеспечивали параллельную обработку упакованных целых чисел. При выполнении арифметических операций каждое из чисел, входящих в группу, рассматривается как самостоятельное, без связи с соседними числами. Учитывая специфику обрабатываемой информации, команды ММХ реализуют так называемую арифметику с насыщением: если в результате сложения образуется число, выходящее за пределы отведенных под него позиций, оно заменяется наибольшим двоичным числом, которое в эти позиции вмещается.

Следующим шагом стало создание новых наборов SIMD-команд, работающих также с операндами, представленными в виде упакованных чисел с плавающей запятой. Такие команды в соответствующих приложениях повышают производительность процессора примерно вдвое. Первой подобную технологию в середине 1998 года предложила фирма AMD. Это мультимедийное расширение включало в себя 21 SIMD-команду и получило название 3DNow!. Расширение 3DNow! в дополнение к SIMD-обработке целочисленной информации типа ММХ позволяло оперировать парой упакованных чисел в формате с плавающей запятой.

Полугодом позже фирма Intel ввела в свои микропроцессоры так называемые потоковые SIMD-команды, обозначив их аббревиатурой SSE - Streaming SIMD Extension (потоковая обработка по принципу «одна команда - много данных»). Сначала это были 70 команд в микропроцессоре Pentium III. Команды дополняли групповые целочисленные операции МMX и расширяли их за счет групповых операций с 32-разрядными вещественными числами.
^

2.8.4 Команды ввода/вывода


Команды этой группы могут быть подразделены на команды управления периферийным устройством (ПУ), проверки его состояния, ввода и вывода.

Команды управления периферийным устройством служат для запуска ПУ и указания ему требуемого действия. Трактовка подобных инструкций зависит от типа ПУ.

Команды проверки состояния ввода/вывода применяются для тестирования различных признаков, характеризующих состояние модуля ввода/вывода и подключенных к нему ПУ. Благодаря этим командам центральный процессор может выяснить, включено ли питание ПУ, завершена ли предыдущая операция ввода/вывода, возникли ли в процессе ввода/вывода какие-либо ошибки и т. п.

Собственно обмен информацией с ПУ обеспечивают команды ввода и вывода. Команды ввода предписывают модулю ввода/вывода получить элемент данных (байт или слово) от ПУ и поместить его на шину данных, а команды вывода - заставляют модуль ввода/вывода принять элемент данных с шины данных и переслать его на ПУ.
^

2.8.5 Команды управления системой


Команды, входящие в эту группу, являются привилегированными и могут выполняться, только когда центральный процессор ЭВМ находится в привилегированном состоянии или выполняет программу, находящуюся в привилегированной области памяти (обычно привилегированный режим используется лишь операционной системой). Так, лишь эти команды способны считывать и изменять состояние ряда регистров устройства управления.
^

2.8.6 Команды управления потоком команд


Концепция фон-неймановской вычислительной машины предполагает, что команды программы, как правило, выполняются в порядке их расположения в памяти. Для получения адреса очередной команды достаточно увеличить содержимое счетчика команд на длину текущей команды. В то же время основные преимущества ЭВМ заключаются именно в возможности изменения хода вычислении в зависимости от возникающих в процессе счета результатов. С этой целью в АСК вычислительной машины включаются команды, позволяющие нарушить естественный порядок следования и передать управление в иную точку программы. В адресной части таких команд содержится адрес точки перехода (адрес той команды, которая должна быть выполнена следующей). Переход реализуется путем загрузки адреса точки перехода в счетчик команд (вместо увеличения содержимого этого счетчика на длину команды).

В системе команд ЭВМ можно выделить три типа команд, способных изменить последовательность вычислений:


  • безусловные переходы;

  • условные переходы (ветвления);

  • вызовы процедур и возвраты из процедур.
Несмотря на то что присутствие в программе большого числа команд безусловного перехода считается признаком плохого стиля программирования, такие команды обязательно входят в АСК любой ЭВМ. Для их обозначения в языке ассемблера обычно используется английское слово jump (прыжок). Команда безусловного перехода обеспечивает переход по заданному адресу без проверки каких-либо условий.

^ Условный переход происходит только при соблюдении определенного условия, в противном случае выполняется следующая по порядку команда программы. Большинство производителей ЭВМ в своих ассемблерах обозначают подобные команды словом branch (ветвление). Условием, на основании которого осуществляется переход, чаще всего выступают признаки результата предшествующей арифметической или логической операции. Каждый из признаков фиксируется в своем разряде регистра флагов процессора. Возможен и иной подход, когда решение о переходе принимается в зависимости от состояния одного из регистров общего назначения, куда предварительно помещается результат операции сравнения. Третий вариант - это объединение операций сравнения и перехода в одной команде.

В системе команд ЭВМ для каждого признака результата предусматривается своя команда ветвления (иногда - две: переход при наличии признака и переход при его отсутствии). Большая часть условных переходов связана с проверкой взаимного соотношения двух величин или с равенством (неравенством) некоторой величины нулю. Последний вид проверок используется в программах наиболее интенсивно.

Процедурный механизм базируется на командах вызова процедуры, обеспечивающих переход из текущей точки программы к начальной команде процедуры, и командах возврата из процедуры, для возврата в точку, непосредственно расположенную за командой вызова. Такой режим предполагает наличие средств для сохранения текущего состояния содержимого счетчика команд в момент вызова (запоминание адреса точки возврата) и его восстановления при выходе из процедуры,
^

2.8.7 Форматы команд


Типовая команда, в общем случае, должка указывать:


  • подлежащую выполнению операцию;

  • адреса исходных данных (операндов), над которыми выполняется операция;

  • адрес, по которому должен быть помещен результат операции.
В соответствии с этим команда состоит из двух частей: операционной и адресной, как показано на рисунке 2.24.

Рисунок 2.24 – Структура машинной команды
Формат команды определяет ее структуру, то есть количество двоичных разрядов, отводимых под всю команду, а также количество н расположение отдельных полей команды. Полем называется совокупность двоичных разрядов, кодирующих составную часть команды. При разработке АСК выбор формата команды влияет на многие характеристики будущей машины. Оценивая возможные форматы, нужно учитывать следующие факторы:


  • общее число различных команд;

  • общую длину команды;

  • тип полей команды (фиксированной или переменной длины) и их длина;

  • простоту декодирования;

  • адресуемость и способы адресации;

  • стоимость оборудования для декодирования и исполнения команд.
Длина команды – это важнейшее обстоятельство, влияющее на организацию и емкость памяти, структуру шин, сложность и быстродействие ЦП. С одной стороны, удобно иметь в распоряжении мощный набор команд, то есть как можно больше кодов операций, операндов, способов адресации, и максимальное адресное пространство. Однако все это требует выделения большего количества разрядов под каждое поле команды, что приводит к увеличению ее длины. Вместе с тем, для ускорения выборки из памяти желательно, чтобы команда была как можно короче, а ее длина была равна или кратна ширине шины данных. Для упрощения аппаратуры и повышения быстродействия ЭВМ длину команды обычно выбирают кратной байту, поскольку в большинстве ЭВМ основная память организована в виде 8-битовых ячеек.

В рамках системы команд одной ЭВМ могут использоваться разные форматы команд. Обычно это связано с применением различных способов адресации. В таком случае операционная часть команды содержит поле кода операции (КОп) и поле для задания способа адресации (СА).

Общая длина команды R K может быть определена следующим соотношением:

,

где l – количество адресов в команде; R Ai – количество разрядов для записи i -го адреса; R КОп – разрядность поля кода операции; R СА – разрядность поля способа адресации.

Количество двоичных разрядов, отводимых под код операции , выбирается так, чтобы можно было представить любую из операций. Если система команд предполагает N КОп различных операций, то минимальная разрядность поля кода операции определяется следующим образом:
R КОп = int(log 2 (N КОп )),
где int означает округление в большую сторону до целого числа.

При заданной длине кода команды приходится искать компромисс между разрядностью поля кода операции и адресного поля. Большее количество возможных операций предполагает длинное поле кода операции, что ведет к сокращению адресного поля, то есть к сужению адресного пространства. Для устранения этого противоречия иногда длину поля кода операции варьируют. Изначально под код операции отводится некое фиксированное число разрядов, однако для отдельных команд это поле расширяется за счет нескольких битов, отнимаемых у адресного поля.

В адресной части команды содержится информация о местонахождении исходных данных и месте сохранения результата операции. Обычно местонахождение каждого из операндов и результата задается в команде путем указания адреса соответствующей ячейки основной памяти или номера регистра процессора. Принципы использования информации из адресной части команды определяет система адресации. Система адресации задает число адресов в команде команды и принятые способы адресации

Разрядности полей и рассчитываются по формулам:
R Ai = int(log 2 (N i )), R CA = int(log 2 (N CA )),
где N i , – количество ячеек памяти, к которому можно обратиться с помощью i -ro адреса; N СА – количество способов адресации.

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

Чаще всего необходимость в четвертом адресе отпадает, поскольку команды располагаются в памяти в порядке их выполнения, и адрес очередной команды может быть получен за счет простого увеличения адреса текущей команды в счетчике команд. Это позволяет перейти к трехадресному формату команды. Требуется только добавить в систему команд ЭВМ команды, способные изменять порядок вычислений.

К сожалению, и в трехадресном формате длина команды может оказаться весьма большой. Так, если адрес ячейки основной памяти имеет длину 32 бита, а длина кода операции – 8 бит, то длина команды составит 104 бита (13 байт).

Рисунок 2.25 – Четырехадресный формат команды
Если по умолчанию взять в качестве адреса результата адрес одного из операндов (обычно второго), то можно обойтись без третьего адреса, и в итоге получаем двухадресный формат команды. Естественно, что в этом случае соответствующий операнд после выполнения операции теряется.

Команду можно еще более сократить, перейдя к одноадресному формату, что возможно при выделении определенного стандартного места для хранения первого операнда и результата. Обычно для этой цели используется специальный регистр-аккумулятор центрального процессора (ЦП).

Применение единственного регистра для хранения одного из операндов и результата является ограничивающим фактором, поэтому помимо аккумулятора часто используют и другие регистры ЦП. Так как число регистров к ЦП невелико, для указания одного из них в команде достаточно иметь сравнительно короткое адресное поле. Соответствующий формат носит название полутораадресного или регистрового формата.

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

При выборе количества адресов в адресной части команды обычно руководствуются следующими критериями:


  • емкостью запоминающего устройства, требуемой для хранения программы;

  • временем выполнения программы;

  • эффективностью использования ячеек памяти при хранении программы.
Время выполнения одной команды складывается из времени выполнения операции и времени обращения к памяти. Для трехадресной команды последнее суммируется из четырех составляющих времени:

  • выборки команды;

  • выборки первого операнда;

  • выборки второго операнда;
Одноадресная команда требует двух обращений к памяти:

  • выборки команды;

  • выборки операнда.
Как видно, на выполнение одноадресной команды затрачивается меньше времени, чем на обработку трехадресной команды, однако для реализации одной трехадресной команды, как правило, нужно три одноадресных. Этих соображении тем не менее не достаточно, чтобы однозначно отдать предпочтение тому или иному варианту адресности. Определяющим при выборе является тип алгоритмов, на преимущественную реализацию которых ориентирована конкретная ЭВМ.
просмотров