Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЭВМ-шаблонответа.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
299.37 Кб
Скачать

Сложение и вычитание

Обе операции трехоперандные: два слагаемых и результат. Формат команды может быть: 3-х операндным – 2-х операндным – результат помещается на место одного из слагаемыых (так в I*86) 1-операндным – второй операнд и сумма находятся в предопределенном месте (в регистре-аккумуляторе) нуль-операндным – оба операнда находятся в предопределенных местах (чаще всего это два верхних элемента стека, который может быть организован как аппаратно, так и программно).

Будем, если не оговорено другое, использовать соглашения ассемблера Intel

add a, b aa + b так принято в Intel – ассемблере, т.е. результат сложения помещается на место операнда, указываемого первым. Аналогично для вычитания : sub a, b

Приятная особенность дополнительного кода для представления отрицательных чисел:

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

Для действий умножения и деления это не так.

Глядя на двоичное представление целого числа, невозможно сказать, знаковое оно или беззнаковое.

При выполнении операции сложения или вычитания схемотехника процессора изменяет значения битов cfи of. Анализируя эти биты, можно узнать, не выходит ли результат сложения или вычитания за пределы представимого диапазона. (Как это сделать, узнаем позже).

  1. Поддержка целочисленной арифметики повышенной разрядности.

Поддержка действий с повышенной разрядностью

В большинстве известных процессоров в случае переполнения разрядной сетки устанавливается специальный флаг переполнения - C-бит.

+

an-1 an-2……a1 a0 первый операнд _bn-1 bn-2……b1 b0_ второй операнд C sn-1 sn-2……s1 s0 сумма (если возникает перенос – он устанавливает C-бит)

an-1 an-2……a1 a0 первый операнд _bn-1 bn-2……b1 b0_ второй операнд C sn-1 sn-2……s1 s0 разность (если возникает заем – он устанавливает C-бит)

Если не хватает разрядности, поддерживаемой АЛУ, то можно искусственно увеличить разрядность - хранить величины в нескольких машинных словах. Рассмотрим, как можно организовать сложение двух «длинных» операндов, используя «короткое» сложение.

+

an-1 an-2 …… a1 a0

+cf

bn-1 bn-2 …… b1 b0

+

A2n-1 a2n-2 …… an-1 an

+

B2n-1 b2n-2 …… bn-1bn

cf

B2n-1 b2n-2 …… bn-1bn

bn-1 bn-2 …… b1 b0

Результат переноса при сложении младших частей регистрируется в флагеперееноса(C, cf) (независимо от того, знаковые операнды или беззнаковые). Значение флага переноса надо учитывать при сложении старших частей.

Для учета при сложении значения флага переноса cf в систему команд добавляют команду сложения с переносом: adc a, b (работает так: a a + b + cf)

Последовательность команд при выполнении сложения с двойной точностью может быть такой

add b0, a0 ; b0 b0 + a0 (переносвcf) adc b1, a1 ; b1 b1 + a1 + cf (легко аналогично реализовать утроенную, учетверенную .... точность).

В некоторых архитектурах с двухоперандными командами сложения/вычитания команда adcоднооперандная :a=a+cf и тогда так:

add b0, a0 ; b0 b0 + a0 adc b1 ; b1 b1 + cf add b1, a1 ; b1  b1 + a1 // Вопрос о тройной точности

Аналогично, для вычитания. В составе системы команд обычно имеется команда вычитания, учитывающая заем. Заем при выполнении вычитания также (как и перенос) фиксируется в значении флага c.