И.В. Хмелевский, В.П. Битюцкий
ОРГАНИЗАЦИЯ ЭВМ И СИСТЕМ ОДНОПРОЦЕССОРНЫЕ ЭВМ
ЧАСТЬ 1
Федеральное агентство по образо...
235 downloads
198 Views
953KB Size
Report
This content was uploaded by our users and we assume good faith they have the permission to share this book. If you own the copyright to this book and it is wrongfully on our website, we offer a simple DMCA procedure to remove your content from our site. Start by pressing the button below!
Report copyright / DMCA form
И.В. Хмелевский, В.П. Битюцкий
ОРГАНИЗАЦИЯ ЭВМ И СИСТЕМ ОДНОПРОЦЕССОРНЫЕ ЭВМ
ЧАСТЬ 1
Федеральное агентство по образованию ГОУ ВПО «Уральский государственный технический университет-УПИ»
И.В. Хмелевский, В.П. Битюцкий
ОРГАНИЗАЦИЯ ЭВМ И СИСТЕМ ОДНОПРОЦЕССОРНЫЕ ЭВМ ЧАСТЬ 1 Конспект лекций Издание второе, исправленное и дополненное
Научный редактор проф., д-р техн.наук Л.Г. Доросинский
Екатеринбург 2005
УДК 681.3 ББК 32.973.202я73 Х-65 Рецензенты: кафедра информатики УГГУ (зав. кафедрой доц. канд.техн.наук А.В.Дружинин); доц., канд. техн. наук Г.Б.Захарова (УрО РАН) Авторы: И.В.Хмелевский, В.П.Битюцкий Х-65 Организация ЭВМ и систем. Однопроцессорные ЭВМ. Часть 1.: Конспект лекций / И.В. Хмелевский, В.П. Битюцкий. 2-е изд., испр. и допол. Екатеринбург: ГОУ ВПО УГТУ-УПИ, 2005. 87 с. ISBN 5-321-00516-8
Конспект лекций посвящен изучению основ организации и функционирования ЭВМ в целом и ее отдельных узлов, взаимодействия ЭВМ и периферийных устройств, в том числе многопроцессорных систем, перспективных направлений в развитии вычислительной техники, приобретению опыта разработки простейших микропроцессорных устройств. Конспект предназначен для студентов всех форм обучения направления 230100 – Информатика и вычислительная техника Табл. 11, Рис. 30.
Подготовлено кафедрой "Автоматика и информационные технологии".
УДК 681.3 ББК 32.973.202я73
ISBN 5-321-00516-8
©ГОУ ВПО «Уральский государственный технический университет-УПИ», 2005 (испр. и доп.)
ОГЛАВЛЕНИЕ
1. ОБЩИЕ ВОПРОСЫ ИСТОРИИ РАЗВИТИЯ И ПОСТРОЕНИЯ ЭВМ..... 5 1.1. ДВА КЛАССА ЭВМ .................................................................................................5 1.2. НЕМНОГО ИСТОРИИ ............................................................................................7 1.3. ПРИНЦИПЫ ДЕЙСТВИЯ ЭВМ ..............................................................................8 1.4. ПОНЯТИЕ О СИСТЕМЕ ПРОГРАММНОГО (МАТЕМАТИЧЕСКОГО) ОБЕСПЕЧЕНИЯ ЭВМ ....................................................................................................11 1.5. ПОКОЛЕНИЯ ЭВМ ...............................................................................................14 1.6. БОЛЬШИЕ ЭВМ ОБЩЕГО НАЗНАЧЕНИЯ..........................................................17 1.6.1. КАНАЛЫ........................................................................................................19 1.6.2. ИНТЕРФЕЙС ................................................................................................20 1.7. МАЛЫЕ ЭВМ ........................................................................................................20 ВОПРОСЫ ДЛЯ САМОПРОВЕРКИ ...........................................................................21
2. ПРЕДСТАВЛЕНИЕ ИНФОРМАЦИИ В ЭВМ .......................................... 22 2.1. ПОЗИЦИОННЫЕ СИСТЕМЫ СЧИСЛЕНИЯ .......................................................22 2.2. ДВОИЧНАЯ СИСТЕМА СЧИСЛЕНИЯ ................................................................22 2.2.1. ПРЕОБРАЗОВАНИЕ ДВОИЧНЫХ ЧИСЕЛ В ДЕСЯТИЧНЫЕ....................23 2.2.2. ПРЕОБРАЗОВАНИЕ ДЕСЯТИЧНЫХ ЧИСЕЛ В ДВОИЧНЫЕ ...................24 2.2.3. ДВОИЧНО-ДЕСЯТИЧНАЯ СИСТЕМА СЧИСЛЕНИЯ.................................26 2.3. ВОСЬМЕРИЧНАЯ СИСТЕМА СЧИСЛЕНИЯ ......................................................26 2.4. ШЕСТНАДЦАТЕРИЧНАЯ СИСТЕМА СЧИСЛЕНИЯ ..........................................27 2.5. ДВОИЧНАЯ АРИФМЕТИКА.................................................................................28 2.5.1. СЛОЖЕНИЕ..................................................................................................28 2.5.2. ВЫЧИТАНИЕ ................................................................................................28 2.5.3. УМНОЖЕНИЕ...............................................................................................29 2.5.4. ДЕЛЕНИЕ .....................................................................................................30 2.6. ПРЯМОЙ, ОБРАТНЫЙ И ДОПОЛНИТЕЛЬНЫЙ КОДЫ.....................................31 2.6.1. ПРЯМОЙ КОД...............................................................................................31 2.6.2. ОБРАТНЫЙ КОД ..........................................................................................32 2.6.3. ДОПОЛНИТЕЛЬНЫЙ КОД ..........................................................................33 2.6.4. СЛОЖЕНИЕ И ВЫЧИТАНИЕ В ДОПОЛНИТЕЛЬНОМ КОДЕ ...................35 2.6.5. ПРИЗНАК ПЕРЕПОЛНЕНИЯ РАЗРЯДНОЙ СЕТКИ...................................36 2.6.6. ДЕЛЕНИЕ В ДОПОЛНИТЕЛЬНОМ КОДЕ ..................................................37 2.6.7. ПРАВИЛО ПЕРЕВОДА ИЗ ДОПОЛНИТЕЛЬНОГО КОДА В ДЕСЯТИЧНУЮ СИСТЕМУ ...................................................................................................37 2.6.8. МОДИФИЦИРОВАННЫЕ КОДЫ .................................................................38 2.6.9. АРИФМЕТИКА ПОВЫШЕННОЙ ТОЧНОСТИ.............................................39 2.7. ПРЕДСТАВЛЕНИЕ ДРОБНЫХ ЧИСЕЛ В ЭВМ. ЧИСЛА С ФИКСИРОВАННОЙ И ПЛАВАЮЩЕЙ ЗАПЯТОЙ .....................................................................40 2.7.1. ЧИСЛА С ФИКСИРОВАННОЙ ЗАПЯТОЙ...................................................40 2.7.2. ЧИСЛА С ПЛАВАЮЩЕЙ ЗАПЯТОЙ............................................................41 2.7.3. СЛОЖЕНИЕ (ВЫЧИТАНИЕ) ЧПЗ................................................................48 2.7.4. УМНОЖЕНИЕ ЧПЗ.......................................................................................49 2.7.5. МЕТОДЫ УСКОРЕНИЯ УМНОЖЕНИЯ.......................................................50 2.7.6. ДЕЛЕНИЕ ЧИСЕЛ С ПЛАВАЮЩЕЙ ЗАПЯТОЙ .........................................51 3
2.8. ДЕСЯТИЧНАЯ АРИФМЕТИКА ............................................................................52 2.8.1. СЛОЖЕНИЕ ДВОИЧНО-ДЕСЯТИЧНЫХ ЧИСЕЛ .......................................52 2.8.2. ВЫЧИТАНИЕ МОДУЛЕЙ ДВОИЧНО-ДЕСЯТИЧНЫХ ЧИСЕЛ ..................56 2.8.3. УМНОЖЕНИЕ МОДУЛЕЙ ДВОИЧНО-ДЕСЯТИЧНЫХ ЧИСЕЛ .................58 2.8.4. ДЕЛЕНИЕ МОДУЛЕЙ ДВОИЧНО-ДЕСЯТИЧНЫХ ЧИСЕЛ........................59 2.9. НАРУШЕНИЕ ОГРАНИЧЕНИЙ ЭВМ ...................................................................59 2.10. ПРЕДСТАВЛЕНИЕ БУКВЕННО-ЦИФРОВОЙ ИНФОРМАЦИИ .......................60 2.11. ЗАКЛЮЧИТЕЛЬНЫЕ ЗАМЕЧАНИЯ ..................................................................61 ВОПРОСЫ ДЛЯ САМОПРОВЕРКИ ...........................................................................62 КОНТРОЛЬНЫЕ ЗАДАНИЯ К ГЛАВЕ 2 .....................................................................63 ФОРМА 1. ОТВЕТЫ НА ВОПРОСЫ......................................................................63 ФОРМА 2. ВЫПОЛНЕНИЕ АРИФМЕТИЧЕСКИХ ОПЕРАЦИЙ НАД ЧИСЛАМИ ...........................................................................................................................63 ПРИМЕР ВЫПОЛНЕНИЯ КОНТРОЛЬНОГО ЗАДАНИЯ (ФОРМА 2) ..................66
3. ПРИНЦИПЫ ПОСТРОЕНИЯ ЭЛЕМЕНТАРНОГО ПРОЦЕССОРА ...... 72 3.1. ОПЕРАЦИОННЫЕ УСТРОЙСТВА (АЛУ)............................................................75 3.2. УПРАВЛЯЮЩИЕ УСТРОЙСТВА.........................................................................77 3.2.1. УУ С ЖЕСТКОЙ ЛОГИКОЙ .........................................................................78 3.2.2. УУ С ХРАНИМОЙ В ПАМЯТИ ЛОГИКОЙ ...................................................80 ВОПРОСЫ ДЛЯ САМОПРОВЕРКИ ...........................................................................85 КОНТРОЛЬНЫЕ ЗАДАНИЯ К ГЛАВЕ 3 .....................................................................85
4
1. Общие вопросы истории развития и построения ЭВМ С момента своего возникновения человек старался облегчить свой труд с помощью различных приспособлений. В начале это касалось только физического труда, а затем также и умственного. В результате уже в XVII веке начали появляться первые механические устройства, позволяющие выполнять некоторые арифметические действия над числами. Они предназначались, в основном, для коммерческих расчетов и составления навигационных таблиц. Совершенствование технологии обработки металлов, а затем и появление первых электромеханических устройств типа электромагнитных реле привело к интенсивному совершенствованию вычислительных устройств. Кроме того, совершенствование вычислительных устройств было обусловлено все возрастающим объемом информации, требующей переработки. До 30-х годов прошлого столетия разработкой вычислительных устройств занимались механики, математики, электрики. Но с конца 30-х годов к этому процессу подключились электронщики, поскольку вычислительные устройства стали создавать на электронных элементах – электронных лампах. Вычислительные устройства превратились в электронные вычислительные машины (ЭВМ0, а все, что связано было с созданием ЭВМ, превратилось в отдельную область человеческих знаний, которую условно можно было назвать "Теория и принципы проектирования ЭВМ". Однако уже в 50-е годы разнообразие проблем теории и методов проектирования объектов вычислительной техники, сложность ее элементов, устройств, машин и систем закономерно привели к тому, что из дисциплины "Теория и принципы проектирования ЭВМ", еще недавно охватывающей все основные аспекты этой области науки и техники, выделились самостоятельные курсы: схемотехника ЭВМ, методы оптимизации, периферийные устройства, операционные системы, теория программирования и т.д. Современная ЭВМ – настолько сложное устройство, что в одном курсе физически невозможно охватить подробно все проблемы проектирования, создания и эксплуатации ЭВМ, которые в общем случае имеют три аспекта: - пользовательский (т.е. ЭВМ является инструментом решения прикладных задач); - программный (т.е. ЭВМ является объектом системного программирования); - электронный (т.е. ЭВМ является сложным электронным устройством, созданным с использованием сложных технологий). Настоящий курс "Организация ЭВМ и систем" без излишней детализации рассматривает комплекс основных вопросов, относящихся к теории, принципам построения и функционирования ЭВМ как сложного электронного устройства. При этом основное внимание уделяется микроЭВМ и устройствам на базе микропроцессорных комплектов. Следует иметь в виду также, что под ЭВМ понимается любое устройство переработки цифровой информации (от микроконтроллера, управляющего стиральной машиной, до суперЭВМ), а не только персональный компьютер. 1.1. Два класса ЭВМ Любая сфера человеческой деятельности, любой процесс функционирования технического объекта связаны с передачей и преобразованием информации. Одно из важнейших положений кибернетики состоит в том, что без информации, ее передачи и переработки невозможны организованные системы – ни биологические, ни технические, искусственно созданные человеком. Информацией называются сведения о тех или иных явлениях природы, событиях общественной жизни, процессах в технических устройствах. Информация, за5
фиксированная в некоторых материальных формах (на материальном носителе), называется сообщением, например: • статистические данные о работе предприятия и потребности производства в материалах; • данные переписи населения; • данные для диспетчера аэропорта о перемещении самолетов в воздухе; • данные о толщине прокатываемого листа. Все эти сообщения отличаются друг от друга по источнику информации, по способу представления, по продолжительности и т.д. Но их объединяет одно – информацию, которую они несут, необходимо передать, переработать и как-то использовать. В общем случае сообщения могут быть непрерывными (аналоговыми) и дискретными (цифровыми). Аналоговое сообщение представляется некоторой физической величиной (обычно электрическим током или напряжением), изменение которой во времени отражает протекание рассматриваемого процесса, например температуры в нагревательной печи. Физический процесс, передающий непрерывное сообщение, может в определенном интервале принимать любые значения и изменяться в произвольные моменты времени, т.е. может иметь бесконечное множество состояний. Дискретное сообщение характеризуется конечным набором состояний, например, передача текста. Каждое из этих состояний можно представить в виде конечной последовательности символов или букв, принадлежащих конечному множеству, называемому алфавитом. Такая операция называется кодированием, а последовательность символов – кодом. Число символов, входящих в алфавит, называется основанием кода. Важным здесь является не физическая природа символов кода, а то, что за конечное время можно передать только конечное число состояний сообщения. Причем, чем меньше основание кода, тем длиннее требуются кодовые группы для передачи фиксированного набора состояний сообщения. В настоящее время в абсолютном большинстве случаев используются коды с основанием два, т.е. информация представляется в виде бинарных импульсных последовательностей, или двоичных кодов. Передачу и преобразование любой дискретной информации всегда можно свести к эквивалентной передаче и преобразованию двоичных кодов, или цифровой информации. Более того, возможно с любой заранее заданной степенью точности непрерывное сообщение заменить цифровым путем квантования непрерывного сообщения по уровню и дискретизации его по времени. Однако следует иметь в виду, что с увеличением точности представления аналогового сообщения растет разрядность кода. Это может привести к тому, что обработка аналогового сообщения в цифровой форме на конкретной ЭВМ в реальном масштабе времени окажется невозможной. Таким образом, любое сообщение может быть с определенной степенью точности представлено в цифровой форме. Электронные вычислительные машины (ЭВМ) являются преобразователями информации. В них исходные данные задачи преобразуются в результат ее решения. В соответствии с используемой формой представления информации при преобразовании ЭВМ делятся на два больших класса – аналоговые и дискретного действия – цифровые. Их обозначают как АВМ и ЦВМ соответственно. С 70-х годов термин ЭВМ относят именно к машинам дискретного действия, или ЦВМ, принципы функционирования которых и будут рассмотрены в настоящем курсе.
6
1.2. Немного истории Считается, что первым механизмом для счета являлся абак, в котором сложение и вычитание чисел выполнялось перемещением камешков по желобам доски. Подобные устройства встречаются в разных вариантах в различных странах древнего мира. Но настоящая потребность в автоматизации вычислений возникла в средние века в связи с резко возросшими в этот период торговыми операциями и океанским судоходством. Торговля требовала больших денежных расчетов, а судоходство – надежных навигационных таблиц. Первые эскизы счетной машины создал Леонардо да Винчи (около 1500 года). А первые сведения о работающей счетной машине относятся к 1646 году (Германия). Но подробностей устройства этой счетной машины не сохранилось. В 1646 году во Франции Паскаль создал механическое устройство, которое складывало и вычитало многозначные числа. В 1673 году в Германии Лейбниц строит счетную машину, выполняющую все четыре арифметических действия. Он же предложил использовать двоичную систему счисления для нужд вычислительной математики. В этот период были созданы и другие счетные машины. Все они были построены в одном экземпляре (поскольку создавались десятки лет) и не могли долго работать – слишком сложны были их механизмы и слишком примитивна технология их изготовления. Только в 1820 году был налажен серийный выпуск (сотни штук в год) арифмометров конструкции Томаса де Кальмера. Вычисления, состоящие из последовательности арифметических операций, все еще лежали за пределами возможностей счетной машины. В 1834 году Ч. Бэббидж разработал проект счетной машины, позволяющей реализовать вычисления любой сложности. Машина была задумана как механическая. Но Ч. Бэббиджа можно назвать пророком, поскольку его "аналитическая" машина стала прообразом ЭВМ, появившейся 100 лет спустя. Его машина содержала механический эквивалент практически всех основных устройств простейшей ЭВМ: память ("склад" на 1000 чисел по 50 десятичных знаков), арифметическое устройство ("мельница"), устройство управления, устройства ввода и вывода информации. Последовательность выполнения операций и пересылки чисел между устройствами задавалась программой на перфокартах Жаккарда (1804), которые использовались для управления работой ткацких станков. Кроме того, в машине Бэббиджа предусматривалась возможность изменения программы в зависимости от результата вычислений. Говоря современным языком, имелись команды условных переходов. Интересно отметить, что Бэббидж изобрел наиболее эффективный способ сложения чисел – сложение по схеме со сквозным переносом. Эту машину Бэббидж строил всю оставшуюся жизнь (до 1871 года), но создал только ее отдельные узлы. В то же время (50-е годы прошлого столетия) благодаря трудам английского математика Ады Лавлейс зародилось машинное программирование. Ада Лавлейс пыталась написать программы к еще не созданной счетной машине Бэббиджа. В конце XIX –начале XX века начали появляться электромеханические счетноаналитические машины для выполнения расчетно-бухгалтерских и статистических операций. Сильным толчком к развитию таких устройств стал конкурс, объявленный в США при проведении переписи 1888 года. В нем победил табулятор Холлерита, который явился родоначальником целого семейства электронно-механических машин для обработки статистических данных. В 1898 году Холлерит организовал фирму, которая поставляла такие машины всему миру. Эти машины непрерывно совершенствовались: в 1913 году создан табулятор, печатающий результаты; в 1921 году к нему добавлена коммутационная доска, на которой хранилась программа обработки данных, считываемых с различных позиций перфокарты. 7
Первые вычислительные машины в современном смысле появились в конце 30-х – начале 40-х годов. В 1936 -1937 году К. Цузе (Германия) спроектировал машину с программным управлением. В 1941 году она была создана (машина на электромагнитных реле). Это первая в мире ЭВМ с программным управлением. Программа наносилась на перфоленту и целиком вводилась в машину. После этого оператор уже не мог влиять на последовательность выполнения команд программы. Поскольку перфолента двигалась в одну сторону, все циклы записывались в развернутом виде, т.е. в виде последовательности групп команд. В 1937 году Г. Айкин (США) разработал проект электромеханической универсальной ЭВМ с программным управлением. Она была построена в 1944 году фирмой IBM и названа "Марк-1". В 1947 году под руководством Айкина построена более мощная машина "Марк-2". В ней для хранения чисел и выполнения операций использовано 16000 электромеханических реле. В этот период был разработан целый ряд подобных релейных вычислительных машин, одна из которых практически полностью повторяла "аналитическую" машину Бебиджа. Эти релейные вычислительные машины были ненадежны, медленно работали и потребляли много энергии, но позволили накопить большой опыт по созданию машин для автоматизированных вычислений. На них было опробовано двоичное кодирование чисел, представление чисел в форме с плавающей запятой, способы выполнения операций над числами на основе релейных схем и т.д. В этот же период начали появляться машины, построенные на электронных лампах, причем первоначально лампы стали использоваться в простейших счетчиках импульсов. На них строились схемы с двумя устойчивыми состояниями, впоследствии названные триггерами (впервые подобная схема была разработана в 1918 году Бонч-Бруевичем). Исследуя свойства триггеров, американские ученые Дж. Моучли и Д. Эккер пришли к выводу о целесообразности использования в вычислительных машинах вместо электромеханических реле ламповых триггеров. В 1946 году под их руководством построена вычислительная машина "ЭНИАК" для баллистических расчетов. Она содержала 18000 электронных ламп и 1500 реле. Использование электронных ламп позволило резко (на два порядка) повысить скорость выполнения операций. Анализируя работу этой машины, математик Дж. Нейман сформулировал основные концепции организации ЭВМ. В соответствии с этими концепциями началась разработка ЭВМ "ЭДВАК" – прообраза современных ЭВМ. Она была построена в 1950 году. А в 1949 году в Англии была введена в эксплуатацию первая в мире ЭВМ с хранимой в памяти программой – "ЭДСАК", созданная под руководством М. Уилкса. Вычислительные машины "ЭДВАК" и "ЭДСАК" положили начало первому поколению ЭВМ – поколению ламповых машин. С начала 50-х годов было осуществлено много проектов ЭВМ, в каждом из которых применялись новые типы устройств, способы управления вычислительным процессом и обработки информации. Особое внимание уделялось улучшению характеристик памяти, поскольку в ламповых ЭВМ она была незначительной. Так, в 1952 г. впервые были использованы ферритовые сердечники. На этом закончим рассмотрение истории развития вычислительных машин и перейдем к принципам действия ЭВМ. 1.3. Принципы действия ЭВМ Рассмотрим вначале вычисления с помощью калькулятора. Предварительно на листе бумаги выписываются формулы и исходные данные, а часто и таблицы для занесения промежуточных и конечных результатов. В процессе вычисления числа с листа заносятся в регистр микрокалькулятора, а затем включается нужная по фор8
муле операция. Полученные результаты переписываются с регистра (индикатора микрокалькулятора) на лист бумаги (в таблицу). Таким образом, микрокалькулятор выполняет арифметические операции над числами, которые в него вводит человек. Лист бумаги выполняет в данном случае роль запоминающего устройства, хранящего программу (расчетную формулу), исходные, промежуточные и конечные результаты. Человек управляет процессом вычисления, включая перенос чисел с листа в микрокалькулятор и обратно, а также выбирает нужный вариант продолжения процесса вычисления в соответствии с полученным результатом. Интересно, что в данном случае быстродействие устройства, выполняющего арифметические операции (механического или электронного), практически не влияет на скорость вычислительного процесса, так как остальные операции выполняются очень медленно. Принципиальный эффект достигается, если к быстродействующему арифметическому устройству добавить быстродействующую память, а также быстродействующее устройство, производящее все необходимые операции по реализации программы вычислений и пересылке чисел между арифметическим устройством и памятью. Если добавить к такому комплексу аппаратуры устройства связи с внешним миром, т.е. устройства ввода исходных данных и программы и вывода результата, то придем к классической пятиблочной структуре Неймана, несколько модифицированный вид которой показан на рис. 1.1 (первоначально устройство ввода и вывода изображалось одним блоком, а память не разделялась на основную и внешнюю). Пульт ручного управления
Управляющее устройство
Устройство ввода (УВ)
Арифметикологическое устройство (АЛУ)
Внутренняя (основная, оперативная память (ОП))
Устройство вывода (УВ) Результат расчета
Внешняя память (ВП)
Программа, исходные данные
Рис. 1.1. Классическая структура ЭВМ
Рассмотрим основные функции устройств, входящих в состав неймановской модели ЭВМ. АЛУ – производит арифметические и логические преобразования над поступающими в него машинными словами, т.е. двоичными кодами определенной длины, представляющими собой числа или другой вид информации. 9
Память – хранит информацию, передаваемую из других устройств, в том числе поступающую извне через устройство ввода, и выдает во все другие устройства информацию, необходимую для протекания вычислительного процесса. В ЭВМ первых поколений память состояла только из двух существенно отличных по своим характеристикам частей – быстродействующей основной, или оперативной (внутренней), памяти (ОП) и значительно более медленной внешней памяти (ВП), способной хранить очень большие объемы информации. Память современных ЭВМ имеет более сложную структуру, поскольку внутренняя память ЭВМ разделилась на ряд иерархических уровней, обладающих различным объемом и быстродействием – ОП, кэшпамять, сверхоперативная память, память каналов и т.д. Однако при первоначальном рассмотрении многоуровневость памяти можно не учитывать и считать, что внутренняя память состоит из одной ОП. Внутренняя память состоит из ячеек, каждая из которых служит для хранения одного машинного слова. Номер ячейки называется адресом. В запоминающем устройстве (ЗУ) ЭВМ, реализующем функцию памяти, выполняются операции считывания и записи информации. Причем при считывании информация не разрушается и может считываться любое число раз. При записи прежнее содержимое ячейки стирается. Непосредственно в вычислительном процессе участвует только ОП. Обмен информацией между ОП и ВП происходит только после окончания отдельных этапов вычислений. Физическая реализация ОП и ВП будет рассмотрена в последующих разделах данного курса. Устройство управления (УУ) – автоматически, без участия человека, управляет вычислительным процессом, посылая всем другим устройствам сигналы, предписывающие те или иные действия, в частности заставляет ОП пересылать необходимые данные, включать АЛУ на выполнение необходимой операции, перемещать полученный результат в необходимую ячейку ОП. Следует иметь в виду, что в современных ЭВМ АЛУ и УУ всегда объединены в одно устройство, которое называется процессор. Пульт управления – позволяет оператору вмешиваться в процесс решения задачи, т.е. давать директивы устройству управления. Устройство ввода – позволяет ввести программу решения задачи и исходные данные в ЭВМ и поместить их в ОП. В зависимости от типа устройства ввода исходные данные для решения задачи вводятся непосредственно с клавиатуры (дисплей, пишущая машинка) либо должны быть предварительно помещены на какой-либо носитель – перфокарты, перфоленты, магнитные карты, магнитные ленты, магнитные и оптические диски и т.д. В системах САПР осуществляется ввод графической информации. Устройство вывода – служит для вывода из ЭВМ результатов обработки исходной информации. Чаще всего это символьная информация, которая выводится с помощью печатающих устройств (ПчУ) или на экран дисплея. В ряде случаев это графическая информация в виде чертежей и рисунков, которые могут быть выведены с помощью графических дисплеев, графопостроителей, принтеров, и т.д. Теперь необходимо определить понятия алгоритм и программа. Понятие алгоритма не замыкается только областью вычислительной техники (ВТ). По интуитивному определению: Алгоритм – это совокупность правил, строго следуя которым можно перейти от исходных данных к конечному результату. В ВТ под "совокупностью правил" понимается последовательность арифметических и логических операций. (Утверждают, что слово алгоритм произошло от имени Мухаммед аль Хорезми, написавшем в IX веке трактат по арифметике десятичных чисел.) 10
Программа – это запись алгоритма в форме, воспринимаемой ЭВМ. Любая программа состоит из отдельных команд. Каждая команда предписывает определенное действие и указывает, над какими операндами это действие производится. Программа представляет собой совокупность команд, записанных в определенной последовательности, обеспечивающих решение задачи на ЭВМ. Для того,чтобы УУ могло воспринять команды, они должны быть закодированы в цифровой форме (во всех современных ЭВМ – это двоичный код). Автоматическое управление процессом решения задачи достигается на основе принципа программного управления, являющегося основной особенностью ЭВМ. (Без программного управления ЭВМ превратится в обычный быстродействующий арифмометр или калькулятор.). Другим важнейшим принципом является принцип хранимой в памяти программы. Согласно этому принципу программа, закодированная в цифровом виде, хранится в памяти наравне с числами. Поскольку программа хранится в памяти, одни и те же команды можно извлекать и выполнять необходимое количество раз. Более того, над кодами команд можно выполнять некоторые арифметические операции и тем самым модифицировать адреса обращения к ОП. Команды программы выполняются в порядке, соответствующем их расположению в последовательных ячейках памяти. Однако команды безусловного и условного переходов могут изменять этот порядок соответственно безусловно или при выполнении некоторого условия, задаваемого отношениями типа больше, меньше или равно. В большинстве случаев сравниваются результаты выполнения предыдущей операции и некоторое число, указанное в команде условного перехода. Именно команды условного перехода позволяют строить не только линейные, но также ветвящиеся и циклические программы. 1.4. Понятие о системе программного (математического) обеспечения ЭВМ Каждая ЭВМ обладает определенными свойствами, такими как возможность обрабатывать информацию в той или иной форме, возможность выполнять арифметические и логические операции, операции, связанные с организацией совместной работы устройств машины и т.д. Для придания определенных свойств ЭВМ используют средства двух видов – аппаратные и программные (hard & soft). Последние называются также средствами программного обеспечения. Часть свойств ЭВМ приобретает благодаря наличию в ней электронного и электромеханического оборудования, специально предназначенного для реализации этих свойств. Примером такого устройства является АЛУ. Ряд других свойств реализуется без специальных электронных блоков с помощью программных средств. При этом используются имеющиеся аппаратные средства ЭВМ, выполняющие действия, предписанные специальными программами. Так, например, ЭВМ может не иметь аппаратно реализованной операции извлечения корня. Но если есть программа извлечения корня, то существующие аппаратные средства могут выполнить эту операцию. Причем, с точки зрения пользователя, ЭВМ приобретет свойство вычисления корня. Следует иметь в виду, что с помощью аппаратных средств соответствующие функции ЭВМ выполняются значительно быстрее, чем программным путем, но при этом ЭВМ становится сложнее и дороже. Всвязи с этим в ЭВМ с достаточно простыми процессорами стремятся как можно больше функций реализовать программным путем, а в мощных ЭВМ для повышения быстродействия – по максимуму использовать аппаратные средства. 11
Вообще же стремятся как можно оптимальнее соотнести аппаратные и программные средства, чтобы при умеренных аппаратных затратах и стоимости достигнуть высокой эффективности и быстродействия. Таким образом, аппаратные и программные средства являются тесно связанными компонентами современной ЭВМ. Поскольку с точки зрения пользователя, как правило, неважно аппаратно или программно выполнены те или иные функции, можно говорить о виртуальной (кажущейся) ЭВМ. Система программного (математического) обеспечения – это комплекс программных средств, в котором можно выделить операционную систему, комплект программ технического обслуживания и пакеты прикладных программ. На рис. 1.2 изображена упрощенная структура вычислительной системы как совокупности аппаратных и программных средств. Операционная система (ОС) – это центральная и важнейшая часть программного обеспечения ЭВМ, предназначенная для эффективного управления вычислительным процессом, планирования работы и распределения ресурсов ЭВМ, автоматизации процесса подготовки программ и организации их выполнения при различных режимах работы машины, облегчения общения оператора и пользователя с машиной.
Оператор
Пользователь
Проблемноориентированный
Программное обеспечение
Язык ОС
Процедурноориентированный Пакет программнотехнического обслуживания
Макроязык Ассемблер Машинный язык
Машиннонезависимые языки
Машиннозависимые языки ППП
Операционная система Управляющие программы
Обрабатывающие программы
BIOS
Аппаратные средства ЭВМ ППП – пакет прикладных программ Рис. 1.2. Вычислительная система как совокупность программных и аппаратных средств ЭВМ
12
ОС состоит из программ, относящихся к двум большим группам. Управляющие программы осуществляют управление работой устройств ЭВМ, т.е. координируют работу устройств в процессе ввода, подготовки и выполнения других программ. Обрабатывающие программы осуществляют работу по подготовке новых программ для ЭВМ и исходных данных для них, например, сборку отдельно транслируемых модулей в одну или несколько исполняемых программ, работы с библиотеками программ, перезаписи массивов информации между ВП и ОП и т.д. ОС в большинстве случаев являются универсальными и не учитывают особенности конкретных аппаратных средств. В современных ЭВМ для адаптации универсальной ОС к конкретным аппаратным средствам используют аппаратноориентированную часть операционной системы, которая в персональных компьютерах называется BIOS (Basic Input / Output System – базовая система ввода/вывода). Следует иметь в виду, что оператор и пользователь не имеют прямого доступа к аппаратным средствам ЭВМ. (В частном случае, например при работе с персональным компьютером, оператор и пользователь являются одним и тем же лицом.) Все связи осуществляются только через ОС, обеспечивающую определенный уровень общения человека и машины. А уровень общения определяется в первую очередь уровнем языка, на котором оно происходит. На схеме представлена приближенная иерархия таких языков. Проблемно-ориентированный – это язык, строго ориентированный на какуюлибо проблему (моделирование сложных технических и экономических систем, САПР самых различных направлений, задачи анимации и т.д.). Процедурно-ориентированный – это язык, ориентированный на выполнение общих процедур переработки данных (Фортран, Паскаль, Бейсик и т.д.). Машинный язык – это самый нижний уровень языка. Команды записываются в виде двоичных кодов. Адреса ячеек памяти – абсолютные. Программирование очень трудоемко. Ассемблер – это язык более высокого уровня, использующий мнемокоды (т.е. команды обозначаются буквенными сочетаниями). Запись программы ведется с использованием символических адресов, т.е. вместо численных значений адреса используются имена, за исключением первого оператора программы, который жестко привязан к физическому адресу. (Вообще, более правильно говорить язык ассемблера, поскольку Ассемблер –служебная программа, преобразующая символические имена команд и символические адреса в команды в машинном коде и числовые адреса.) Макроязык – в первом приближении его можно определить как язык процедур, написанных на языке ассемблера, т.е. когда вместо целого комплекса команд (которые часто встречаются) используется только имя (название) этого комплекса. Язык ОС – это язык, на котором оператор может выдавать директивы ОС, вмешиваться в ход вычислительного процесса. Пакет программно-технического обслуживания предназначен для уменьшения трудоемкости эксплуатации ЭВМ. Эти программы проводят тестирование работоспособности ЭВМ и ее отдельных устройств, определяют места неисправностей. Пакеты прикладных программ представляют собой комплексы программ для решения определенных, достаточно широких классов задач (научно-технических, планово-экономических), а также для расширения функций ОС (управление базами данных, реализация режимов телеобработки данных, реального времени и др.). Все это, как уже отмечалось, в совокупности с аппаратными средствами составляет вычислительную систему. Причем при создании новых ЭВМ разработка аппаратного и программного обеспечения производится одновременно. В настоящее 13
время программное обеспечение – такой же вид промышленной продукции, как и сама ЭВМ, причем его стоимость зачастую дороже аппаратной части. Сложность современных вычислительных систем (ВС) привела к возникновению понятия архитектуры ВС. Это понятие охватывает комплекс общих вопросов построения ВС, существенных в первую очередь для пользователя, интересующегося главным образом возможностями ЭВМ, а не деталями ее технического исполнения. К числу таких вопросов относятся вопросы общей структуры, организации вычислительного процесса и общения пользователя с машиной, вопросы логической организации представления, хранения и преобразования информации и вопросы логической организации совместной работы различных устройств, а также аппаратных и программных средств машины. 1.5. Поколения ЭВМ Выше рассматривались три понятия: аппаратные средства, программное обеспечение и архитектура ЭВМ. Рассмотрим коротко этапы развития ЭВМ за последние 50 лет с точки зрения этих понятий, составляющих основу классификации ЭВМ по поколениям. Ранее отмечалось, что ближайшими прототипами современной ЭВМ можно считать машины "ЭДВАК" и "ЭДСАК", построенные в Англии и США в 1949-1950 годах. С начала 50-х годов началось массовое производство ЭВМ различных типов, которые сейчас принято относить к ЭВМ первого поколения. Следует иметь в виду, что поколения ЭВМ не имеют четких временных границ. Элементы каждого нового поколения ЭВМ разрабатывались и опробовались на ЭВМ предыдущего поколения. Первое поколение (1950-1960 гг.) ЭВМ этого поколения строилось на дискретных элементах и вакуумных лампах, имели большие габариты, массу, мощность, обладая при этом малой надежностью. Основная технология сборки – навесной монтаж. Они использовались в основном для решения научно-технических задач атомной промышленности, реактивной авиации и ракетостроения. Увеличению количества решаемых задач препятствовали низкая надежность и производительность, а также чрезвычайно трудоемкий процесс подготовки, ввода и отладки программы, написанной на языке машинных команд, т.е. в форме двоичных кодов. Машины этого поколения имели быстродействие порядка 10-20 тысяч операций в секунду и ОП порядка 1К (1024 слова). В этот же период появились первые простые языки для автоматизированного программирования. Второе поколение (1960-1965 гг.) В качестве элементной базы использовались дискретные полупроводниковые приборы и миниатюрные дискретные детали. Основная технология сборки – одно- и двухсторонний печатный монтаж невысокой плотности. По сравнению с предыдущим поколением резко уменьшились габариты и энергозатраты, возросла надежность. Возросли также быстродействие (приблизительно 500 тысяч оп/с) и объем оперативной памяти (16-32К слов). Это сразу расширило круг пользователей, а следовательно, и решаемых задач. Появились языки высокого уровня (Фортран, Алгол, Кобол) и соответствующие им трансляторы. Были разработаны служебные программы для автоматизации профилактики и контроля работы ЭВМ, а также для лучшего распределения ресурсов при решении пользовательских задач. (Задача экономии времени процессора и ОП осталась, как и в первом поколении). Все эти вышеперечисленные служебные программы оформились в ОС, которая первоначально просто автоматизировала работу оператора: ввод текста программы, вызов нужного транслятора, вызов необходимых библиотечных программ, размещение программ в основной памяти и т.д. Теперь вместе с программами и исходными 14
данными вводилась целая инструкция о последовательности обработки программы и требуемых ресурсах. Совершенствование аппаратного обеспечения, построенного на полупроводниковой базе, привело к тому, что появилась возможность строить в ЭВМ помимо центрального (основного) процессора еще ряд вспомогательных. Эти процессоры управляли всей периферией, в частности устройствами ввода/вывода, избавляли от вспомогательной работы центральный процессор. Одновременно совершенствовались и ОС. Это позволило на ЭВМ второго поколения реализовать режим пакетной обработки программ, а также режим разделенного времени. Последний был необходим для параллельного решения нескольких задач управления производством и организации многопользовательского режима через дисплейные станции. В машинах второго поколения широко использовались ОП на ферритовых кольцах (так называемые кубы памяти). Все это позволило поднять производительность ЭВМ и привлечь к ней массу новых пользователей. Третье поколение (1965-1970 гг.) В качестве элементной базы использовались интегральные схемы малой интеграции с десятками активных элементов на кристалл, а также гибридные микросхемы из дискретных элементов. Основная технология сборки – двухсторонний печатный монтаж высокой плотности. Это сократило габариты и мощность, повысило быстродействие, снизило стоимость универсальных (больших) ЭВМ. Но самое главное – появилась возможность создания малогабаритных, надежных, дешевых машин – миниЭВМ. МиниЭВМ первоначально предназначались для замены аппаратнореализуемых контроллеров в контурах управления различных объектов и процессов (в том числе и ЭВМ),. Появление миниЭВМ сократило сроки разработки контроллеров, поскольку вместо разработки сложных логических схем требовалось купить миниЭВМ и запрограммировать ее надлежащим образом. Универсальное устройство обладало избыточностью, однако малая цена и универсальность периферии оказались большим плюсом, обеспечившим высокую экономическую эффективность. Но вскоре потребители обнаружили, что после небольшой доработки на миниЭВМ можно решать и вычислительные задачи. Простота обслуживания новых машин и их низкая стоимость позволили снабдить подобными вычислительными машинами небольшие коллективы исследователей, разработчиков, учебные заведения и т.д. В начале 70-х гг. с термином миниЭВМ уже связывали два существенно различных типа вычислительной техники: - контроллер – универсальный блок обработки данных и выдачи управляющих сигналов, серийно выпускаемый для использования в различных специализированных системах контроля и управления; - универсальная ЭВМ небольших габаритов, проблемно-ориентированная пользователем на ограниченный круг задач в рамках одной лаборатории, технологического участка и т.д. Четвертое поколение (с 1970 г.) Успехи микроэлектроники позволили создать БИС и СБИС, содержащие десятки тысяч активных элементов. Одновременно уменьшались и габариты дискретных электронных компонентов. Основной технологией сборки стал многослойный печатный монтаж. Это позволило разработать более дешевые ЭВМ с большой ОП. Стоимость одного байта памяти и одной машинной операции резко снизилась. Но затраты на программирование почти не сократились, поэтому на первый план вышла задача экономии человеческих, а не машинных ресурсов. Для этого разрабатывались новые ОС, позволяющие пользователю вести диалог с ЭВМ, что облегчало работу пользователя и ускоряло разработку программ. Это 15
потребовало, в свою очередь, совершенствовать организацию одновременного доступа к ЭВМ целого ряда пользователей, работающих с терминалов. Совершенствование БИС и СБИС привело в начале 70-х гг. к появлению новых типов микросхем – микропроцессоров (в 1968 г. фирма Intel по заказу ДейтаДженерал разработала и изготовила первые БИС микропроцессоров, которые предполагалось использовать как составные части больших процессоров). В те годы под микропроцессором понималась БИС, в которой полностью размещен процессор простой архитектуры, т.е. АЛУ и УУ. В результате были созданы дешевые микрокалькуляторы и микроконтроллеры – управляющие устройства, построенные на одной или нескольких БИС, содержащие процессор, память и устройства сопряжения с датчиками и исполнительными механизмами. С совершенствованием технологии их производства и, следовательно, падением цен микроконтроллеры начали внедряться даже в бытовые приборы и автомашины. В 70-е же годы появились первые микроЭВМ – универсальные вычислительные системы, состоящие из процессора, памяти, схем сопряжения с устройствами ввода/вывода и тактового генератора, размещенные в одной БИС (однокристальная микроЭВМ) или в нескольких БИС, установленных на одной печатной плате (одноплатные микроЭВМ). Совершенствование технологии позволило изготовить СБИС, содержащие сотни тысяч активных элементов, и сделать их достаточно дешевыми. Это привело к созданию небольшого настольного прибора, в котором размещалась микроЭВМ, клавиатура, монитор, магнитный накопитель (кассетный или дисковый), а также схемы сопряжения с малогабаритным печатающим устройством, измерительной аппаратурой, другими ЭВМ и т.д. Этот прибор получил название персональный компьютер. В 1976 г. была зарегистрирована компания Apple Comp (Стив Джекоб и Стефан Возняк), которая и начала серийный выпуск первых в мире персональных компьютеров "Макинтош". Благодаря ОС, обеспечивающей простоту общения с этой ЭВМ больших библиотек прикладных программ, а также низкой стоимости персональный компьютер начал стремительно внедряться в различные сферы человеческой деятельности во всем мире. Об областях и целях его использования можно прочитать в многочисленных литературных источниках. По данным на 1985 год, общий объем мирового производства уже составил 200⋅106 микропроцессоров и 10⋅106 персональных компьютеров в год. Что касается больших ЭВМ этого поколения, то происходит дальнейшее упрощение контакта человек-машина. Использование в больших ЭВМ микропроцессоров и СБИС позволило резко увеличить объем памяти и реализовать некоторые функции программ ОС аппаратными методами, например аппаратные реализации трансляторов с языков высокого уровня и т.п. Это сильно увеличило производительность ЭВМ, хотя несколько возросла и цена. Характерным для крупных ЭВМ 4-го поколения является наличие нескольких процессоров, ориентированных на выполнение определенных операций, процедур или решение определенных классов задач. В рамках этого поколения создаются многопроцессорные вычислительные системы с быстродействием в несколько десятков или сотен миллионов операций/с и многопроцессорные управляющие комплексы повышенной надежности с автоматическим изменением структуры. Примером вычислительной системы 4-го поколения является многопроцессорный комплекс "Эльбрус-2" с суммарным быстродействием 100⋅106 оп/с или вычислительная система ПС-2000, содержащая до 64 процессоров, управляемых общим потоком команд. При распараллеливании вычислительного процесса суммарная скорость достигает 200⋅106 оп/с. Подобные суперЭВМ развивают максимальную произ16
водительность только при решении определенных типов задач (под которые они и строились). Это, прежде всего, задачи сплошных сред, связанные с аэродинамическими расчетами, прогнозами погоды, силовыми энергетическими полями и т.д. Производство суперЭВМ во всем мире составляет в настоящее время десятки штук в год, и строятся они, как правило, "под заказ". Пятое поколение Характерной особенностью пятого поколения ЭВМ является то, что основные концепции этого поколения были заранее формулированы в явном виде. Задача разработки принципиально новых компьютеров впервые поставлена в 1979 году японскими специалистами, объединившими свои усилия под эгидой научноисследовательского центра по обработке информации – JIPDEC. В 1981 г. JIPDEC опубликовал предварительный отчет, содержащий детальный многостадийный план развертывания научно-исследовательских и опытно-конструкторских работ с целью создания к 1991 г. прототипа ЭВМ нового поколения. Указанная программа произвела довольно сильное впечатление сначала в Великобритании, а затем и в США. Под эгидой JIPDEC прошли ряд международных конференций, в частности – "Международная конференция по компьютерным системам пятого поколения" (1981 г.), на которых полностью оформился "образ компьютера пятого поколения". Были предложены концепции создания не только поколения ЭВМ в целом, но и вопросы архитектуры основных типов ЭВМ этого поколения, структуры программных средств и языков программирования, разработки наиболее перспективной элементной базы и способов хранения информации. Следует отметить, однако, что оптимистические прогнозы японских специалистов не сбылись. До сих пор не создан компьютер, в полной мере удовлетворяющий требованиям, предъявляемым к компьютерам пятого поколения. Прежде чем перейти к изучению дальнейшего материала, следует сделать некоторые замечания. Дело в том, что, несмотря на общие принципы функционирования всех ЭВМ, их конкретные реализации существенно различаются. Особенно это касается суперЭВМ, решающих весьма специфические задачи. Да и обычные серийные большие ЭВМ общего назначения работают, как правило, в составе вычислительных центров, и доступ к ним возможен только через терминалы. Кроме того, их архитектура, аппаратное и программное обеспечение достаточно сложны для первоначального изучения, поэтому в дальнейшем основное внимание будет уделено небольшим ЭВМ, построенным на базе микропроцессоров, в том числе персональным компьютерам. Это имеет смысл еще и потому, что ЭВМ, построенные на базе микропроцессорных комплектов, представляют наибольший интерес для современного инженера, поскольку непосредственно участвуют в работе систем автоматизации производственных процессов, обрабатывают данные научных экспериментов, принимают и обрабатывают потоки информации в каналах связи, решают небольшие расчетные инженерные задачи и т.д. В ряде случаев для решения конкретных задач пользователь сам на базе микропроцессорных комплектов создает специализированные контроллеры и ЭВМ. Рассмотрим очень коротко основное отличие структур больших ЭВМ общего назначения и малых ЭВМ (миниЭВМ), появившихся в начале 70-х годов. 1.6. Большие ЭВМ общего назначения На первых этапах внедрения ЭВМ в деятельность человека решаемые задачи, в основном, можно было разделить на два больших класса: - научные и технические расчеты – для них типичным является возможность работы со словами фиксированной длины, относительно небольшие объемы входной информации (исходных данных) и выходной информации (результатов 17
расчета) и очень большое количество разнотипных вычислительных операций, которые необходимо выполнить в процессе решения; - планово-экономические расчеты, статистика носят совсем иной характер. Они связаны с вводом в машину очень большого количества (массивов) исходных данных. Сама же обработка требует сравнительно небольшого числа простейших логических и арифметических операций. Однако в результате обычно выводится и печатается большое количество информации, причем, как правило, в отредактированной форме – в виде таблиц, ведомостей, различных форм и т.д. Задачи такого типа получили название задач обработки данных. ЭВМ, предназначенные для их решения, часто называли системами автоматизированной обработки данных. Подобные ЭВМ составляли основу систем АСУ. Для систем обработки данных важно иметь возможность ввода, хранения, обработки и вывода большого количества текстовой (алфавитно-цифровой) информации, которая представлена словами переменной длины. Кроме того, для таких систем важно наличие значительного числа периферийных запоминающих устройств, хранящих большое количество информации (накопители на дисках и лентах), а также высокопроизводительных устройств ввода и вывода данных. Для решения этих двух типов задач первоначально строили ЭВМ, которые различались уже на уровне аппаратного обеспечения. Однако резкое расширение сферы использования ЭВМ, совершенствование аппаратного и программного обеспечения, расширение понятия научно-технических расчетов привели к стиранию границ между этими двумя типами задач, а следовательно, и типами ЭВМ. В результате появились ЭВМ общего назначения (mainframe), которые стали выполнять основной объем вычислительных работ и машинной обработки информации в различных ВЦ и АСУ. ЭВМ общего назначения универсальны и могут использоваться как для решения научно-технических задач численными методами, так и в режиме автоматической обработки данных в АСУ. Такие ЭВМ имеют высокое быстродействие, память большого объема, гибкую систему команд и способов представления данных, широкий набор периферийных устройств. Появление персональных компьютеров на некоторое время (3-4 года) снизило интерес к подобным ЭВМ, и их производство стало сокращаться. Однако уже к концу 80-х годов стало ясно, что персональные компьютеры не могут полностью заменить мэйнфреймы. В настоящее время многие фирмы (в том числе IBM) продолжают разрабатывать и выпускать новые модели мэйнфреймов, на долю которых, по мнению некоторых авторов, и приходится основной объем перерабатываемой в мире информации. Для того чтобы понять радикальные отличия структуры первых микро- и миниЭВМ, появившихся в начале 70 годов, от структур основных типов ЭВМ, существовавших в то время – ЭВМ общего назначения, необходимо рассмотреть структуру типичных представителей этих ЭВМ (например, ЕС–ЭВМ), прототипами которых были машины IBM 360/370. Их быстродействие составляло от 200 тысяч оп/с (ЕС 1030) до 5000 тысяч оп/с (ЕС 1065) и более для старших моделей машин этого семейства. Характерной особенностью подобных ЭВМ было наличие большого количества как "быстрых", так и "медленных" периферийных устройств, которые функционировали параллельно с центральным процессором и требовали специальных средств управления. Упрощенная структура ЭВМ серии ЕС изображена на рис. 1.3. Собственно обработка данных производилась в центральном процессоре (ЦП), содержащем АЛУ и УУ. Это самая быстродействующая часть ЭВМ, поэтому возникала проблема взаимодействия быстродействующего процессора с большим числом сравнительно медленно действующих периферийных устройств (ПУ). Для эффективного использования всего вычислительного комплекса требовалось организовать параллельную во времени работу ЦП и ПУ. Такой режим в ЭВМ общего назначения 18
организовывался при помощи специализированных вспомогательных процессоров ввода/вывода, называемых каналами. Периферийные устройства связывались с каналами через собственные блоки управления (УПУ) –их часто называли контроллерами ПУ– и систему сопряжения, называемую интерфейсом. Коротко рассмотрим функции этих устройств.
ЦП Сел. и БМ канал
БТМ канал
Интерфейс
УПУ
УПУ Интерфейс
УПУ
УПУ
ОП УПУ "Быстрая" периферия
УПУ Центральная часть
"Медленная" периферия
Сел. и БМ канал – селекторный и блок-мультиплексорпый канал; ЦП – центральный процессор; БТМ канал – байт-мультиплексорный канал Рис. 1.3. Структура ЭВМ общего назначения
1.6.1. Каналы Поскольку каналы предназначались для освобождения центрального процессора от вспомогательных операций, не связанных с вычислениями, они имели непосредственный доступ к ОП параллельно ЦП, естественно со своими приоритетами. Ввиду того что ПУ различаются по быстродействию и режимам работы, каналы подразделялись на байт-мультиплексные, блок-мультиплексные и селекторные. Байт-мультиплексный канал мог обслуживать одновременно несколько сравнительно медленно действующих ПУ – печатающих, УВВ с перфокарт и перфолент, дисплеев и др. Этот канал попеременно организовывал с ними сеансы связи для передачи между ОП и ПУ небольших порций информации фиксированной длины (обычно 1-2 слова или байта). В простейшем случае происходил циклический опрос ПУ, например при работе с дисплейной станцией. В более сложном варианте байтмультиплексный канал начинал обслуживать ПУ по их запросу, причем первым опрашивался ПУ с высшим приоритетом, а затем по очереди шло обращение ко всем остальным ПУ. Таким образом, байт-мультиплексный канал работал с "медленными" устройствами, способными ожидать обслуживание без потери информации. Селекторный и блок-мультиплексный каналы связывали ЦП и ОП с ПУ, работающими с высокой скоростью передачи информации (магнитные диски, ленты и др.). Селекторный канал предназначался для монопольного обслуживания одного устройства. При работе с селекторным каналом ПУ после пуска операции оставалось связанным с каналом до окончания цепи операций. Запросы на обслуживание других ПУ, так же как и новые команды пуска операций ввода-вывода от процессора, 19
в это время не воспринимались каналом: до завершения цепи операций селекторный канал по отношению к процессору представлялся занятым устройством. Таким образом, селекторный канал предназначался для работы с быстродействующими устройствами, которые могут терять информацию вследствие задержек или прерываний в обслуживании. Блок-мультиплексный канал обладал тем свойством, что операции, не связанные с передачей данных (установка головок на цилиндр, поиск записи и т.д.), выполнялись для нескольких устройств в мультиплексном режиме, а передача блока информации происходила в монопольном (селекторном) режиме. Аппаратные средства каналов разделялись на две части: средства, предназначенные для обслуживания отдельных ПУ, подключенных к каналу, и оборудование, являющееся общим для устройств и разделяемое всеми устройствами во времени. Средства канала, выделенные для обслуживания одного ПУ, назывались подканалами. 1.6.2. Интерфейс Связи всех устройств ЭВМ друг с другом осуществлялись, как и в современных ЭВМ, с помощью интерфейсов. Интерфейс представляет собой совокупность линий и шин сигналов, электронных схем и алгоритмов, предназначенную для осуществления обмена информацией между устройствами. От характеристик интерфейсов во многом зависят производительность и надежность ЭВМ. В заключение следует отметить, что все вышесказанное относится к серийно выпускаемым в свое время крупным ЭВМ общего назначения серии ЕС (IBM 360/370). Однако в этот же период были разработаны и серийно производились суперЭВМ типа Крэй1, Крэй2, Кибер-205, "Эльбрус", ПС-2000, и т.д. Их колоссальная производительность достигалась за счет уникальных структур аппаратного и программного обеспечения. Эти ЭВМ выпускались в незначительных количествах, как правило, под конкретный заказ. Более подробно о многопроцессорных ЭВМ речь пойдет в отдельном разделе данного курса. 1.7. Малые ЭВМ Наиболее массовое внедрение ЭВМ в деятельность человека началось тогда, когда в конце 60-х годов удалось построить небольшие, достаточно простые, надежные и дешевые вычислительные устройства, элементной базой которых были микросхемы. Уменьшение объема аппаратуры и стоимости машины было достигнуто за счет укорочения машинного слова (8-16 разрядов вместо 32-64 в машинах общего назначения), уменьшения по сравнению с ЭВМ общего назначения количества типов обрабатываемых данных (в некоторых моделях только целые числа без знака), ограниченного набора команд, сравнительно небольшого объема ОП и небольшого набора ПУ. Укорочение машинного слова повлекло за собой множество проблем, связанных с представлением данных, адресацией, составом и структурой команд, логической структурой процессора, организацией обмена информацией между устройствами ЭВМ. В процессе эволюции ЭВМ эти проблемы, так или иначе, решались, что привело к созданию малых ЭВМ, структура которых существенно отличалась от структуры больших машин. Следует отметить, что структуры современных микро - и миниЭВМ весьма сложны и в ряде случаев мало отличаются от структуры мощных ЭВМ – все зависит от мощности используемого процессора, объема и быстродействия ОП, производительности подсистем ввода-вывода и т.д. Однако первые мини - и микроЭВМ, появившиеся в начала 70-х годов, имели весьма простую структуру, радикально отличавшуюся от структуры больших машин того времени. 20
Типичная структура такой микроЭВМ изображена на рис. 1.4. Наращивание памяти Наращивание ПУ
Общая магистраль (шина)
Устройство постоянной памяти
Устройство ОП
Процессор, микропроцессор
ПУ1
ПУn
Рис. 1.4. Обобщенная структура первых микроЭВМ магистрально-модульной архитектуры Такая структура называется магистрально-модульной. Ее основу составляет общая магистраль (общая шина), к которой подсоединены в нужной номенклатуре и количестве все устройства машины, выполненные в виде конструктивно законченных модулей. Эта структура более простая и гибкая, чем у больших ЭВМ. Устройства машины обмениваются информацией только через общую магистраль. Такая структура оказывается эффективной, а система обмена данных через общую шину – достаточно динамичной лишь при небольшом наборе ПУ. Универсальность применения миниЭВМ при ограниченном наборе команд могла быть обеспечена лишь при сравнительно высоком быстродействии процессора – в первых моделях около 200-800 тысяч операций в секунду, что превышало скорость многих ЭВМ общего назначения. Это позволяло малым ЭВМ обслуживать технологические процессы в реальном масштабе времени, а также компенсировать замедление обработки данных, связанное с тем, что малый объем аппаратных средств вынуждал реализовывать многие процедуры обработки программным путем (например, операции арифметики с плавающей запятой). Подобное решение оказалось настолько эффективным, что и сейчас простейшие контроллеры и микроЭВМ строятся по этой же схеме. Однако структуры сколько-нибудь сложных микро- и миниЭВМ, в частности персональных компьютеров, в процессе эволюции существенно усложнились. Современный персональный компьютер имеет сложную структуру магистралей, иерархию внутренней памяти и множество подсистем ввода-вывода различного быстродействия. Архитектура современного персонального компьютера будет рассмотрена в отдельном разделе. Вопросы для самопроверки 1. Укажите, чем АВМ отличается от ЦВМ. 2. Назовите основные этапы эволюции ЭВМ. 3. Опишите классическую структуру ЭВМ по Нейману и укажите свойства каждого блока. 4. В чем заключается принцип оптимального соотношения аппаратных и программных средств при построении вычислительной техники? 5. Опишите способ обращения пользователя ЭВМ к ее аппаратным средствам. 6. Что нового появилось в каждом поколении по отношению к предыдущему. 7. Чем различается принцип построения малых ЭВМ и больших ЭВМ общего пользования? 21
2. Представление информации в ЭВМ 2.1. Позиционные системы счисления Под системой счисления понимают способ представления любого числа с помощью некоторого алфавита символов, называемых цифрами. Существуют различные системы счисления. От их особенностей зависят наглядность представления числа при помощи цифр и сложность выполнения арифметических операций. В ЭВМ используются только позиционные системы счисления с различными основаниями. Позиционные системы счисления характеризуются тем, что одна и та же цифра имеет различное значение, определяющееся позицией цифры в последовательности цифр, изображающих число. Пример.: • Десятичная система счисления – позиционная, • Римская система счисления – непозиционная. Количество S различных цифр, употребляющихся в позиционной системе счисления, называется ее основанием. В общем случае, любое число в позиционной системе счисления можно представить в виде полинома от основания S: X = ε r S r + ε r −1S r −1 + ... + ε 1S 1 + ε 0 S 0 + ε −1S −1 + ε −2 S −2 + ... .
В качестве коэффициента ε могут стоять любые из S цифр, используемых в системе счисления. Однако для краткости число принято изображать в виде последовательности цифр. X = ε r ε r −1...ε 1ε 0 ε −1ε − 2 ... Позиции цифры, отсчитанные от запятой (точки), отделяющей целую часть от дробной, называются разрядами. В позиционной системе счисления вес каждого разряда больше соседнего в число раз, равное основанию системы S. Пример. Для десятичной системы счисления (основание S = 10) имеем число 6321.564. Веса разряда и коэффициенты ε для этого числа будут следующими:
Веса
ε
103 6
102 3
101 2
100 1
10-1 5
10-2 6
10-3 4
В ЭВМ применяют двоичную, восьмеричную и шестнадцатеричную системы счисления. В дальнейшем систему счисления, в которой записано число, будем обозначать подстрочным индексом, заключенным в круглые скобки. Например: 1101(2), 369(10), BF(16) и т.д. 2.2. Двоичная система счисления В двоичной системе счисления основание S = 2, т.е. используются всего два символа: 0 и 1. Двоичная система счисления проще десятичной. Однако двоичное изображение числа требует большего (для многоразрядного числа примерно в 3,3 раза) числа разрядов, чем его десятичное представление. Тем не менее применение двоичной системы создает большие удобства для проектирования ЭВМ, так как для представления в машине разряда двоичного числа может быть использован любой простой элемент, имеющий всего два устойчивых состояния. Также достоинством двоичной системы счисления является простота двоичной арифметики. В общем виде двоичное число выглядит следующим образом: X = ε r 2 r + ε r −1 2 r −1 + ... + ε 1 21 + ε 0 2 0 + ε −1 2 −1 + ε − 2 2 −2 + ... , где ε i = 0,1 .
Вес каждого разряда в двоичной системе счисления кратен 2 или 1/2. 22
Пример. Двоичное число – 101101(2). 32 16
Веса
ε
→ →
2
5
2
1
8
4
2
0
4 3
2
1
2 2
1
2 0
1 1
2 0 = 45 (10 ) , 1
т.е. 1⋅ 2 5 + 0 ⋅ 2 4 + 1⋅ 2 3 + 1⋅ 2 2 + 0 ⋅ 21 + 1⋅ 2 0 = 45 (10 ) . Как и в десятичной, в двоичной системе счисления для отделения целой части от дробной используется точка. Значение веса разрядов справа от точки равно основанию двоичной системы (2), возведенному в отрицательную степень. Такие веса – это дроби вида: 1/2, 1/22, 1/23, 1/24, 1/25 или 1/2, 1/4, 1/8, 1/16. Их можно выразить через десятичные дроби: 2-1 = 0.5, 2-2 = 0.25, 2-3 = 0.125, 2-4 = 0,0625. В общем случае двоичное число имеет целую и дробную части, например 1101101.10111. Каждая позиция, занятая двоичной цифрой, называется битом. Бит является наименьшей единицей информации в ЭВМ. Наименьшим значащим битом (МЗР) называют самый младший двоичный разряд, а самым старшим двоичным разрядом – наибольший значащий бит (СЗР). В двоичном числе эти биты имеют соответственно наименьший и наибольший вес. Обычно двоичное число записывают так, что старший значащий бит является крайним слева. 2.2.1. Преобразование двоичных чисел в десятичные Для преобразования двоичных чисел в десятичные необходимо сложить десятичные веса всех разрядов двоичного числа, в которых содержатся единицы. Пример. Преобразовать целое двоичное число 11001100(2) в десятичное. 1 1 0 0 1 1 0 0
27
2
6
25
24
2
3
22
2
1
20
0 0 4 8 0 0 64 128
204(10)
Преобразование вещественного двоичного числа 101.011(2) будет выглядеть следующим образом: 1 0 1 . 0 1 1
22
21
2
0
2-1
2-2
2-3
0.125 0.25 0 1 0 4 5.375(10)
Если преобразуемое число большое, то операцию перевода удобнее делать отдельно для целой и дробной частей.
23
2.2.2. Преобразование десятичных чисел в двоичные При работе с ЭВМ, особенно с микропроцессорами, очень часто приходится выполнять преобразование десятичных чисел в двоичные. Для преобразования целого десятичного числа в двоичное необходимо разделить его на основание новой системы счисления (S = 2). Полученное частное снова делится на основание новой системы счисления, до тех пор пока частное, полученное в результате очередного деления, не будет меньше основания новой системы счисления. Последнее частное (являющееся старшим значащим разрядом) и все полученные остатки от деления составляют число в новой системе счисления. Проиллюстрируем преобразование на примере. Пример. Перевести целое десятичное число 10(10) в двоичное число.
10 2 10 5 2 МЗР⇒ 0 4 2 2 1 2 1 0 ⇑ СЗР
т.е. 10(10)=1010(2)
Если процедуру перевода выполняет человек, то последний шаг получения частного, равного нулю, никогда не делается. Если перевод выполняется ЭВМ, то он необходим. Таким образом, полный вариант преобразования 10(10) будет иметь следующий вид: 10 2 10(10)=1010(2) 10 5 2 МЗР⇒0 4 2 2 1 2 12 0 00 1 ⇐ СЗР
Пример. Десятичное число 57(10) преобразовать в двоичное число. 57 2 57(10)=111001(2) 56 28 2 МЗР⇒1 28 14 2 0 14 7 2 0 6 3 2 1 2 1 2 1 0 0 1 ⇐ СЗР
Для перевода дробных чисел (или дробных частей вещественных чисел) требуется другая процедура преобразования. Рассмотрим ее на примере. Пример. Десятичное число 0.375(10) преобразовать в двоичное число. 1. Умножим дробь на основание новой системы счисления S = 2: 2*0.375 = 0.75. 2. Если результат умножения меньше единицы, то СЗР присваивают значение 0. Если больше единицы, то присваивают значение 1. Поскольку 0.751, то ближайшему разряду справа от СЗР присваивается значение один, а следующая операция умножения производится только над дробной частью числа 1.5, т.е. над числом 0.5: 2*0.5=1. 5. Шаги описанной процедуры повторяются до тех пор, пока либо результат умножения не будет точно равен 1 (как в рассматриваемом примере), либо не будет достигнута требуемая точность. Таким образом, 0.375(10) = 0.011(2). Если в результате умножения на основание новой системы счисления S = 2 результат не равен единице, операцию останавливают при достижении необходимой точности, а целую часть результата последней операции умножения используют в качестве значения МЗР. Пример. Десятичное число 0.34375(10) преобразовать в двоичное число. 2 * 0.34375 = 0.6875 0 (СЗР) 2 * 0.6875 = 1.375 2 * 0.375 = 0.75 2 * 0.75 = 1.5 2 * 0.5 = 1.0 2*0
1 0 1 1 0
Таким образом, 0.34375(10) = 0.01011(2). Пример. Десятичное число 0.3(10) преобразовать в двоичное число. 2 * 0.3 = 0.6 0 (СЗР) 2 * 0.6 = 1.2 1 2 * 0. 2 = 0. 4 0 2 * 0.4 = 0.8 0 2 * 0.8 = 1.6 1 2 * 0.6 = 1.2 1 2 * 0. 2 = 0. 4 0 2 * 0.4 = 0.8 0
Далее будут следовать повторяющиеся группы операций и результатов, поэтому ограничимся восемью разрядами, т.е. 0.3(10) = 0.01001100(2). Из рассмотренных выше примеров видно, что если десятичное число дробное, то его преобразование в двоичное должно выполняться отдельно над его целой и дробной частями. Следует иметь в виду, что рассмотренные процедуры перевода целых и дробных чисел из десятичных в двоичные и обратно являются общими для перевода чисел в любых позиционных системах счисления (т.е. целое число делится на основание системы счисления, в которую число переводится, а правильная дробь умножается). Притом надо помнить, что при выполнении переводов чисел из одной системы счисления в другую все необходимые арифметические действия выполняются в той системе счисления, в которой записано переводимое число. 25
2.2.3. Двоично-десятичная система счисления Эта система имеет основание S = 10, но каждая цифра изображается четырехразрядным двоичным числом, называемым тетрадой. Обычно данная система счисления используется в ЭВМ при вводе и выводе информации. Однако в некоторых типах ЭВМ в АЛУ имеются специальные блоки десятичной арифметики, выполняющие операции над числами в двоично-десятичном коде. Это позволяет в ряде случаев существенно повышать производительность ЭВМ. Например, в автоматизированной системе обработки данных чисел много, а вычислений мало. В этом случае операции, связанные с переводом чисел из одной системы в другую, существенно превысили бы время выполнения операций по обработке информации. Перевод чисел из десятичной системы в двоично-десятичную весьма прост и заключается в замене каждой цифры двоичной тетрадой. Пример. Записать десятичное число 572.38(10) в двоично-десятичной системе счисления. 5
7
2.
3
8 (10 ) = 010101110010.00111000( 2−10 )
0101 0111 0010 0011 1000
Обратный перевод также прост: необходимо двоично-десятичное число разбить на тетрады от точки влево (для целой части) и вправо (для дробной), дописать необходимое число незначащих нулей, а затем каждую тетраду записать в виде десятичной цифры. Пример. Записать двоично-десятичное число 10010.010101(2-10) в десятичной системе счисления.
0001 0010 . 0101 0100 ( 2 −10 ) = 12 .54 (10 ) 1 2 5 4 Перевод чисел из двоично-десятичной в двоичную систему осуществляется по общим правилам, описанным выше. 2.3. Восьмеричная система счисления В восьмеричной системе счисления употребляются всего восемь цифр, т.е. эта система счисления имеет основание S = 8. В общем виде восьмеричное число выглядит следующим образом:
X = ε r 8 r + ε r −1 8 r −1 + ... + ε 1 81 + ε 0 8 0 + ε −1 8 −1 + ε −2 8 −2 + ... , где ε j = 0,7 . Восьмеричная система счисления не нужна ЭВМ в отличие от двоичной системы. Она удобна как компактная форма записи чисел и используется программистами (например, в текстах программ для более краткой и удобной записи двоичных кодов команд, адресов и операндов). В восьмеричной системе счисления вес каждого разряда кратен восьми или одной восьмой, поэтому восьмиразрядное двоичное число позволяет выразить десятичные величины в пределах 0-255, а восьмеричное охватывает диапазон 0-99999999 (для двоичной это составляет 27 разрядов). Поскольку 8=23, то каждый восьмеричный символ можно представить трехбитовым двоичным числом. Для перевода числа из двоичной системы счисления в восьмеричную необходимо разбить это число влево (для целой части) и вправо (для дробной) от точки (запятой) на группы по три разряда (триады) и представить каждую группу цифрой в восьмеричной системе счисления. Крайние неполные триады дополняются необходимым количеством незначащих нулей. 26
Пример. Двоичное число 10101011111101(2) записать в восьмеричной системе счисления. 010 101 011 111 101( 2 ) = 25375 ( 8 ) 2 5 3 7 5
Пример. Двоичное число 1011.0101(2) записать в восьмеричной системе счисления. 001 011. 010 100 (2 ) 1
3
2
= 13.24 (8 )
4
Перевод из восьмеричной системы счисления в двоичную осуществляется путем представления каждой цифры восьмеричного числа трехразрядным двоичным числом (триадой). 2.4. Шестнадцатеричная система счисления Эта система счисления имеет основание S = 16. В общем виде шестнадцатеричное число выглядит следующим образом:
X = ε r 16 r + ε r −116 r −1 + ... + ε 1161 + ε 0 16 0 + ε −116 −1 + ε −2 16 −2 + ... , где ε i = 0,9, A, B,C, D, E, F . A(16 ) = 10(10 ) D(16 ) = 13(10 )
B(16 ) = 11(10) E(16 ) = 14(10 )
C(16) = 12(10) F(16 ) = 15(10) .
Шестнадцатеричная система счисления позволяет еще короче записывать многоразрядные двоичные числа и, кроме того, сокращать запись 4-разрядного двоичного числа, т.е. полубайта, поскольку 16=24. Шестнадцатеричная система также применяется в текстах программ для более краткой и удобной записи двоичных чисел. Для перевода числа из двоичной системы счисления в шестнадцатеричную необходимо разбить это число влево и вправо от точки на тетрады и представить каждую тетраду цифрой в шестнадцатеричной системе счисления.
Пример. Двоичное число 10101011111101(2) записать в шестнадцатеричной системе. 0010 1010 1111 1101( 2 ) = 2 AED(16 ) A E D 2
Пример. Двоичное число 11101.01111(2) записать в шестнадцатеричной системе. 0001 1101. 0111 1000 ( 2 ) = 1D.78 (16 ) D 1 7 8 Для перевода числа из шестнадцатеричной системы счисления в двоичную, необходимо, наоборот, каждую цифру этого числа заменить тетрадой. В заключение следует отметить, что перевод из одной системы счисления в другую произвольных чисел можно осуществлять по общим правилам, описанным в разделе “Двоичная система счисления”. Однако на практике переводы чисел из десятичной системы в рассмотренные системы счисления и обратно осуществляются через двоичную систему счисления. Кроме того, следует помнить, что шестнадцатеричные и восьмеричные числа – это только способ представления больших двоичных чисел, которыми фактически 27
оперирует процессор. При этом шестнадцатеричная система оказывается предпочтительнее, поскольку в современных ЭВМ процессоры манипулируют словами длиной 4, 8, 16, 32 или 64 бита, т.е. длиной слов, кратной 4. В восьмеричной же системе счисления предпочтительны слова, кратные 3 битам, например слова длиной 12 бит (как в PDP-8 фирмы DEC). 2.5. Двоичная арифметика Правила выполнения арифметических действий над двоичными числами определяются арифметическими действиями над одноразрядными двоичными числами. Сложение Вычитание Умножение 0+0 =0 0 +1= 1
0−0 =0 1− 0 = 0
0*0 = 0 1* 0 = 0
1+ 0 = 1 1 + 1 = 10
1− 1 = 0 10 − 1 = 1
0 *1= 0 1* 1 = 1
↑↵
перенос в старший разряд Правила выполнения арифметических действий во всех позиционных системах счисления аналогичны.
2.5.1. Сложение Как и в десятичной системе счисления, сложение двоичных чисел начинается с правых (младших) разрядов. Если результат сложения цифр МЗР обоих слагаемых не помещается в этом же разряде результата, то происходит перенос. Цифра, переносимая в соседний разряд слева, добавляется к его содержимому. Такая операция выполняется над всеми разрядами слагаемых от МЗР до СЗР. Пример. Сложить два числа в десятичном и двоичном представлении (формат – 1 байт). Перенос (единицы) Слагаемое 1 Слагаемое 2 Сумма
11 099(10) 095(10) 194(10)
1111111 01100011(2) 01011111(2) 11000010(2)
Операция получается громоздкая со многими переносами, но удобная для ЭВМ.
2.5.2. Вычитание Операция вычитания двоичных чисел аналогична операции в десятичной системе счисления. Операция вычитания начинается, как и сложение, с МЗР. Если содержимое разряда уменьшаемого меньше содержимого одноименного разряда вычитаемого, то происходит заем 1 из соседнего старшего разряда. Операция повторяется над всеми разрядами операндов от МЗР до СЗР. Поясним это примером. Пример. Вычесть два числа в десятичном и двоичном представлении (формат – 1 байт). Заем (единица) Уменьшаемое Вычитаемое Разность
1 109(10) 049(10) 060(10)
01100000 01101101(2) 00110001(2) 00111100(2) 28
Второй вариант операции вычитания – когда уменьшаемое меньше вычитаемого – приведен в разделе представления двоичных чисел в дополнительном коде.
2.5.3. Умножение Как и в десятичной системе счисления, операция перемножения двоичных многоразрядных чисел производится путем образования частичных произведений и последующего их суммирования. Частичные произведения формируются в результате умножения множимого на каждый разряд множителя, начиная с МЗР. Каждое частичное произведение смещено относительно предыдущего на один разряд. Поскольку умножение идет в двоичной системе счисления, каждое частичное произведение равно либо 0 (если в соответствующем разряде множителя стоит 0), либо является копией множимого, смещенного на соответствующее число разрядов влево (если в разряде множителя стоит 1). Поэтому умножение двоичных чисел идет путем сдвига и сложения. Таким образом, количество частичных произведений определяется количеством единиц в множителе, а их сдвиг – положением единиц (МЗР частичного произведения совпадает с положением соответствующей единицы в множителе). Положение точки в дробном числе определяется так же, как и при умножении десятичных чисел. Пример. Вычислить произведение 17(10)*12(10) в двоичной форме. 17 (10)=00010001 (2); 12 (10)=00001100 (2) 00010001 * 00001100 - сдвинуто на 2 разряда + 10001 10001 - сдвинуто на 3 разряда 11001100 = 204 (10)
Естественно, что при сложении частичных произведений в общем случае возникают переносы. Теперь рассмотрим машинный вариант операции перемножения. Общий алгоритм перемножения имеет вид Z = X * Y = sign(Z) * X * Y , ⎧+, sign(X) = sign(Y) sign(Z) = ⎨ ⎩−, sign(X) ≠ sign(Y) .
Как отмечалось выше, операция перемножения состоит в формировании суммы частичных произведений, которые суммируются с соответствующими сдвигами относительно друг друга. Этот процесс суммирования можно начинать либо с младшего, либо со старшего частичного произведения. В ЭВМ процессу суммирования придают последовательный характер, т.е. формируют одно частичное произведение, к нему с соответствующим сдвигом прибавляют следующее и т.д. (т.е. не формируют все частичные произведения, а потом их складывают). В зависимости от того, с какого частичного произведения начинается суммирование (старшего или младшего), сдвиг текущей суммы осуществляется влево или вправо. При умножении целых чисел для фиксации результата в разрядной сетке число разрядов должно равняться сумме числа разрядов в X и Y. Рассмотрим на примере два машинных варианта выполнения умножения целых чисел: начиная со старшего частичного произведения (“старшими разрядами впе29
ред”) и начиная с младшего частичного произведения (“младшими разрядами вперед”).
Пример. Найти произведение двух чисел X*Y=1101(2)*1011(2)=13(10)*11(10)= 143(10). Обозначим Pi – i-е частичное произведение. 1. Умножение старшими разрядами вперед: Y=
1011 1101 11010 0000 11010 110100 + 1101 1000001 10000010 + 1101 +
10001111
P4 сдвиг на 1 разряд влево P3 сумма P4 + P3 сдвиг на 1 разряд влево P2 сумма P4+P3+P2 сдвиг на 1 разряд влево P1 сумма P4+P3+P2+P1 (результат) = 143(10)
2. Умножение младшими разрядами вперед: Y=
1011 1101 +
01101 1101 100111
P1 сдвиг на 1 разряд вправо P2 сумма P1 + P2
100111 сдвиг на 1 разряд вправо 0000 P3 100111 сумма P1+P2+P3
+
0100111 сдвиг на 1 разряд вправо 1101 P4 10001111 сумма P1+P2+P3+P4 (результат)=143(10)
+
2.5.4. Деление Деление – операция, обратная умножению, поэтому при делении двоичных чисел, так же как и в десятичной системе счисления, операция вычитания повторяется до тех пор, пока уменьшаемое не станет меньше вычитаемого. Число этих повторений показывает, сколько раз вычитаемое укладывается в уменьшаемом. Пример. Вычислить 204(10) /12(10) в двоичном коде. 204(10)=11001100(2); 12(10)=1100(2) 11001100 1100 -1100 10001, т.е. результат 10001(2)=17(10) 01 0 011 0 110 0 1100 1100 0
30
Таким образом, процедура деления не так проста для машинной реализации, поскольку постоянно приходится выяснять, сколько раз делитель укладывается в определенном числе. В общем случае частное от деления получается дробным, причем выбор положения точки совершенно аналогичен тому, как это делается при операциях с десятичными числами.
Пример. Вычислить 1100.011(2)/10.01(2).
- 1100011 10010 10010 101.1 -11011 10010 - 10010 10010 0
2.6. Прямой, обратный и дополнительный коды
В целях упрощения выполнения арифметических операций и определения знака результата применяют специальные коды для представления чисел. Операция вычитания (или алгебраического сложения) чисел сводится к арифметическому сложению кодов, облегчается выработка признаков переполнения разрядной сетки. В результате упрощаются устройства, выполняющие арифметические операции. Для представления чисел со знаком в ЭВМ применяют прямой, обратный и дополнительный коды. Общая идея построения кодов такова. Код трактуется как число без знака, а диапазон представляемых кодами чисел без знака разбивается на два поддиапазона. Один из них представляет положительные числа, другой – отрицательные. Разбиение выполняется таким образом, чтобы принадлежность к поддиапазону определялась максимально просто. Наиболее распространенным и удобным является формирование кодов таким образом, чтобы значение старшего разряда указывало на знак представляемых чисел, т.е. использование такого кодирования позволяет говорить о старшем разряде как о знаковом (бит знака) и об остальных как о цифровых разрядах кода.
2.6.1. Прямой код Это обычный двоичный код, рассмотренный в разделе двоичной системы счисления. Если двоичное число является положительным, то бит знака равен 0, если двоичное число отрицательное, то бит знака равен 1. Цифровые разряды прямого кода содержат модуль представляемого числа, что обеспечивает наглядность представления чисел в прямом коде (ПК). Рассмотрим однобайтовое представление двоичного числа. Пусть это будет 28(10). В двоичном формате – 0011100(2) (при однобайтовом формате под величину числа отведено 7 разрядов). Двоичное число со знаком будет выглядеть так, как показано на рис. 2.1. +28(10)=00011100(2) 0
модуль a
–28(10)=10011100(2) 1
модуль б
Рис. 2.1. Формат двоичного числа со знаком в прямом коде: а – положительное число; б – отрицательное
31
Сложение в прямом коде чисел, имеющих одинаковые знаки, достаточно просто: числа складываются, и сумме присваивается знак слагаемых. Значительно более сложным является алгебраическое сложение в прямом коде чисел с разными знаками. В этом случае приходится определять большее по модулю число, производить вычитание модулей и присваивать разности знак большего по модулю числа. Такую операцию значительно проще выполнять, используя обратный и дополнительный коды.
2.6.2. Обратный код В обратном коде (ОК), так же как и в прямом коде, для обозначения знака положительного числа используется бит, равный нулю, и знака отрицательного – единица. Обратный код отрицательного двоичного числа формируется дополнением модуля исходного числа нулями до самого старшего разряда модуля, а затем поразрядной заменой всех нулей числа на единицу и всех единиц на нули. В знаковом разряде обратного кода у положительных чисел будет 0, а у отрицательных – 1. На рис. 2.2 приведен формат однобайтового двоичного числа в обратном коде. +28(10)=00011100(2) 0
модуль a
–28(10)=11100011(2) 1 инверс.модуль б
Рис. 2.2. Формат двоичного числа со знаком в обратном коде: а – положительное число; б – отрицательное В общем случае ОК является дополнением модуля исходного числа до наибольшего числа без знака, помещенного в разрядную сетку. Алгоритм формирования ОК очень прост, при этом ОК позволяет унифицировать операции сложения и вычитания в АЛУ, которые в прямом коде выполняются по-разному. Однако работа с ОК вызывает ряд трудностей. В частности, возникают два нуля: +0 и -0, т.е. в прямом коде (в котором представлены положительные числа) имеет место (+0) = 000...0, а в обратном коде (в котором представлены отрицательные числа): (-0) = 111...1. Кроме того, в операциях сложения и вычитания требуется дополнительная операция по прибавлению бита переноса в младший разряд суммы. Рассмотрим правила алгебраического сложения в ОК (поскольку А-В=А+(-В)). Алгоритм сложения в ОК содержит:
• сложение кодов, включая знаковый разряд; • прибавление переноса к МЗР (младшему значащему разряду) суммы.
Пример. Вычислить выражение -3(10) -2(10). Прямой код -3(10) 1 011 + + -2(10) 1 010
Измен. Измен.
Обратный код 1 100 + 1 101 11 001 =1010 Бит знака равен 1, следовательно, результат отрицательный в ОК. перенос Результат в ПК имеет вид: 1101 или -5(10).
32
Пример. Вычислить 7(10)-3(10). Прямой код
Обратный код
7(10) 0 111 Не измен. + + -3(10) 1 011 Измен.
0 111 + 1 100 10 011 =0100 Бит знака равен 0, следовательно, результат полоперенос жительный +4(10) в ПК.
Указанные трудности привели к тому, что в современных ЭВМ абсолютное большинство операций выполняется в дополнительном коде.
2.6.3. Дополнительный код Дополнительный код (ДК) строится следующим образом. Сначала формируется обратный код (ОК), а затем к младшему разряду (МЗР) добавляют 1. При выполнении арифметических операций положительные числа представляются в прямом коде (ПК), а отрицательные числа – в ДК, причем обратный перевод ДК в ПК осуществляется аналогичными операциями в той же последовательности. На рис. 2.3 рассмотрена цепь преобразований числа из ПК в ДК и обратно в двух вариантах. ПК (-) инверс числа (кроме знака)
ОК
инверс ПК модуль
ОК
+1
ДК (-)
+1
ДК
инверс (кроме знака) инверс
ДК
ДК
+1
ПК (-) числа
+1
ПК модуль
(-) Рис. 2.3. Два варианта преобразования чисел из ПК в ДК и обратно Пример. Число -5(10) перевести в ДК и обратно (первый вариант).
1 101 ПК (-) 1 010 ОК (-) + 1 1 011 ДК (-)
1 011 ДК (-) 1 100 ДК (-) + 1 1 101 ПК (-)
Пример. Число -5(10) перевести в ДК и обратно (второй вариант).
0 101 мод. ПК 1 010 ОК (-) + 1 1 011 ДК (-)
1 011 ДК (-) 0 100 ДК + 1 0 101 мод. ПК
Использование ДК для представления отрицательных чисел устраняет двусмысленное представление нулевого результата (наличие двух нулей: +0 и -0), так как -0 исчезает. 33
В общем случае использованием ДК для записи отрицательных чисел можно перекрыть диапазон десятичных чисел от -2k-1 до +2k-1-1, где k – число используемых двоичных разрядов, включая знаковый. Так, с помощью одного байта можно представить десятичные числа от -128 до +127 либо только положительные числа от 0 до 255 (здесь под положительными числами понимаются числа без знака). В табл.2.1 приведены 4-разрядные двоичные числа от 0000 до 1111 и десятичные числа для представления их со знаком и без знака. Из этой таблицы следует, что в формате 4разрядного двоичного числа могут быть представлены десятичные числа со знаком в диапазоне от -8 до +7 или десятичные числа без знака в диапазоне от 0 до +15. Оба способа представления чисел широко используются в ЭВМ. Таблица 2.1 Представление десятичных чисел одним полубайтом 4 - разрядное Десятичные эквиваленты Десятичные эквиваленты двоичное число двоичного числа со знаком двоичного числа без знака 0000 +0 0 0001 +1 1 .... ПК ... ... 0110 +6 6 0111 +7 7 1000 -8 8 1001 -7 9 1010 -6 10 .... ДК ... ... 1110 -2 14 1111 -1 15 В ЭВМ используется быстрый способ формирования ДК.При этом двоичное число просматривается от МЗР к СЗР. Пока встречаются нули, их копируют в разряды результата. Первая встретившаяся единица также копируется в соответствующий разряд, а каждый последующий бит исходного числа заменяется на противоположный (0 на 1, 1 на 0). Пример. Число -44(10) (10101100 (2)) перевести в ДК и обратно. 1
0101
100
Проверка: ПК 1 0101100
ПК
инверсия
инвертируется сохраняется
1
1010
100
1 1010011 + 1 1 1010100
ДК
инвертируется сохраняется
1
0101
100
ОК ДК
ПК
Пример. Перевести в ДК модуль числа -44.
0 0101
100
Инверс.
Сохран.
1 1010
100
ПК числа без знака ДК (-44)
Видно, что результаты преобразований обоими методами совпадают. 34
2.6.4. Сложение и вычитание в дополнительном коде При выполнении арифметических операций в современных ЭВМ используется представление положительных чисел в прямом коде (ПК), а отрицательных – в обратном (ОК) или в дополнительном (ДК) кодах. Это можно проиллюстрировать схемой на рис. 2.4. ПК ОК ДК
0 Мод.дв.числа 0 Мод.дв.числа 0 Мод.дв.числа
1 Мод.дв.числа 1 Мод.дв.числа 1 ОК+1МЗР
а
б
Рис. 2.4. Представление чисел в ЭВМ: а – положительное число; б – отрицательное число Общее правило. При алгебраическом сложении двух двоичных чисел, представленных обратным (или дополнительным) кодом, производится арифметическое суммирование этих кодов, включая разряды знаков. При возникновении переноса из разряда знака единица переноса прибавляется к МЗР суммы кодов при использовании ОК и отбрасывается при использовании ДК. В результате получается алгебраическая сумма в обратном (или дополнительном) коде. Рассмотрим подробнее алгебраическое сложение для случая представления отрицательных чисел в ДК. При алгебраическом сложении чисел со знаком результатом также является число со знаком. Суммирование происходит по всем разрядам, включая знаковые, которые при этом рассматриваются как старшие. При переносе из старшего разряда единица переноса отбрасывается и возможны два варианта результата: • знаковый разряд равен нулю: результат – положительное число в ПК; • знаковый разряд равен единице: результат – отрицательное число в ДК. Для определения абсолютного значения результата его необходимо инвертировать, затем прибавить единицу.
Пример. Вычислить алгебраическую сумму 58-23. 58(10) → 0011 1010(2) -28(10) → 1001 0111(2) 1110 1001(2) 0011 1010 1110 1001 1 ← 0010 0011(2) перенос +
- ПК - ПК - ДК
Число отрицательное - необходимо перевести в ДК (быстрый перевод) Перенос из знакового разряда отбрасываем. Число является положительным в ПК. (ПК) = 35(10)
Пример. Вычислить алгебраическую сумму 26-34. 26(10) → 0001 1010(2) -34(10) → 1010 0010(2) 1101 1110(2)
.
0001 1010 1101 1110 1111 1000(2) 0← перенос +
- ПК - ПК - ДК
Быстрый перевод
Перенос из знакового разряда отсутствует. Число отрицательное в ДК, так как знаковый разряд равен 1.
35
.Вычислим результат, преобразовав его из ДК в ПК : 1111 1000(2)
(ДК)
1000 0111 Инверсия всех разрядов, кроме знакового + 1 1000 1000(2) (ПК) = - 8(10)
Пример. Вычислить алгебраическую сумму -5-1. -5(10) → 1101 (ПК) →1011 (ДК) -1(10) → 1001 (ПК) →1111 (ДК) 1011 + 1111 1 ← 1010 (2) перенос
Перенос из знакового разряда отбросить. Число отрицательное в ДК, так как знаковый разряд равен 1.
Запишем результат, преобразовав его из ДК в ПК: 1010(2)
(ДК)
1101 Инверсия значащих разрядов (кроме знакового) + 1 1110(2) (ПК) = - 6(10)
2.6.5. Признак переполнения разрядной сетки При алгебраическом суммировании двух чисел, помещающихся в разрядную сетку, может возникнуть переполнение, т.е. образуется сумма, требующая для своего представления на один двоичный разряд больше, чем разрядная сетка слагаемых. Предполагается, что положительные числа представляются в прямом коде, а отрицательные − в дополнительном. Признаком переполнения является наличие переноса в знаковый разряд суммы при отсутствии переноса из знакового разряда (положительное переполнение) или наличие переноса из знакового разряда суммы при отсутствии переноса в знаковый разряд (отрицательное переполнение). При положительном переполнении результат операции положительный, а при отрицательном переполнении – отрицательный. Если и в знаковый, и из знакового разряда суммы есть переносы или этих переносов нет, то переполнение отсутствует. Рассмотрим простейшие примеры с трехбитовыми словами. Диапазон чисел, которые они представляют, равен от -4 до +3. В рассматриваемых словах 1 бит знака и 2 информационных бита. 1. Алгебраическое суммирование без переноса. 2+1=3 2(10) → 010(2) ПК 1(10) → 001(2) ПК
010(2) 001(2) 0← 011(2) +
ПК = 3(10)
0
перенос
Поскольку перенос в знаковый разряд или из знакового разряда суммы отсутствует, то переполнения нет. Результат – положительное число в ПК, равное 3.
36
2. Алгебраическое суммирование с двумя переносами. -3-1=-4 -3(10) → 111(2) ПК→ 101(2) ДК -1(10) → 101(2) ПК→ 111(2) ДК
101(2) +111 (2) 1← 100(2) 1
ДК=-4(10)
перенос
Имеются переносы в знаковый разряд и из знакового разряда вычисляемой суммы, поэтому переполнения нет. Результат – отрицательное число в ДК, равное -4. 3. Алгебраическое суммирование с одним переносом. (Положительное переполнение). 2+2=4 2(10) → 010(2) ПК 2(10) → 010(2) ПК
010(2) +010 (2) 0← 100(2)
ДК = ?(10)
1
перенос
При суммировании есть перенос в знаковый разряд суммы, а перенос из знакового разряда отсутствует, т.е. имеет место положительное переполнение, и результат операции положительный. Число 4 нельзя представить в прямом коде. Формальный результат равен -4. 4. Алгебраическое суммирование с одним переносом. (Отрицательное переполнение). -3-2=-5 -3(10) → 111(2) ПК→ 101(2) ДК -2(10) → 010(2) ПК→ 110(2) ДК
101(2) +110 (2) 1← 011(2)
ДК=?(10)
0
перенос
Число -5 нельзя представить 3-битовой комбинацией. Формальный результат равен +3. Из рассмотренных ранее примеров видно, что арифметические операции в дополнительном коде выполняются достаточно просто. Необходимо только не упускать из виду то, с какими числами происходит работа в данный момент – без знака или со знаком. Поскольку внешний вид обоих чисел одинаков, возможны ошибки.
2.6.6. Деление в дополнительном коде Деление в дополнительном коде осуществляется по тем же правилам, что были описаны в п. 5.4. разд. "Двоичная арифметика". Но метод деления "столбиком" для ЭВМ не пригоден. Используются более громоздкие методы деления, которые здесь не рассматриваются. Информацию о них можно найти в литературе, приведенной в конце главы. 2.6.7. Правило перевода из дополнительного кода в десятичную систему Перевод чисел из дополнительного кода в десятичную систему можно проводить по схеме, приведенной на рис. 2.5. Однако существует прямой способ перевода числа из ДК в десятичную систему без использования промежуточного перевода в ПК. 37
ДК
ПК
Десятичная система счисления
Рис. 2.5. Схема перевода из ДК в десятичную систему
Рассмотрим машинное слово произвольной длины (рис. 2.6). При прямом способе перевода десятичное число со знаком формируется как сумма разрядов со своими весами и знаками (старший N-й разряд имеет отрицательный вес). Номер разряда Вес разряда
N-1 N-2 N-3 знак N-1 N-2 N-3 -2 2 2
...
1
0
...
2
1
2
0
Рис. 2.6. Машинное слово длиной N
Проиллюстрируем перевод чисел из ДК в десятичную систему примерами.
Пример. Перевести число 1110 из ДК в десятичную систему. 1 1 1 0(2) (ДК) = -8+4+2 = -2(10) Вес →
-23 22 21 20
Проверим правильность перевода, используя промежуточный перевод в ПК: 1 110 число в ДК инверсия 1 001 + 1 1 010
число в ПК, т.е. 1010(2) = -(0+21+0) = -2(10)
Пример. Перевести число 101100 из ДК в десятичную систему. 101100(2) (ДК) = -25+23+22 = -32+8+4 = -20(10) Проверим: 1 01100 число в ДК инверсия 1 10011 + 1 1 10100 число в ПК, т.е.
110100(2)=-(24+22)=-20(10)
2.6.8. Модифицированные коды Эти коды отличаются от прямого, обратного и дополнительного кодов тем, что на изображение знака отводится два разряда: если число положительное – 00, если число отрицательное – 11. Такие коды оказались удобны (с точки зрения построения АЛУ) для выявления переполнения разрядной сетки. Если знаковые разряды ре38
зультата принимают значение 00 и 11, то переполнения разрядной сетки не было, а если 01 или 10 – то было переполнение. Вернемся к примерам в п. 2.6.5. 2+1=3 0010 + 0001 0011
2+2=4 +
0010 0010 0110
-3 - 1 = -4 1101 + 1111 1100 – знаковые – разряды
В этих примерах переполнения нет
-3 - 2 = -5 + – знаковые – разряды
1101 1110 1011
В этих примерах переполнение есть
В предыдущих разделах рассмотрены основные принципы выполнения арифметических операций, из которых видно, что все арифметические операции с двоичными числами могут быть сведены к операциям суммирования в прямом или дополнительном кодах, а также операциям сдвига двоичного числа вправо или влево. Реальные алгоритмы выполнения операций умножения и деления в современных ЭВМ достаточно громоздки и здесь не рассматриваются.
2.6.9. Арифметика повышенной точности Проблема точности возникает, как правило, при работе с микро- и миниЭВМ, имеющих небольшую длину машинного слова (1-2 байта). Рассмотрим микропроцессор, работающий со словами длины 1 байт. Этот формат позволяет представить целые числа в диапазоне от -128 до 127. Очевидно, что для решения большинства задач такого диапазона чисел недостаточно. Использование двух однобайтовых слов (16 бит) позволяет представить уже числа в диапазоне от -32768 до 32767. Это так называемые числа с двойной точностью. Иногда используются числа тройной точности (1 бит – знак и 23 бита для модуля числа). Это обеспечивает диапазон уже от -8388608 до 8388607, т.е. точность существенно повышается. Однако при работе с арифметикой повышенной точности требуется больший объем памяти для хранения того же объема данных и более интенсивная работа процессора. Увеличение объема требуемой памяти достаточно очевидно. Рассмотрим очень коротко последовательность операций при сложении чисел с тройной точностью. Здесь уже недостаточно извлечь два слова из памяти, сформировать сумму в аккумуляторе и переслать результат в однобайтовую ячейку памяти. Сначала необходимо произвести обращение к младшему значащему байту каждого числа. После сложения результат записывается в память, а возможные при этом переносы подлежат временному хранению. Затем извлекаются средние по значимости байты, их складывают и к сумме добавляют биты переноса, полученные в результате предыдущей операции. Результат записывается в память на место, специально зарезервированное для среднего байта суммы. Со старшим байтом поступают аналогично. Таким образом, при использовании арифметики тройной точности требуются в три раза большие объем памяти и время на операции сложения по сравнению с арифметикой одинарной точности. Кроме того, в случае возникновения прерываний необходимо временно хранить содержимое регистра переносов (то же самое для вычитания, умножения и деления). 39
2.7. Представление дробных чисел в ЭВМ. Числа с фиксированной и плавающей запятой В ЭВМ числа представлены в двоичной форме и под число отводится N разрядов. N-разрядное двоичное число называют машинным словом. Диапазон представления чисел можно расширить за счет использования машинных слов двойной и большей длины. Но увеличение длины слова не может разрешить всех проблем представления чисел. Рассмотрим, как обращаться с дробной частью числа, как представлять очень большие и очень малые числа. Используют две формы представления чисел: • числа с плавающей запятой (точкой), которые сокращенно называются ЧПЗ (ЧПТ); • числа с фиксированной запятой (точкой) – ЧФЗ (ЧФТ), которые подразделяются по месту фиксации запятой на: - слева от СЗР (дробные |X| < 1); - справа от МЗР (целые).
2.7.1. Числа с фиксированной запятой Первые ЭВМ были машинами с фиксированной запятой, причем запятая фиксировалась перед старшим разрядом. В настоящее время форму ЧФЗ, как правило, применяют для представления целых чисел (запятая фиксируется после младшего разряда). Следует отметить, что нумерация разрядов в слове может быть разная. Наиболее распространенной в настоящее время является нумерация разрядов справа налево. Между тем, возможна нумерация и слева направо, которая традиционно использовалась в старых мэйнфреймах, например IBM-360/370 и некоторых других ЭВМ, в том числе и миниЭВМ. Поскольку фиксация точки слева от СЗР в настоящее время практически не используется, рассмотрим только формат представления целых чисел на примере 32-разрядного слова, используемого в мэйнфреймах IBM-360 (рис. 2.7). Аналогичный формат используется и в современных 32-разрядных процессорах, причем нумерация разрядов может быть как справа налево, так и слева направо. 30
2 2
Вес
29
1
0
...
2 2
...
30 31
знак Номер разряда
0
1 2
Рис. 2.7. Формат представления целых чисел в ЭВМ Целые числа могут быть представлены как в формате слова (32 разряда), так и в формате полуслова (16 разрядов). Используют два варианта представления целых чисел – со знаком и без знака. В последнем случае все разряды служат для представления модуля числа. В ЭВМ реализуются оба этих варианта в формате слова и полуслова. В мини- и микроЭВМ разрядность слова обычно меньше (16 бит), но формат представления целых чисел аналогичен рассмотренному (рис. 2.8), за исключением того, что нумерация разрядов в большинстве случаев осуществляется в другую сторону. Следует иметь в виду, что в мини- и микроЭВМ целые числа могут быть представлены как в формате слова (16 или 8 бит), так и в формате двойного слова (32 или 16 бит). В микроЭВМ целые числа часто представляют без знака в формате слова (8 бит) или двойного слова. В современных ЭВМ, как правило, слова содержат целое число байт, кратное степени двойки (1,2,4… байта). 40
14
Вес Номер разряда
2 2
13
знак 15 14 13 6
5
Вес
2 2
Номер разряда
знак 7 6 5
1
0
...
2 2
...
1 0
...
2 2
...
1 0
1
0
Рис. 2.8. Формат представления целых чисел в мини- и микроЭВМ
Рассмотрим диапазон представления чисел с фиксированной запятой (только целых чисел, т.е. точка фиксирована справа от МЗР). Если в разрядной сетке N разрядов, то под модуль числа отводится N-1 разряд (число со знаком). Самое большое по модулю число, записанное в такой сетке, имеет вид N-2
0
Номер разряда
|X|max = 1 1 1 1 . . . 1 + 1 N-1 N-1 N-1 → 1 0 0 0 0 . . . 0 =2 ; → |X|max +1 = 2
разряд
Следовательно, |X|max = 2N-1 -1 или 0 ≤|X|≤ 2N-1 - 1. При записи отрицательных чисел в дополнительном коде наибольшее по модулю отрицательное число – это -2N-1. Но модуль этого числа при такой же разрядной сетке (N бит) получить уже нельзя. Поэтому диапазон представления десятичных чисел N-разрядным двоичным числом определяется следующим выражением: -2N-1≤X≤ 2N-1-1 . В табл. 2.2 приведены диапазоны представления десятичных чисел 8-, 16- и 32разрядными двоичными числами. N Xmax Xmin
8 127 -128
16 32767 -32768
Таблица 2.2 32 2147483647 - 2147483648
При решении расчетных задач на ЭВМ с фиксированной точкой для предотвращения переполнения разрядной сетки при подготовке к решению приходится вводить масштабные коэффициенты, которые не позволяют числам, участвующим в решении, и результатам превышать по модулю максимальное машинное число. В настоящее время представление чисел с фиксированной запятой используется как основное и единственное лишь в сравнительно небольших по своим вычислительным возможностям машинах. Подобные ЭВМ применяют в системах передачи данных, для управления технологическими процессами, для обработки измерительной информации в реальном масштабе времени, для построения кодирующих и декодирующих устройств в каналах связи. В ЭВМ общего назначения основным является представление чисел с плавающей запятой. 2.7.2. Числа с плавающей запятой Представление чисел в виде ЧПЗ позволяет избавиться от операции масштабирования при вычислениях, поскольку диапазон представляемых чисел существенно расширяется по сравнению с ЧФЗ. Однако в большинстве ЭВМ общего назначе-
41
ния, для целых чисел сохраняется возможность представления в виде ЧФЗ. Операции с ЧФЗ всегда выполняются за меньшее время, чем операции с ЧПЗ. В частности, к операциям с целыми числами сводятся операции над кодами адресов (операции индексной арифметики). Представление чисел с плавающей запятой в общем случае имеет вид: X = Sp*q;
|q||q|≥1/S, т.е. старший разряд мантиссы в S-ричной системе счисления отличен от нуля, иначе число не нормализовано. Так, например, в десятичной системе счисления число 0.00726*10-3 не нормализовано, а число 0.726*10-5 – нормализовано. В процессе вычислений числа могут оказаться ненормализованными. Обычно ЭВМ автоматически нормализует такие числа, выполняя ряд действий. На рис. 2.9 представлен обобщенный формат представления ЧПЗ в микро- и миниЭВМ.
...
N-1 знак PСМ 1
0 q
k+1
N-k-2
Рис. 2.9. Формат представления ЧПЗ в мини- и микроЭВМ Пусть r старших разрядов S-ричной мантиссы равны нулю. Тогда нормализация состоит: - из сдвиг мантиссы на r разрядов влево; - уменьшения PСМ на r единиц; - запись нуля в r младших разрядах мантиссы. При этом число не изменяется, а условия нормализации выполняются. Пример. Нормализовать двоичное число. Ненормализованное двоичное число: 1
001*0.010=(2 *0.25)(10)=0.5(10) p q Нормализованное двоичное число:
42
pнорм=p-1;
q - сдвиг на 1 разряд влево
000*0.100=(20*0.50)(10)=0.5(10) pнорм qнорм
Пример. Нормализовать двоичное число. Ненормализованное двоичное число: 3
011*0.011=(2 *0.375)(10)=3(10) p q
Нормализованное двоичное число: pнорм=p-1;
q - сдвиг на 1 разряд влево
010*0.110=(22*0.750)(10)=3(10) pнорм qнорм
Следует иметь в виду, что нормализация может происходить в другую сторону, если в результате выполнения операции слева от точки появилась единица. В этом случае необходимо выполнить следующие операции: - сдвиг мантиссы на один разряд вправо; - увеличение PСМ на единицу. В различных ЭВМ числа с плавающей запятой используются в системах счисления с различными основаниями S, но равными целым степеням числа 2, т.е. S=2W. При этом порядок представляют целым числом, а мантиссу q – числом, в котором группы по W двоичных разрядов изображают цифры мантиссы с основанием системы счисления S=2W. В современных ЭВМ используются, как правило, S = 2, 16. Использование S>2 позволяет: - расширить диапазон представления чисел; - ускорить выполнение операций нормализации, поскольку сдвиг может сразу происходить на несколько разрядов (при S=16 – сдвиг на 4 разряда). Пример. В результате операции получили (S=16): порядок
мантисса
X=1000 * 0.0000 0101 = 168*5/162=5*166(10) 0 5(10) 8(10) вес: 1/16 1/162
Произведем нормализацию. Для этого q нужно сдвинуть влево на один шестнадцатеричный разряд, т.е. на 4 двоичные единицы, а из P вычесть 1. В результате получим X=0111 * 0.0101 = 167*5/16=5*166(10) 5(10) 7(10) вес: 1/16 Итак, диапазон представляемых в ЭВМ чисел с плавающей запятой зависит от основания системы счисления S и числа разрядов, выделенных для P. Точность вычисления для ЧПЗ определяется числом разрядов q. С увеличением числа разрядов q увеличивается точность, но одновременно увеличивается и время выполнения арифметических операций. Ввиду этого использование S, отличного от 2, несколько уменьшает точность вычислений при фиксированном числе двоичных разрядов q. Традиционно шестнадцатеричная арифметика используется в мэйнфреймах. 43
Задачи, решаемые на ЭВМ, предъявляют различные требования к точности вычисления, поэтому большинство машин общего назначения имеют несколько форматов ЧПЗ с различным числом разрядов q. Рассмотрим только короткие форматы ЧПЗ в ЭВМ с 32-разрядным словом, использующих шестнадцатеричную (S=16) и двоичную (S=2) системы счисления. Формат ЧПЗ при S=16 представлен на рис. 2.10. Модуль мантиссы шестнадцатеричный знак 0
PСМ 1…7
d1 d2 8…11 12…15
… ...
d5 d6 24…27 28…31
d – шестнадцатеричные цифры, состоящие из 4 бит Рис. 2.10. Формат ЧПЗ при S=16
Всего под q отведено 24 двоичных разряда. Общая длина слова N – 32 двоичных разряда. Еще есть длинный формат (64 бита) и расширенный (128 бит). Во всех форматах под PСМ отведено по 7 двоичных разрядов (с первого по седьмой). Если бы порядок был несмещенный, то один двоичный разряд отводился бы под знак порядка и k разрядов – под модуль (k = 6). При этом диапазон изменения модуля несмещенного порядка P составил бы 0 ÷ 2k-1 или 0 ÷ 63, а полный диапазон изменения порядка Р = (-64) ÷ (+63). Выражение для смещенного порядка соответственно имеет вид PCM = P + R = 2 k − 1 + 2 k = 2 k +1 − 1 . Таким образом, при S=16 диапазон изменения PСМ = 0 ÷ 127. Следует иметь в виду, что при изображении машинного слова с помощью шестнадцатеричных символов первые две старшие шестнадцатеричные цифры представляют совместно знак числа и смещенный порядок. Формат ЧПЗ при S=2 представлен на рис. 2.11. Модуль мантиссы двоичный знак 31
P СМ 30...23 22
q (23 разряда) ...
0
Рис. 2.11. Формат ЧПЗ при S=2
Общая длина слова N – 32 двоичных разряда. Обычно еще есть длинный формат, имеющий N = 64 бита. В обоих форматах под смещенный порядок отведено 8 двоичных разрядов. Таким образом, диапазоны изменения смещенного и несмещенного порядков составляют соответственно PСМ = 0...255 и P = -128...+127 . Поскольку числа в памяти хранятся в нормализованной форме, старший разряд q всегда равен единице, поэтому он не запоминается, а подразумевается., В таких ЭВМ точность представления числа фактически определяется мантиссой q в 24 двоичных разряда (короткий формат) и 56 двоичных разрядов (длинный формат). Рассмотрим только короткие форматы. Диапазон представления ЧПЗ определяется значением S и числом разрядов, отведенных под P. Двоичное основание (S=2): (k=7) Xmax=2127→ 1038 . 44
Шестнадцатеричное основание (S=16): (k=6) Xmax=1663→ 1076 . Точность представления ЧПЗ определяется значением S и числом разрядов мантиссы в соответствующей системе счисления. И при S=16, и при S=2 под q отведено фактически 24 двоичных разряда: • при S=2: 24 двоичных разряда обеспечивают точность, соответствующую семи десятичным разрядам; • при S=16: точность при использовании короткого слова (N = 32) ниже за счет другого способа нормализации, т.е. в q могут быть три нуля слева, поскольку шестнадцатеричное число при этом еще не равно нулю. В двоичных числах слева всегда единица, то есть разрядная сетка используется полнее. Пояснить это можно на примере 8-разрядной сетки: 0.0001 0101 1111 0.1010 1111 1
при S=16 при S=2
При S=16 нормализация не произойдет, так как d1 не равно нулю. Это приведет к потере четырех младших разрядов результата. При S=2 нормализация произойдет и будет потерян только один младший разряд результата. В связи с этим в ЭВМ с S=16 обычно предусматриваются еще длинный и расширенный форматы. Еще до недавнего времени каждый производитель процессоров пользовался собственным представлением вещественных чисел (чисел с плавающей точкой). За последние несколько лет ситуация изменилась. Большинство поставщиков процессоров в настоящее время для представления вещественных чисел придерживаются стандарта ANSI/IEEE 754-1985 Standard for Binary Floating-Point Arithmetic. Стандарт описывает два основных формата ЧПЗ: одиночный (single – 32 бита) и двойной (double – 64 бита). В IEEE 754 не указан точный размер расширенного формата, но описаны минимальная точность и размер (79 бит). Формат числа – структура, определяющая поля, составляющие число с плавающей запятой, их размер, расположение и интерпретацию. Одиночный формат Одиночный формат состоит из трех полей: 23-разрядной мантиссы f, 8-разрядного смещенного порядка e, знакового бита s (см. рис. 2.12). s
e[30:23] 31 30 . . . 23 22
f[22:0] ...
0
Рис 2.12. Одиночный формат
В табл. 2.3 показано соответствие между значениями трех полей и значением числа с плавающей запятой. Таблица 2.3 Комбинация значений полей Значение s e-127 (-1) × 2 × 1.f 0 < e < 255 (нормализованные числа) (-1)s × 2-126 × 0.f e= 0; f ≠ 0 (по крайней мере, один бит не нулевой) (ненормализованные числа) (-1)s × 0.0 (ноль со знаком) e= 0; f = 0 (все биты нулевые) INF (бесконечность со знаком) e= 255; f = 0 (все биты нулевые) e= 255; f ≠0 (по крайней мере, один бит не нулевой) NaN (Not-a-Number) Значение неявного бита (старшего разряда мантиссы) прямо не задается, но подразумевается значением порядка. 23-разрядная мантисса вместе с неявным битом обеспечивает точность в 24 разряда. 45
Двойной формат Двойной формат состоит из трех полей: 53-разрядной мантиссы f, 11разрядного смещенного порядка e, знакового бита s. Эти поля хранятся в двух 32разрядных словах, как показано на рис. 2.13. В x86–архитектуре слово с меньшим адресом содержит младшие разряды мантиссы, в то время как, например, в SPARC– архитектуре младшие разряды мантиссы содержит слово с большим адресом. s
e[52:62] 63 62 . . . 52 51
f[51:32] ...
f[31:0] ...
31
32
0
Рис. 2.13. Двойной формат
В табл. 2.4 показано соответствие между значением трех полей и значением ЧПЗ двойной точности. Таблица 2.4 Комбинация значений полей 0 < e < 2047 e = 0; f ≠ 0 e = 0; f = 0 s = 0; e = 2047; f = 0 s = 1; e = 2047; f = 0 e = 2047; f ≠ 0
Значение (-1)s × 2e-1023 × 1.f (нормализованное число) (-1)s × 2-1022 × 0.f (ненормализованное число) (-1)s × 0.0 (ноль со знаком) +INF (положительная бесконечность) -INF (отрицательная бесконечность) NaN (Not-a-Number)
Значение неявного бита (старшего разряда мантиссы) прямо не задается, но подразумевается значением порядка. 53-разрядная мантисса вместе с неявным битом обеспечивает точность в 54 разряда. Расширенный формат (SPARC– архитектура) Расширенный формат состоит из трех полей: 112-разрядной мантиссы f, 15-разрядного смещенного порядка e, знакового бита s. Эти поля хранятся в четырех 32-разрядных словах, как показано на рис. 2.14. В SPARC–архитектуре младшие разряды мантиссы содержит слово с большим адресом. s
e[126:112]
f[111:96] ...
127 126 . . . 112 111
96
95
f[95:64] ...
64
63
f[63:32] ...
32
31
f[31:0] ...
0
Рис. 2.14. Расширенный формат (SPARC архитектура)
В табл. 2.5 показано соответствие между значением трех полей и значением ЧПЗ расширенного формата для SPARC–архитектуры.
46
Таблица 2.5 Комбинация значений полей 0 < e < 32767 e = 0; f ≠ 0 e = 0; f = 0 s = 0; e = 32767; f = 0 s = 1; e = 32767; f = 0 e = 32767; f ≠ 0
Значение (-1) × 2 × 1.f (нормализованное число) s -16382 × 0.f (ненормализованное число) (-1) × 2 s (-1) × 0.0 (ноль со знаком) +INF (положительная бесконечность) -INF (отрицательная бесконечность) NaN (Not-a-Number) s
e-16383
Расширенный формат (х86– архитектура) Расширенный формат состоит из 4-ч полей: 63-разрядной мантиссы f, явного старшего значащего бита j, 15-разрядного смещенного порядка e, знакового бита s. В х86–архитектуре эти поля сохранены в восьми последовательно адресованных 8-разрядных байтах. Однако UNIX System V Application Binary Interface Intel 386 Processor Supplement (Intel ABI) требует, чтобы числа расширенного формата занимали три последовательно адресованных 32-разрядных слова в стеке, оставляя 16 старших бит неиспользованными, как показано на рис. 2.15. 95
... j
63 62
s
e[78:64]
80 79 78
...
f[62:32] ...
64
32
f[31:0] 31 0 ... Рис. 2.15. Расширенный формат (х86 архитектура) В табл. 2.6 показано соответствие между значениями трех полей и значением ЧПЗ расширенного формата для х86–архитектуры.
Таблица 2.6 Комбинация значений полей j = 0; 0 < e < 32767 j = 1; 0 < e < 32767 j = 0; e = 0; f ≠ 0 j
= 1; e = 0
j = 0; e = 0; f = 0 j = 1; s = 0; e = 32767; f = 0 j = 1; s = 1; e = 32767; f = 0 j = 1; e = 32767; f ≠ 0
Значение Не поддерживается (-1)s × 2e-16383 × 1.f (нормализованное число) (-1)s × 2-16382 × 0.f (ненормализованное число) (-1)s × 2-16382 × 0.f (псевдоненормализованное число) (-1)s × 0.0 (ноль со знаком) +INF (положительная бесконечность) -INF (отрицательная бесконечность) quiet или signaling NaN
Мэйнфреймы В мэйнфреймах фирмы IBM используемое еще со времен S/360 шестнадцатеричное представление чисел с плавающей запятой – с шестнадцатеричной мантиссой и характеристикой (HFР) – в ESA/390 (мэйнфреймы серии S/390) дополнено двоичным представлением BFP, удовлетворяющим стандарту IEEE 754. Это представление определяет 3 формата данных – короткий, длинный и расширенный– и 87 новых команд для работы с ними. BFP появилось в ESA/390 относительно недавно, в 1998 году. Одновременно было введено 12 дополнительных регистров FR (общее число FR достигло 16). Кро-
47
ме того, в архитектуре появился управляющий регистр с плавающей запятой и средства сохранения содержания регистров при операции записи состояния. Добавлено еще 8 новых команд, не связанных однозначно с тем или иным представлением данных с плавающей запятой, в том числе 4 – для преобразования между форматами HFP и BFP. Для работы с HFP-данными появилось 26 новых команд, являющихся аналогами соответствующих BFP-команд. Эти новые команды включают, в частности, преобразования между форматами чисел с фиксированной и с плавающей запятой и новые операции с расширенной точностью. В суперкомпьютерах NEC SX-4 (представленных в 1995 году) целые числа могут быть как 32-, так и 64-разрядными. Для чисел с плавающей запятой применяется стандарт IEEE 754 (как для 32-, так и для 64-разрядных чисел). Кроме того, SX-4 может работать со 128-разрядными числами с плавающей запятой расширенной точности и с форматами чисел с плавающей запятой, используемыми в PVP-системах Cray и мэйнфреймах IBM. При этом производительность SX-4 не зависит от формата представления, а сам этот формат выбирается при компиляции. 2.7.3. Сложение (вычитание) ЧПЗ Требуется вычислить Z=X±Y при условии, что |X|≥|Y|. Формальное выражение для выполнения этой операции можно записать следующим образом: Z = X ± Y = q x ⋅ S Px ± q y ⋅ S
Py
qy ⎞ ⎛ = S Px ⎜⎜ q x ± (Px −Py ) ⎟⎟ = q z ⋅ S Pz . S ⎝ ⎠
Алгоритм выполнения операции состоит в следующем: • производится выравнивание порядков, при котором порядок меньшего по модулю числа принимается равным порядку большего, а мантисса меньшего числа сдвигается вправо на число S-ричных разрядов, равное разности (Px-Py), т.е. происходит денормализация; • производится сложение (вычитание) мантисс, в результате чего получается мантисса суммы (разности); • порядок результата равен порядку большего числа; • полученный результат нормализуется.
Пример. Сложить два числа (ЧПЗ) Z=X+Y для S = 2. PX X → 010
qX 0.11
2 *0.75=3 (10)
PY Y → 001
qY 0.10
2 1 *0.5=1 (10)
1. 2.
010
3.
010 PZ 011
4.
Z=011
0.01 +0.11 1.00 1.00 qZ 0.10
2
- выравнивание порядка Y - qx - ненормализованное значение Z - нормализованное значение Z
0.10 = 2 3 * 0.5= 4 (10)
В общем случае сложение и вычитание q производится по правилам сложения и вычитания чисел с фиксированной точкой, т.е. с использованием прямого, обратного и дополнительного кодов.
48
Операции сложения и вычитания чисел с плавающей запятой, в отличие от операций с фиксированной запятой, выполняются приближенно, так как при выравнивании порядков происходит потеря младших разрядов одного из слагаемых (меньшего) в результате его сдвига вправо (погрешность всегда отрицательна).
2.7.4. Умножение ЧПЗ Требуется вычислить Z = X ⋅ Y . Формальное выражение для выполнения этой операции можно записать следующим образом: Z=X*Y=qxSPx*qySPy= qxqyS(Px+Py)=qzSPz . Алгоритм выполнения операции состоит в следующем: • мантиссы сомножителей перемножаются; • порядки сомножителей складываются; • произведение нормализуется; • произведению присваивается знак в соответствии с алгоритмом, приведенным для ЧФЗ, а именно:
Z = X * Y = sign(Z) * X * Y , ⎧+, sign(X) = sign(Y) sign(Z) = ⎨ ⎩−, sign(X) ≠ sign(Y) . В данном случае имеется в виду способ умножения, предполагающий отделение от сомножителей их знаковых разрядов и раздельное выполнение действий над знаками и модулями чисел. Однако на практике в современных ЭВМ используют алгоритмы, не требующие раздельных операций над знаками и модулями, например алгоритм Бута. Информацию о них можно найти в литературе, приведенной в конце главы. Рассмотрим простейший раздельный алгоритм перемножения ЧПЗ. Умножение ЧПЗ сводится к следующим операциям: • алгебраическое суммирование порядков – это операции над целыми числами или ЧФЗ с фиксацией точки справа от МЗР; • перемножение мантисс – это операции над правильными дробями или над ЧФЗ с фиксацией точки слева от СЗР; • определение знака произведения. Операции над целыми числами были рассмотрены ранее. Теперь рассмотрим только перемножение правильных дробей. Вручную дроби можно перемножать столбиком. Подсчет знаков в дробной части такой же, как и при перемножении десятичных дробей. В ЭВМ для перемножения мантисс (как и для целых чисел) возможны два варианта перемножения: "старшими разрядами вперед" и "младшими разрядами вперед". Если требуется сохранить все разряды, то в устройстве, формирующем произведение, число разрядов должно равняться сумме числа разрядов множителя и множимого. Однако часто в произведении требуется сохранить то же количество разрядов, что и в множимом. Это приводит к потере младших разрядов. Рассмотрим пример перемножения двух чисел "младшими разрядами вперед" для случая, когда разрядная сетка результата соответствует разрядной сетке сомножителей.
49
Пример. Вычислить Z=X*Y=0.1101(2) * 0.1011(2) = 0.8125(10) * 0.6875(10) = 0.55859375(10). X= 0. 1 1 0 1 Y= 0. 1 0 1 1 0.1101 0.0110 1 + 0.1101 1.0011 1 0.1001 11 + 0.0000 0.1001 11 0.0100 111 + 0.1101 1.0001 111 0.1000 1111 + 0.0000 0.1000 1111
P1 сдвиг на 1 разряд вправо P2 сумма P1 + P2 сдвиг на 1 разряд вправо P3 сумма P1+P2+P3 сдвиг на 1 разряд вправо P4 сумма P1+P2+P3+P4 сдвиг на 1 разряд вправо - результат
Таким образом, результат Z=0.1000(2)=0.5(10), поскольку последние четыре разряда потеряны. При перемножении мантисс (правильных дробей) последнее сложение можно не делать, а ограничиться просто последним сдвигом. Из примера видно, что если разрядная сетка ограничена числом разрядов X, то результаты правее вертикального пунктира не фиксируются после выполнения сдвигов. Таким образом, четыре младших разряда будут потеряны, и результат будет приближенный 0.1000(2). В ряде случаев используется округление по правилу: если старший из отбрасываемых разрядов содержит 1, то к младшему из сохранившихся разрядов добавляется 1. В данном примере получается число 0.1001(2). В заключение отметим следующее: • если мантисса X или Y равна 0, то перемножение не проводится и Z=0; • если при суммировании PX и PY возникло переполнение и PZ0, может оказаться, что Z все же находится в диапазоне представляемых в ЭВМ чисел, так как после нормализации полученного qZ переполнение в порядке может исчезнуть.
2.7.5. Методы ускорения умножения Рассмотренный в предыдущей теме материал показывает, что умножение – это достаточно длинная операция, состоящая из N суммирований и сдвигов, а также выделений очередных цифр множителя. Из этого следует актуальность задачи максимального сокращения времени, затрачиваемого на операцию умножения, особенно для систем, работающих в реальном масштабе времени. В современных ЭВМ методы ускорения умножения можно разделить: • на аппаратные; • логические (алгоритмические); • комбинированные. 50
Аппаратные методы 1. Распараллеливание вычислительных операций. Например, совмещение во времени суммирования и сдвига. 2. Табличное умножение. Это довольно распространенный способ реализации различных функций. Остановимся на нем подробнее. Пусть X и Y – целые числа длиной в 1 байт. Надо вычислить Z=X*Y. Можно использовать 65 Кбайт памяти и занести в них значения Z для всех возможных комбинаций X и Y, а сомножители X и Y использовать в качестве адреса. Получается своеобразная таблица следующего вида:
X
Y
Z
00...00
00...00
000...000
8 бит .........
8 бит .........
16 бит .........
......... 11..11
......... 11..11
......... 111..111
Адрес
65 к
Содержание
Алгоритмические методы Эти методы разнообразны. Приведем только один пример: при S=16 можно за один такт обрабатывать несколько разрядов множителя (4 разряда). Сдвиги тоже осуществляются на 4 разряда. Следует отметить, однако, что в большинстве случаев алгоритмические методы требуют определенную аппаратную поддержку. Комбинированные методы Рассмотрим пример. Пусть X и Y – 16-разрядные числа. Надо вычислить произведение вида Z=X*Y. Использовать непосредственно табличный метод не удастся, поскольку для этих целей потребуется очень большой объем памяти. Однако можно представить каждый сомножитель как сумму двух 16-разрядных слагаемых, каждое из которых представляет группы старших и младших разрядов сомножителей. В этом случае произведение примет вид Z = X*Y = (x15 ... x0)*(y15 ... y0) =
= (x15...x8000...0 + 000...0x7...x0)* (y15...y8000...0 + 000...0y7...y0) = = 216(x15...x8) (y15...y8) + 28(x15...x8) (y7...y0) + 28(x7...x0) (y15...y8) + + (x7...x0)*(y7...y0) .
Таким образом, произведение раскладывается на простые 8-разрядные сомножители. Эти произведения 8-разрядных операндов вычисляются табличным методом, а затем следует сдвиг слагаемых сразу на 16,8,8,0 разрядов и суммирование.
2.7.6. Деление чисел с плавающей запятой Алгоритмы деления чисел с плавающей запятой в настоящем курсе не рассматриваются. Информацию о них можно найти в литературе, приведенной в конце главы.
51
2.8. Десятичная арифметика Необходимый перевод для ЭВМ десятичных чисел в двоичные и обратно требует затраты времени и ресурсов. В цифровых устройствах, где основная часть операций связана не с обработкой и хранением информации, а с самим ее вводом и выводом на какие-либо устройства отображения с десятичным представлением полученных результатов, имеет смысл проводить вычисления в десятичной системе счисления. Но ЭВМ требует информацию только в двоичной форме. Следовательно, десятичные цифры нужно кодировать каким-либо легко реализуемым и быстрым способом. Для этих целей используется двоично-десятичный код, в котором каждая десятичная цифра 0...9 изображается соответствующим 4-разрядным числом (от 0000 до 1001). Такой код называется еще кодом 8421 (цифры, соответствующие весам двоичных разрядов).
Пример. Представление десятичного числа в двоично-десятичном коде.
(3
4
0011 0100
7 )(10) 0111
( 347 )(10)=001101000111(2-10) Две двоично-десятичные цифры составляют 1 байт, т.е. с помощью 1 байта можно представить десятичные числа от 0 до 99. Действия над двоично-десятичными числами выполняются как над двоичными. Сложности возникают при переносе из тетрады в тетраду. Кроме того, следует отметить, что выполнение сложения и вычитания двоичнодесятичных чисел со знаком сводится к сложению или вычитанию модулей путем определения фактически выполняемой операции по знаку операндов и виду выполняемой операции. Например, требуется вычислить Z=X-Y при X