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

Lection03

.pdf
Скачиваний:
10
Добавлен:
09.06.2015
Размер:
277.39 Кб
Скачать

Принципы построения цифровых вычислительных систем

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

Вариант 6

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

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

Десятичное

8-разрядный код

представление

+10111111

+–65

00101010

42

11101001

–23

Умножение целых чисел

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

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

Здесь опишем метод умножения двух целых 8-битных беззнаковых чисел, который можно применить к 16-битным и 32-битным числам. Пусть X – множимое, Y – множитель, Z – результат.

Вычисления осуществляются по следующей формуле:

Z = X Y = X (y7 27 + y6 26 + y5 25 + y4 24 + y3 23 + y2 22 + y1 21 + y0 20 ).

Умножим на 2 и поделим на 2 число Y в скобках, получим:

Z = X Y =

X ( y 28

+ y 27

+ y 26 + y 25 + y 24 + y 23 + y 22 + y 21)

.

7

6

5

4

3

2

1

0

 

 

 

 

 

 

 

2

 

 

 

 

2 Пономаренко В.И., Лапшева Е.Е. Информатика. Технические средства – Саратов: Научная книга, 2009. – 212 с.: ил.

50

Лекция 3. Представление целых чисел

Теперь умножим и разделим на 2 не все члены суммы в числителе, а только с y6 по y0 (исключая y7).

Xy7 28 + X y6 28 + y5 27 + y4 26 + y3 25 + y2 24 + y1 23 + y0 22

Z =

2

2

 

Продолжая так дальше, получим следующую дробь:

 

 

 

 

 

 

 

 

 

 

 

Xy

28

+

Xy0 28

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Xy2 28 +

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Xy3

8

+

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

8

 

2

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

Xy5 28 +

Xy4 2

+

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

8

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Xy7 28 +

Xy6 2

+

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

Z =

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Эта дробь замечательна тем, что при выполнении арифметических операций в соответствии с этой последовательностью необходимо инициализировать результат Z нулевым значением, а затем делать одно

ито же – добавлять к результату множимое (X), сдвинутое влево на 8 бит и умноженное на младший разряд множителя (если этот разряд равен 1, то множимое просто переписывается, а если разряд равен 0, то

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

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

1.Очистить два байта результата.

2.В младший байт результата загрузить множитель (Y).

3.Загрузить в счетчик цикла число повторений 8.

4.Проанализировать младший бит результата (он же является на первом шаге младшим битом множителя). Если он равен 0, то результат остается без изменений. Если он равен 1, то к результату нужно прибавить множимое (X), сдвинутое влево на 8 бит. Фактически это означает сложение множимого со старшим байтом.

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

6.Уменьшить на единицу счетчик цикла.

7.Если счетчик цикла еще не равен нулю, перейти к шагу 4.

51

Принципы построения цифровых вычислительных систем

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

Запись чисел в файле данных

При записи данных на диск первым пишется самый младший байт числа, затем более старший, и т. д. Таким образом, при чтении числа в формате «Integer» из файла данных сначала читается младший байт, затем старший. При чтении числа в формате single первым стоит младший байт мантиссы, затем более старший байт, а последний из 4 байтов содержит знаковый бит и первые 7 бит порядка. Наиболее распространенные программы, предоставляющие возможности для просмотра и редактирования файлов данных в кодах ЭВМ, – это файловые менеджеры Far и Total Commander, а также битовый редактор HexEdit. В них наиболее часто применяется шестнадцатеричное представление чисел.

Рассмотрим представление чисел целых форматов в файлах данных. Формат Shortint занимает всего один байт и поэтому последовательность чисел этого формата соответствует

последовательности байтов.

Формат Integer занимает два байта. В качестве примера рассмотрим последовательный вывод двух целых чисел: 2315 и 1280 в файл данных типа Integer. Переведем эти числа в двоичную и шестнадцатеричную системы счисления: 231510 = 1001000010112 = 90B16; 128010 = 101000000002 = 50016. В файл данных будет выведено: 0B 09 00 05.

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

Контрольные вопросы и задания

1.Дайте определение дополнительного кода целого числа.

2.Чем различаются представление чисел в дополнительном 8- разрядном и 16-разрядном кодах?

3.Найдите дополнительный 8-разрядный и дополнительный 16разрядный коды десятичных чисел –123, –95, –48.

4.Напишите на Паскале программу сложения двух чисел типа shortint. Найдите результат сложения следующих двух чисел: 100 + 99; (–2) + (–127); 110 + (–96); 65 + (–118); 94 + 11; (–31) + (–27).

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

52

Лекция 3. Представление целых чисел

5.Напишите аналогичную программу на Паскале для типа данных integer, longint, word. Определите диапазон чисел, представляемых

вэтих типах данных.

6.Напишите на языке Паскаль программу вывода в файл чисел типа byte, shortint, integer, longint. Попробуйте вывести различные числа

вфайлы данных. Просмотрите файлы данных в Far в режиме двоичного просмотра (HEX). Проанализируйте результаты.

7.Ответьте на вопросы:

Сколько байт данных необходимо для представления чисел в различных форматах?

Как перевести число из его представления его в файле к привычному виду?

Как представляются в файле различные значения переменных?

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

Список литературы к лекции 3

1.Григорьев В.Л. Архитектура и программирование арифметического сопроцессора. – М. : Энергоатомиздат, 1991. – 208 с. : ил.

2.Поворознюк А.И. Архитектура компьютеров. Архитектура микропроцессорного ядра и системных устройств : учеб. пособие. Ч. 1. – Харьков : Торнадо, 2004. – 355 с. : ил.

53

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]