- •30 Глава 2. Особенности аппаратных средств
- •Глава 2. Особенности аппаратных средств, влияющих на
- •2.1.3. От микропроцессора к микро-эвм
- •2.2. Архитектурные особенности микропроцессоров
- •2.3. Работа с внешними устройствами
- •2.4. Представление данных
- •2.5. Система команд
- •2.7. Об использовании вычислительных сетей
2.4. Представление данных
Представление данных может рассматриваться в разных аспектах; в данном разделе, посвященном архитектуре, мы прежде всего остановимся на уровне представления данных, поддерживаемом аппаратурой процессора и ВУ.

Рис. 2.7.
Взаимодействие процессора и контроллера ВУ

Рис. 2.8. Ввод-вывод и адресное пространство в DEC и Intel
При двоичной системе счисления наименьшей единицей информации является бит, далее следует байт, слово из 2 байт и более сложные многословные конструкции. Устройство, предназначенное для хранения и обработки кодов, называют регистром. Сами коды, хранящиеся в регистрах, могут трактоваться как некоторый условный набор нулей и единиц, назначение которых известно лишь обрабатывающей программе (например, двоичный код 01000000, присланный в регистр данных печатающего устройства, инициирует вывод изображения большой латинской буквы «А»). Однако в более общем случае сама аппаратура может трактовать содержимое регистров в зависимости от вида выполняемой операции и типа используемых данных.
Напомним, что тип данных подразумевает:
допустимое множество значений, которое может принимать константа или переменная данного типа;
допустимое множество операций над такими данными.
Первое свойство тесно связано с используемыми регистрами и кодированием хранящихся в них данных. Второе свойство предусматривает, с одной стороны, выполнение некоторых соглашений со стороны программиста, а с другой стороны, аппаратную реализацию соответствующих операций в процессоре. Рассмотрим это более подробно.
В одном бите можно различать только два состояния; казалось бы, это обстоятельство удобно использовать для хранения булевских величин (истина / ложь), однако обработка отдельного бита при байтовой адресации памяти не слишком удобна, и поэтому булевские величины чаще хранят, занимая целое слово.
Представление данных тесно связано с байтовой организацией памяти в ЭВМ (см. рис. 2.9.). Исторически сложилось так, что нумерация битов в байте начинается с нуля и идет справа налево; в многобайтовых (однословных, двухсловных,…) конструкциях нумерация битов и самих байтов тоже идет справа налево. Это вносит определенную специфику в интерпретацию данных, получаемых при отладке, но к этому можно привыкнуть.
В одном байте можно сохранять 28 = 256 состояний, и этого достаточно для кодировки большинства символьных данных. Для кодирования этих данных широко распространен код ASCII (American Standard Code for Information Interchange - американский стандартный код обмена информацией, первоначально введенный фирмой IBM как внутрифирменный, и ставший международным в связи с широким использованием во всем мире аппаратуры передачи данных, которую фирма выпускала еще до появления компьютеров).

Рис.2.9. Представление данных
В слове из 2 байт различимы 65536 состояний, что используют двояко: код целиком может представлять собой некоторый указатель адреса в пространстве 64 К либо целое число без знака в диапазоне от 0 до 65535; если же в коде один бит занять под знак числа, то содержимое слова может представлять собой целые числа в диапазоне от -32768 до +32767 (именно так чаще всего представлены числа типа Integer).
Заметим, что целые числа в этом диапазоне представлены абсолютно точно, но машине при этом «не под силу» видеть части целого - вспомните детский стишок о кошмарном сне: «И вышло у меня в ответе: 2 землекопа и 2/3!»
Для представления вещественных (дробных) чисел применяют многословные конструкции и специальное кодирование данных. Это связано с требуемой точностью их представления и аппаратной реализацией операций над ними в архитектуре некоторых процессоров. Заметим, что предоставление целого байта для кодирования порядка числа позволяет перекрывать диапазон в 38 десятичных разрядов; вместе с этим в двухсловных конструкциях (как это имеет место, например, в DECовской архитектуре для PDP-11/45) отводимые под мантиссу числа 23 двоичных разряда (+1 скрытый) позволяют уверенно различать лишь 6-7 десятичных разрядов, и таким образом в результате выравнивания порядков у двух операндов перед началом операции сложения или вычитания один из операндов может быть просто вытеснен за пределы разрядной сетки. Более того, нормализованная мантисса хранится в ЭВМ как дробное число, составленное из «половинок», «четвертинок», …, младший разряд хранит информацию о 2-23, и совсем не обязательно, что дробное исходное число будет воспроизведено из ЭВМ совершенно так же, как его пытались ввести, например, вместо «2,6» можно получить в качестве далее используемой величины «2,5999…».
Следует
отметить также, что точность представления
данных в ЭВМ падает по мере осуществления
арифметических операций. Нетрудно
убедиться, что при сложении N
положительных двоичных чисел, у которых
одинаковое число значащих разрядов
(или при умножении некоторого числа на
N),
величина разрядной сетки увеличивается
на
разрядов. Пока числа невелики, результат
может сохраняться в регистрах без
видимых искажений, однако при дальнейших
вычислениях наступает момент, когда
машина начинает отбрасывать «лишние»
разряды, не умещающиеся в отведенной
разрядной сетке, и такое «молчаливое
сопротивление» может поставить
пользователя в тупик. С этой проблемой
сразу столкнулись создатели первой
советской ЭВМ. Вот как Б.Н. Малиновский
описывает со слов очевидцев процесс
решения на ЭВМ первой пробной задачи в
своей книге «История вычислительной
техники в лицах» [70]:
«К осени 1951 г. машина «начала нормально дышать», то есть достаточно устойчиво выполняла комплексную тестовую программу, и можно было переходить к решению пробных реальных задач.
Первая пробная задача была выбрана из области баллистики с весьма существенными упрощениями…
Вначале все шло хорошо. Результаты расчета во всех 20 двоичных разрядах полностью совпадали с теми, что были получены вручную (это вызывало бурю восторга всех присутствуюших), но на восьмом отрезке обнаружилось совершенно незначительное расхождение, которого не должно было быть. Многократные повторения расчетов ничего не изменили - машина давала один и тот же результат, отличавшийся от ручного счета на одну единицу младшего разряда. Все немедленно «повесили носы» - ведь расхождений не могло быть! Один Сергей Алексеевич (Лебедев), который никогда не верил в «чудеса», сказал: «Я сам проверю ручной счет до 9-й точки». И проверил (при расчете в двоичной системе счисления это была очень кропотливая и трудоемкая работа, но он ее никому не передоверил). Он оставил нас в сотый раз проверять расчеты машины, менять режимы, а сам удалился в другую комнату и аккуратнейшим образом в клетчатой ученической тетради выполнил необходимые вычисления. Расчеты продолжались целый день, а на другой он появился улыбающийся (что весьма редко бывало), очки сдвинуты на лоб (что свидетельствовало об удаче), и сказал: «Не мучайте машину - она права! Не правы люди!»… Все были буквально потрясены и застыли в изумлении, как в заключительной сцене «Ревизора». Математики бросились пересчитывать оставшиеся 24 точки, так как расчеты были рекуррентыми и продолжать дальнейшую проверку при наличии ошибки было бессмысленно. Ее пришлось отложить на следующий день (это событие произошло в 2 часа ночи), и хотя многие энтузиасты не хотели ждать, Сергей Алексеевич не разрешил: «Надо же дать отдохнуть машине. Пойдем и мы отдохнем. Завтра все будет в порядке!». Так оно и было: утром были принесены новые расчеты, и машина продублировала их без всяких расхождений. Это была первая решенная нашей машиной реальная задача.».
Позже акад. В.М. Глушков специально математически исследовал проблему и вывел фундаментальное соотношение [37] для требуемого числа дополнительных разрядов, гарантирующих 95-процентное сохранение точности вычислений:
![]()
Здесь p - число дополнительных разрядов; Q - число операций; a - основание системы счисления.
Что касается допустимого множества операций над данными определенного типа, то интуитивно понятно их различие, например, для строк и чисел: строки можно лишь соединять и сравнивать, а над числами можно производить арифметические операции. Однако и в операциях с числами есть свои нюансы: сложение, вычитание и умножение определены для всех типов числовых данных, а вот операция деления стоит особо. Для целых чисел деление с получением целого же частного осуществимо далеко не всегда, поэтому для целых определены две операции - деление нацело и вычисление остатка от деления нацело. Для вещественных чисел определена «обычная» операция деления с получением своей дробной части.
Указанные виды представления данных поддерживаются аппаратными средствами и частью системы команд в микропроцессоре (сама система команд, естественно, имеет и другие разделы).
