Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
_апр._342(1).doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
338.43 Кб
Скачать

2.1.2 Методика выполнения типовых операций.

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

  1. арифметические операции;

  2. логические операции;

  3. операции над символами;

  4. операции над строками символов.

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

В случае естественной формы представления любое число А может принадлежать отрезку [0, 1-2n], если точка фиксированная перед старшим разрядом числа, или [20, 2n-1], если точка фиксирована после младшего разряда числа. Для изображения знака числа отводится дополнительный разряд, который в структурном плане предшествует старшему разряду. Знак «+» обычно кодируется нулем, а знак «-» - единицей. Используя в настоящее время функциональные методы выполнения арифметических операций базируются на непосредственной реализации единственной элементарной операции суммирования. В связи с чем отрицательные числа хранятся в памяти ЦВМ в одном из инверсных кодов (обратном, дополнительном). Для фиксации возможного переполнения разрядной сетки числа используют модифицированные коды, имеющих два одинаково заполненных разряда знака числа. При использовании рассмотренной формы представления чисел операция сложения выполняется как сложение исходных кодов слагаемых без какого-либо их преобразования. Операция вычитания выполняется как сложение, причем, второе слагаемое должно быть преобразовано перед выполнением операции из исходного кода в его инверсию. Операция сравнения отличается от операции вычитания только тем, что в процессе суммирования не фиксируется ее результат в числовом виде. В результате выполнения всех перечисленных операций, должны быть сформированы сигналы, характеризующие отношение полученного результата к нулю (больше, меньше, равно).

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

C=A*2-1*b1 + A*2-2*b2 +…+ A*2-(n-1)*bn-1 + A*2-n*bn – умножение со старших разрядов множителя;

C=((…((0+A*bn)*2-1+ A*bn-1)*2-1+ …+ A*b2)*2-1 + A*b1)*2-1 – умножение с младших разрядов.

В первом и во втором случаях n – шаговая процедура вычисления произведения сводится к повторяющемуся процессу вычисления частичных сумм (Si) по следующим схемам:

1) Si = Si-1 + Ai * 2-1*b,

Ai = Ai-*2-1, A0 = A, i= 1,2,…, n;

2) Si = Si-1 *2-1 + A* bn+1-i

S0 = 0, i=1,2,…, n.

И в первом и во втором случаях при перемножении n-разрядных чисел получается 2n-разрядное произведение (n старших разрядов и n младших разрядов). При этом получение всех 2n разрядов произведения обеспечивается суммированием в n-разрядной сетке.

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

2Ri-1-B, если Ri-1 ≥0 (Ci-1=1)

1) Ri= 2Ri-1+B, если Ri-1 <0 (Ci-1=0)

Ri-1-B*2-i, если Ri-1≥0

2) Ri= Ri-1+B*2-i, если Ri-1<0

Как в первом, так и во втором случае, R0=A-B. На операцию деления чисел с фиксированной точкой накладывается ограничение |C=A/B|<2. Кроме того, по мере возрастания I выполнение операции алгебраического суммирования осуществляется в увеличивающейся с каждым шагом разрядной сетке, т.е. при i=n суммирование должно происходить в 2n-разрядной сетке.

При выполнении арифметических операций над числами с плавающей точкой предполагают, что операнды представлены в нормальном виде, т.е. мантисса (Мх) числа X=qmx * Mx, где mx – это порядок числа, q – основание системы счисления, удовлетворяет условию 1/q ≤|Mx| <1

1. Сложение С=А+В.

___ ___ ___

МсАВ, mc=max{mA, mB}, где Мх – преобразованная мантисса в соответствии с измененным (выравниванием порядков).

2. Вычитание. Выполняется аналогично сложению. Мантисса вычитаемого представляется в инверсном коде.

3. Сравнение. Равносильно вычитанию без фиксации результата.

4. Умножение. МСА × МВ, mc=mA + mB.

5. Деление. МСАВ, mc=mA - mB.

Замечание. Операции над мантиссами производятся по правилам действия над числами с фиксированной точкой < 1. Порядки интерпретируются как целые числа.

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

Методика выполнения арифметических операций над десятичными числами произвольной длины существенно зависит от способа представления десятичных цифр (двоично-десятичная система кодирования) и базируется на правилах двоичной арифметики /5/. При выполнении действий над числами разной длины обработка ведется, начиная с младших разрядов. Недостающие старшие разряды более короткого операнда интерпретируются как (0000)2. Знак числа так же кодируется четырехразрядным двоичным кодом и участвует в операции наравне с цифровыми разрядами.

Операции над логическими данными предполагают, что операнды представляются двоичными векторами фиксированной длины. К числу логических операций относятся: логическое умножение (операция И), логическое сложение (операция ИЛИ), отрицание равнозначности (операция ИЛИ с исключением) и сдвиг (логический и арифметический). Первые три операции представляют собой операции алгебры логики над одноименными разрядами двоичных векторов С(1:n)=A(1:n)¤B(1:n), где ci=ai ¤ bi b и ¤ - знак выполняемой операции. Правила выполнения этих операций:

ai bi ci(\/) ci(/\) ci(○)

0 0 0 0 0

0 1 1 0 1

1 0 1 0 1

1 1 1 1 0

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

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

Операции сдвига. Операнд А сдвигается на В разрядов влево или вправо.

А(1:n):=LB(A(1:n)). 0…0 – логический сдвиг влево на В разрядов с заполнением освобождающихся разрядов нулями;

A(1:n)=0…0. RB(A(1:n)) – логический сдвиг вправо на В разрядов с заполнением освобождающихся разрядов нулями;

A(1:n):=LB(A(2:n)). 0…0 – арифметический сдвиг влево на В разрядов с заполнением освобождающихся разрядов нулями (разряд знака А(1) в сдвиге не участвует);

A(1:n):=A(1)…A(1). RB(A(2:n)) - арифметический сдвиг вправо на В разрядов с заполнением освобождающихся разрядов значением разряда знака. Для осуществления операций сдвига достаточно иметь инверсивный n-разрядный сдвигающий регистр и вычитающий счетчик, на который заносится константа сдвига В.