Операции с целыми числами

К стандартному набору операций над целыми числами, представленными в форме с фиксированной запятой, следует отнести:

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

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

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

Часто этот перечень дополняют такими операциями, как вычисление остатка от целочисленного деления, сложение с учетом переноса, вычитание с учетом займа, увеличение значения операнда на единицу (инкремент), уменьшение значения операнда на единицу (декремент).

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

Операции с числами в форме с плавающей запятой

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

· основные арифметические операции: сложение, вычитание, умножение и деление;

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

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

Логические операции

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

Операции сдвигов

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

Операции с целыми числами - student2.ru

Рис. 30 Варианты операций сдвига

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

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

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

Операции с десятичными числами

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

SIMD-команды

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

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

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

Операции с целыми числами - student2.ru

Рис. 31 Сложение с насыщением упакованных целых чисел

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

В дальнейшем наборы SIMD-команд стали обозначать аббревиатурой SSE — Streaming SIMD Extension (потоковая обработка по принципу «одна команда — много данных»). В последних разработках фирм Intel и AMD технология обозначена как SSE4, при этом у каждой из фирм она имеет свои особенности. Так, в микропроцессорах Pentium фирмы Intel реализован набор из 47 SIMD-команд (SSE4.1), в микропроцессорах Nehalem (Соге i7) той же фирмы — дополнительно еще 7 команд (SSE4.2). Микропроцессоры Phenom фирмы AMD в настоящее время поддерживают лишь 4 команды из SSE4, но дополнительно реализуют две новые команды, обозначаемые как SSE4a. В 2007 году фирма AMD анонсировала новый стандарт — SSE5, преподносимый как 128-разрядное расширение SSE. Предлагается набор из 170 команд, который предполагается реализовать на процессорах Bulldozer, производство которых было анонсировано в 2011 году.

Еще один вариант архитектуры системы команд с SIMD-командами воплощен фирмой IBM в процессорах серии PowerPC. Эта реализация носит название AltiVec.

Команды для работы со строками

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

Команды преобразования

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

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

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

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

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

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

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

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

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

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

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

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

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

· вызовы процедур и возвраты из процедур.

Статистика программирования показывает, что среди команд рассматриваемой группы доминируют условные переходы.

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

Условный переход происходит только при соблюдении определенного условия, в противном случае выполняется следующая по порядку команда программы. Большинство производителей ВМ в своих ассемблерах обозначают подобные команды словом branch (ветвление).

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

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

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

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

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

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

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

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

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

· адрес, по которому должен быть помещен результат операции.

В соответствии с этим команда состоит из двух частей: операционной и адресной (рис. 32).

Операции с целыми числами - student2.ru

Рис. 32 Структура команды

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

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

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

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

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

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

· стоимость оборудования для декодирования и исполнения команд.

Длина команды

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

Операции с целыми числами - student2.ru

Рис. 33 Обобщенный формат команды

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

Операции с целыми числами - student2.ru (1)

где l — количество адресов в команде; Операции с целыми числами - student2.ru . — количество разрядов для записи 1-го адреса; Операции с целыми числами - student2.ru — разрядность поля кода операции; Операции с целыми числами - student2.ru — разрядность поля способа адресации.

В большинстве ВМ одновременно уживаются несколько различных форматов команд.

Разрядность полей команды

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

Разрядность поля кода операции

Количество двоичных разрядов, отводимых под код операции, выбирается так, чтобы можно было представить любую из операций. Если система команд предполагает Операции с целыми числами - student2.ru различных операций, то минимальная разрядность поля кода операции Операции с целыми числами - student2.ru определяется следующим образом:

Операции с целыми числами - student2.ru (2)

где Операции с целыми числами - student2.ru означает округление в большую сторону до целого числа.

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

Разрядность адресной части

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

Разрядности полей Операции с целыми числами - student2.ru и Операции с целыми числами - student2.ru рассчитываются по формулам:

Операции с целыми числами - student2.ru (3)

Операции с целыми числами - student2.ru (4)

где Операции с целыми числами - student2.ru — количество ячеек памяти, к которому можно обратиться с помощью i-го адреса; Операции с целыми числами - student2.ru — количество способов адресации.

Количество адресов в команде

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

Операции с целыми числами - student2.ru

Рис. 34 Четырехадресный формат команды

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

Операции с целыми числами - student2.ru

Рис. 35 Трехадресный формат команды

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

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

Операции с целыми числами - student2.ru

Рис. 36 Двухадресный формат команды

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

Операции с целыми числами - student2.ru

Рис. 37 Одноадресный формат команды

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

Операции с целыми числами - student2.ru

Рис. 38 Полутораадресный формат команды

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

Операции с целыми числами - student2.ru

Рис. 39 Нульадресный формат команды

В таком варианте адресная часть команды вообще отсутствует или не задействуется

Наши рекомендации