Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
16
Добавлен:
12.02.2015
Размер:
122.67 Кб
Скачать

Лабораторная работа №11

Разработка устройства вычитания

Цель работы: изучить особенности разработки устройств вычитания, входящих в состав арифметико-логический устройств вычислительных машин.

Основные определения

Целые беззнаковые двоичные числа

Формат целых двоичных чисел без знака имеет вид, показанный на рис. 1.

n-1

n-2 . . . . . . .

1

0

 

Значащие биты

 

Рис.1 Формат целых беззнаковых двоичных чисел

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

та и других аналогичных форматов формат с фиксированной точкой. Следовательно, в этом формате представимы только целые числа 0, 1,2, ...,n-2 1 и любая комбинация битов (двоичный набор) является допустимой.

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

чисел применяются объявления (спецификаторы) типов BYTE (n = 8), WORD (n=16), ADDRESS (n=16), UNSIGNED (n=16) и др.

Целые знаковые двоичные числа

Чтобы компьютеры могли оперировать положительными и отрица- тельными числами, один из разрядов необходимо отвести для изображения знака чисел S. Обычно им является старший (левый) бит, а стандартное коди- рование знака имеет такой вид:

S=0 — число положительное, S =1—число отрицательное.

Знаковые числа длиной n бит представляются в формате, показанном на рис. 2. Имеется несколько способов кодирования знаковых чисел.

n-1

n-2

. . . . . . .

1

0

Знак

 

Значащие биты

 

Рис.2. Общий формат целых знаковых чисел

Прямой код

Наиболее естественное кодирование знаковых чисел заключается в том, чтобы поместить в бит S знак числа, а остальные биты использовать для абсолютного значения числа. В англоязычной литературе для этого способа принят выразительный термин «знак и модуль», а в нашей литературе закре- пился термин «прямой код».

Диапазон представимых чисел составляет от —(2 n-1—1) до +(2n-1-1), а число нуль может быть положительным 00...00 и отрицательным 100 ...00.

Прямой код наиболее удобен и в нем очень легко реализуется операция изменения знака числа (операция NEGATE). Однако с «компьютерной» точ-

ки зрения у прямого кода есть существенные недостатки.

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

Дополнительный код

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

Xдк=2n-|X|.

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

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

2. Для получения дополнительного кода числа X необходимо запи- сать n-битный модуль этого числа, затем вычесть единицу и инвертировать все биты.

Оба правила (1-ое и 2-ое) элементарно доказываются при условии, что инвертирование n-битного числа X эквивалентно вычитанию его из числа 11

... 11, равного 2"—1. В обоих случаях результатом оказывается дополни- тельный код числа X.

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

3. Для получения дополнительного кода числа X необходимо запи- сать n-битный модуль этого числа. Затем следует просматривать число спра- ва налево, сохранить все младшие нули и первую встретившуюся 1, а осталь- ные биты инвертировать.

1-ое и и 2-ое правила справедливы и для перехода от дополнительного кода отрицательного числа к симметричному положительному числу. Поэто- му, если исходить из дополнительного кода числа, 1-ое, 2-ое и 3-тье правила превращаются в правила изменения знака числа. Обычно эта операция имеет мнемоническое обозначение NEG (от negate — изменить знак).

Отметим, что в дополнительном коде:

число нуль имеет единственное представление 00... 00; максимальное по модулю отрицательное число не имеет симметрично-

го положительного числа, поэтому применительно к нему в операции изме- нения знака фиксируется особый случай;

инкремент (увеличение на 1) максимального положительного числа + (2n—1) как результат дает 2n-1, т. е. максимальное по модулю отрицательное число, поэтому операция инкремента (и декремента, т. е. уменьшения на 1) применима только к беззнаковым числам.

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

Во-вторых, любое число в дополнительном коде можно считать млад- шими битами хвостом») числа любой длины, если содержимое знакового бита копировать влево.

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

Отметим, что понятие дополнительного кода распространяется на системы счисления с любым основанием q.

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

граммирования высокого уровня такие числа должны записываться без деся- тичной точки и объявляются спецификаторами типа SINT (n=8), INTEGER

или INT (n=16), LONG или INTEGER4 (n=32).

Выполнения команды вычитания

В системах команд микропроцессоров есть команда вычитания с мне- моникой SUB (SUBtract), в которой определяются уменьшаемое и вычитае-

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

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

состояние флажка переноса (т. е. заема) противоположно фактическому зна- чению переноса при сложении уменьшаемого и дополнительного кода вычи- таемого.

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

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

Анализ операции вычитания показывает, что для вычитания чисел с длиной, большей длины машинного слова, удобно иметь команду, которая не просто вычитает два числа, но и автоматически учитывает состояние флажка

переноса (заема). Такая команда называется вычитанием с заемом и имеет мнемонику SBB (SuBtract with Burrow). Действие ее описываем следующим

образом, полагая, что разность замещает уменьшаемое:

Уменьшаемое- <-уменьшаемое - вычитаемое -состояние заема.

Команду SBB легко встраивать в программные циклы вычитания. Она

воздействует на арифметические флажки так же, как команда вычитания

SUB.

К командам вычитания относится однооперандная команда декре- мента (DECrement) с мнемоникой DEC и DCR. Она производит уменьшение

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

Еще одна команда, относящаяся к вычитанию, называется изменением знака (NEGate) и обычно имеет мнемонику NEG. По существу она эквива-

лентна вычитанию из нуля значения своего единственного операнда. При ис- пользовании дополнительного кода эта команда может вызвать особый слу- чаи (обычно интерпретируемый как перевыполнение), когда ее операнд име- ет вид 100 ...00. Такое отрицательное число —2n-1 не имеет равного по абсо- лютному значению положительного числа.

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

При использовании команды сравнения необходимо отчетливо пред- ставлять, что ее операнды допускают интерпретацию как беззнаковых, так и знаковых чисел в дополнительном коде, что влияет па содержательный смысл состоянии флажков. Наиболее просто выявляется равенство (Z=l) и неравенство (Z=0) операндов: об этом сигнализирует флажок нуля Z незави- симо от интерпретации операндов. Отношение «большеменьше» в случае беззнаковых чисел показывает флажок переноса: если первый операнд или (уменьшаемое) больше второго (вычитаемого), то флажок переноса устанав- ливается в состояние 0, и наоборот.

Окончательно для операции вычитания имеем.

1.Вычитание двух чисел сводится к операции сложения

D = A – B = A + (C - B) – C,

где С В дополнение В до С.

2.При этом С следует выбирать так, чтобы вычитание С проводилось без помощи специальных схем.

3.В случае N разрядных двоичных чисел в качестве С можно выбирать

-С = 2N , тогда C – BN называется точным двоичным дополнением и обозначается B(2)N;

-С = 2N – 1 , тогда C – B N называется поразрядным двоичным до- полнением и обозначается B(1)N.

Задание к лабораторной работе

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

2.Разработайте VHDL модель устройства вычитания для вариантов заданий из лабораторной работы №10. Сборка (компоновка) проекта должна содержать VHDL модели устройств, представленных отдельными файлами.

3.Разработайте тесты для верификации устройства вычитания, реализованного на

FLEX8000 .

4.Протестируйте устройство на FLEX8000.

 

Оглавление

Основные определения...............................................................................................................

1

Целые беззнаковые двоичные числа.......................................................................................

1

Целые знаковые двоичные числа.............................................................................................

1

Прямой код.............................................................................................................................

2

Дополнительный код.............................................................................................................

2

Выполнения команды вычитания...........................................................................................

4

Задание к лабораторной работе................................................................................................

6

Соседние файлы в папке лабораторные