Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


Базовые типы команд




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

С=А+В

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

С ← [А] + [В]

Для выполнения этого действия содержимое памяти по адресам А и В должно быть переслано в процессор, где будет вычислена сумма. Полученная сумма долж­на быть отправлена обратно в память и записана по адресу С.

Для начала давайте предположим, что это действие выполняется посредством одной машинной команды. Эта команда содержит адреса трех операндов: А, В и С. Символически такую трехадресную команду можно представить как

Add C,A,B

Команда Add образована от слова Addition (сложение). Операнды А и В называются исходными операндами, а С — операндом назначе­ния или результирующим операндом. В общем случае команда этого типа имеет такой формат:

Операция МестоНазначения,Источник1,Источник2

Если для указания адреса одного операнда в памяти необходимо k бит, в зако­дированной форме данной инструкции для адресов должно быть отведено 3k бит и еще сколько-то бит для кода самой операции Add. В случае современного про­цессора с 32-разрядным адресным пространством трехадресная команда слишком громоздка для одного слова разумной длины. Поэтому для представления команд такого типа обычно используется формат длиной в несколько слов.

Для выполнения этой же задачи в качестве альтернативы можно использовать несколько более простых команд, с одним-двумя операндами. Предположим, что процессором поддерживаются двухадресные команды в виде:

Операция МестоНазначения,Источник

Команда Add такого типа

Add A,B

будет выполнять операцию A ← [А] + [В]. После вычисления суммы результат бу­дет переслан обратно в память и сохранен по адресу A с заменой исходных данных, хранившихся по этому адресу. Это означает, что A является и исходным, и ре­зультирующим операндом команды.

В случае двухадресных команд для решения нашей задачи одной двухадресной команды недостаточно. Потребуется еще одна двухадресная команда, которая копирует значение из одного места па­мяти в другое. Вот она:

Mov С,A

Эта команда выполняет операцию C ← [A], оставляя содержимое памяти по адресу A неизменным. Команда образована от слова Move, означающего «перемещение», использовано здесь не совсем точно: более уместно было бы назвать эту команду Copy (копиро­вание). Однако именно это, первое, название команды давно закрепилось в ком­пьютерном мире. Операция С ← [А] + [В] может быть выполнена помощью двух команд и в такой последовательности:

Mov C,B

Add C,A

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

В процессоре Intel только двухадресные и одноадресные команды и результирующий операнд все­гда задается первым.

Следует отметить одно очень важное обстоятельство. Если делать арифметические операции с данными, которые находятся в памяти, то время выполнения таких операций будет очень большим, а процессор будет работать с остановками на то время, пока не отработает память по пересылке исходных данных из памяти и результата в память. Поэтому в некоторых современных процессорах арифметические операции выполняются с данными, которые находятся в регистрах процессора, а для пересылки данных в регистры и назад в память используются команды Load и Store. Команда Mov тоже может использоваться для пересылки данных из памяти в регистр процессора и из реги­стра процессора в память, поскольку направление пе­ресылки в ней задается просто порядком операндов. Поэтому команда

Mov A,Ri означает то же, что и команда

Store A,Ri,

а команда

Mov Ri,A — то же, что и команда

Load Ri,A

В процессоре Intel нет команд Load и Store, вместо них используется команда Mov.

В тех процессорах, которые производят арифметические операции только над содержимым регистров, задача С = А + В может быть выполнена путем примене­ния такой последовательности команд:

Mov Ri,A

Mov Rj,B

Add Ri,Rj

Mov C,Ri,

Если процессор позволяет использовать операнды, из которых один находит­ся в памяти, а все остальные в регистрах (например Intel), то эту же задачу можно реализовать и по-другому:

Mov Ri,A

Add Ri,B

Mov C,Ri

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

Итак, теперь вы имеете представление об одно-, двух- и трехадресных коман­дах и знаете о возможности использовать команды, в которых все операнды зада­ются неявно. Такие команды применяются в машинах, хранящих операнды в структуре, которая называется стеком. А сами команды называются ноль-адрес­ными. Концепция стека вводится в разделе 5.10.


Поделиться:

Дата добавления: 2015-01-29; просмотров: 175; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.007 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты