Технологии

На пути к битовой ЭВМ

Архитектура ЭВМ развивается в направлениях, определяемых требованиями областей применения. Исторически первыми областями применения были численные расчёты и обработка текстов.

Как известно для численных расчётов были созданы: представления в ЭВМ целых чисел и чисел с плавающей точкой; программные (языки программирования высокого уровня, пакеты программ численных методов, интегрированные математические пакеты) и аппаратные средства для обработки чисел (команды плавающей арифметики арифметические сопроцессоры, векторные и матричные процессоры и т. д.).

В результате развития обработки текстов наименьшей адресуемой ячейкой памяти в ЭВМ стал байт и появились машинные команды для работы с символьными строками. Вершиной этого направления в настоящее время являются настольные издательские системы.

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

Компьютерная звукосинтезация привела к тому, что сейчас в качестве обязательного элемента ПЭВМ имеет от одного до четырех звуковых каналов и появился интерфейс MIDI [1] для подключения музыкальных инструментов. Максимально развиты эти средства в ПЭВМ NeXT: качество звуковоспроизведения – стереофоническое (на уровне проигрывателей компакт-дисков.[2]

Нечисловая обработка данных выявила несоответствие (неадекватность) фон-Неймановской архитектуры ЭВМ решаемым задачам. Поэтому для распознавания изображений и речи созданы нейрокомпьютеры,[3] а для информационных систем – машины баз данных.[4] Автор не рассматривал влияние на архитектуру ЭВМ задач из области искусственного интеллекта, хотя оно, безусловно, всё возрастает.[5]

Однако нельзя сказать, что возможности традиционной архитектуры ЭВМ исчерпаны. В частности, в проблемных областях, активно развивающихся в последнее время (обработка сигналов, изображений, решение задач в ряде областей математики, психотесты в медицине и др.), оптимальна работа с битами и битовыми строками. По техническим причинам (так как дешифрация адреса отдельного бита требует больших аппаратных затрат: увеличивается ширина адресной шины, соответственно, число выводов у микросхем и т.д.) битовые строки упаковывают в байты, что связано с неизбежными операциями пересчёта из байтовой в битовую адресацию и обратно. Как правило, операции выделения бита (битов) осуществляются в регистрах. Но во многих ЭВМ эти операции вообще отсутствуют, так как заменяются сочетанием команд сдвигов и логических операций ( SHL , SHR , OR , AND , XOR и т. п.).

За последнее десятилетие типовые наборы команд ЭВМ общего назначения в значительной степени стандартизовались. Тем более интересной оказалась тенденция к битовой машине в архитектуре микропроцессоров (МП) фирмы Intel . Началом было появление во внутреннем ОЗУ ОЭВМ Intel 8051 [6] (советский аналог КР1816ВЕ31) так называемой области флагов (адреса 20 H ...2 FH ) объёмом в 128 бит, адресуемой как в байтовом, так и битовом режимах (табл. 1). Кроме того, в этом МП имеется битовая адресация внутренних портов ввода-вывода и аккумулятора (биты 80 H -0 FFH ).

Наиболее радикальный шаг на пути к битовой ЭВМ –введение битовой адресации в МП 80386[7] (табл. 2). Битовые строки в этом МП могут размещаться в памяти или в 16/32-разрядных регистрах общего назначения (РОН). Значение смещения бита в строке начинается с нуля и соответствует размеру адресуемого операнда. Если операнд находится в регистре, то смещение не должно превышать 15 или 31 бит в соответствии с разрядностью регистра. Если битовая строка размещается в памяти, то смещение будет в диапазоне от -2 до +2 гигабит. Искомый бит (или биты) в строке адресуется с помощью аппаратного пересчёта смещения в номер байта от начала строки (<смещение> DIV 8) и номера адресуемого бита в этом байте (<смещение> MOD 8).

Таблица 1
Команды для работы с битами МП 8051

Команда Описание

SET bit _ addr

Установка бита в 1

CPL bit_ddr

Дополнение бита

CPR bit_ddr

Очистка бита (установка бита в 0)

ANL C,bit_addr

Логическое И бита с флагом переноса CF . Результат помещается в CF

ANL C,/bit_addr

Логическое И дополнения бита с флагом переноса CF . Результат помещается в CF

ORL C,bit_addr

Логическое ИЛИ бита с флагом переноса CF . Результат помещается в CF

ORL С ,/bit_addr

Логическое ИЛИ дополнения бита с флагом переноса CF . Результат помещается в CF

MOV C,bit_addr

Пересылка бита в флаг переноса CF

MOV bit_addr,C

Пересылка содержимого флага переноса в указанный бит

JB bit_addr,addr

Переход, если бит равен единице

JBC bit_addr,addr

Переход и обнуление бита, если он равен единице

Примечание. Так как в архитектуре МП 8051 отсутствует специальный регистр для битовых операций, то вместо него используется флаг переноса.

Интерес к битовым операциям проявился не только у фирмы Intel . Годом раньше появления МП 80386 фирма Motorola выпустила МП 68020, оперирующий с битовыми строками (полями по терминологии фирмы). Из таблицы 3 видно, что новые команды были введены в основном для работы с изображениями.[7][8] Битовое поле в этом МП представляет собой набор битов, который может уме щаться в одном регистре или занимать большие объемы памяти, служащей, в частности, для побитового представления графической информации. Поле определяется посредством смещения первого бита поля относительно базового адреса (от 2-31 до 231 ) и шириной (1-32), указывающей количество битов в поле. Смещение и ширина могут кодироваться как непосредственные данные в команде или задаваться в одном из восьми регистров.

Таблица 2 Команды МП 80386 для работы с битами

Команда Описание
DBIT
(Define Bit)

Псевдокоманда ассемблера для определения и инициализации битовой строки

ВТ
(Bit Test)

Проверка бита. Флаг переноса устанавливается равным содержимому проверяемого бита

ВТС
(Complement Test Bit)

Дополнение тестируемого бита. Предыдущее значение этого бита помещается в флаг переноса

BTS
(Set Test Bit)

Установка тестируемого бита в 1. Предыдущее значение этого бита помещается в флаг переноса

BTR
(Reset Test Bit)

Установка тестируемого бита в 0. Предыдущее значение этого бита помещается в флаг переноса

BSF
(Bit ScanForward)

Сканирование бита второго операнда (слово/ двойное слово) начинается с нулевого бита.
Если все сканируемые биты равны нулю, то флаг ZF=0, иначе ZF=l и возвращается смещение первого установленного бита

BSR
( Bit Scan Reverse )

Как и BSF, только поиск в битовой строке
идёт в обратном направлении

XBTS
(Insert Bit String)

Вставка битовой строки, находящейся в регистре, в другой регистр или ячейку памяти без разрушения предыдущего содержимого

XBTS
( Extract a bit String )

Выделение битовой подстроки из слова или двойного слова в регистр с выравниванием по правому краю и дополнением слева нулями

Команды, приведенные в табл. 2 и 3, – это базовые операции, из которых на уровне подпрограмм можно построить более сложные процедуры над битовыми строками. Между типами данных, поддержанных аппаратными средствами и реализуемых в языках программирования высокого уровня (ЯВУ), существует глубокая двусторонняя связь. Логические данные (типы Logical или Boolean) в некоторых ЯВУ представлены в памяти одним, а иногда даже и двумя байтами, что делает работу с ними неэффективной и не совсем прозрачной.

Таблица 3 Команды для работы с битами МП 68020

Мнемоника команды Описание

Команды для работы с битами МП 68000

BCNG bnum, dst Проверка бита и изменение dst [ bnum ]:= not ( dst [ bnum ])
BCLR bnum, dst Проверка бита и сброс. dst [ bnum ]:=0
BSET bnum, dst Проверка бита и установка. dst [ bnum ]:= l
BTST bnum, dst Проверка бита, флаг Z := not ( dst [ bnum ])

Команды, добавленные в МП 68020

BFCNG dst (off:wd) Проверка битового поля и изменение
BFCLR dst(off:wd) Проверка битового поля и сброс
BFEXTS src(off:wd),Rn Извлечение битового поля со знаком в регистр Rn
BFEXTU src(off:wd),Rn Извлечение битового поля без знака в регистр Rn
BFFFO src(off:wd),Rn Поиск первой единицы в битовом поле. Смещение возвращается в регистре Rn
BFINS Rn,dst(off:wd) Вставка младших битов регистра Rn в битовое поле
BFSET bdst (off : wd) Проверка битового поля и установка
BFTST bsrc (off : wd) Проверка битового поля

Для работы с битами в ряде ЯВУ имеются встроенные средства, например в Модуле-2 [10] определен стандартный тип множеств - BitSet . Его базовый тип – множество битов машинного слова данной ЭВМ. Нумерация битов: 0 соответствует младшему разряду машинного слова, а 15 – старшему. С помощью таких множеств осуществляется побитная работа с портами ввода-вывода и специальными регистрами:

Var имя_слова [машинный_адрес]: Bitset ;

Однако эта конструкция сильно зависит от реализации Модулы-2 и не работает с длинными битовыми строками.

Виртуальная битовая ЭВМ достаточно просто реализуется на программном уровне. Процедуры для работы с битами (на каком-либо языке программирования) объединяются в пакет или библиотеку. Пользователь из прикладной программы обращается к ним, как к любой другой процедуре. Приведенный ниже перечень процедур и функций пакета BitPack (предлагаемого для иллюстрации) охватывает наиболее часто встречающиеся операции. Пакет написан на языке Турбо-Паскаль версии 5.0 и оформлен в виде библиотечного файла BitPack . tpu , исходный текст которого дан в приложении. Пакет работает со строками длиной до 32 Кбайт. Он может быть свободно переписан или адаптирован под самые разные идеологии работы с битовыми строками.

Процедуры
BZero - очищает строку битов,
BOne - устанавливает все биты в 1,
BSet - устанавливает бит N в 1,
BReset - устанавливает бит N в 0,
BInv - инвертирует значение бита N ,
BitEval - демон установки зависимых битов,
BSHR - логический сдвиг вправо битовой строки,
BSHL - логический сдвиг влево битовой строки
BSwap – меняет местами значения двух битов
BRevers – переворачивает строку, т.е. первый бит становится последним, а последний – пер вым и т.д.,
BRND – заполняет строку битов равно мерно распределёнными случайными чис лами 0 и 1.

Функции
BTest - возвращает логическое значение указанно го бита,
BSum - возвращает сумму единиц в битовой строке,
BParity - возвращает значение паритета для битовой строки,
BCompare - возвращает TRUE , если строки побитно равны, а также число несовпавших битов.

Вспомогательные процедуры и функции
BCoord - переводит номер бита в номер байта и смещение бита в байте,
BError - выводит на экран сообщение об ошибке,
BDump - выводит на экран символьный дамп битовой строки,
BBUnpack - распаковывает строку битов в строку бай тов или символов,
BBS - возвращает в строке распакованный байт,
BIS - возвращает в строке распакованное слово.

Здесь читатель вправе скептически заметить: “Ну и что? Какая разница - восемь битов или один?” И будет, конечно, прав, так как в общем случае приходится иметь дело с N -битовой последовательностью в строке. Например, в опросных психологических тестах наряду с ответами Да/Нет часто используются ответы Да/Нет/Не знаю, что требует для их хранения более одного бита; при считывании большого объёма данных с помощью 10-разрядного АЦП отсчеты часто помещают в 2-байтовое поле, теряя шесть битов на каждом отсчете. Выход представляется следующий: необходимо иметь для побитовой адресации сегмента данных ОЗУ индексный регистр ( Bit _ Pointer ) и регистр-дескриптор со структурой

ширина_битовой_строки адрес начала строки

а также как минимум четыре дополнительные машинные команды:
установка адреса начала и ширины строки,
загрузка смещения в BitJPointer ,
запись в строку по Bit _ Pointer ,
чтение в РОН данных из строки.

Для удобства программирования следует предусмотреть автоинкрементирование и автодекрементирование индексного регистра, контроль выхода адреса за границу строки.

И последнее. Новые МП типа 80486 ассоциируются у меня с красивой девицей, с которой можно интересно провести время в искусственной среде города, но трудно жить в деревне. Поэтому новым МП следует возвратить утраченный уровень понимания и разумности.

Литература

1. Лукьянов ДА., Михайлова Н.И. МИДИ – сетевой интерфейс музыкальных систем //Микропроцессорные средства и системы. –1987. –№3. –С. 50—51.

2. Уэбстер Б.Ф. Что в будущем ...NeXT!?//Mиp ПК. –1989. № 4. с. 11—19.

3. Что взамен структуры фон-Неймана?//ВТ и её применения: Сб. статей. –1989. Вып. 5.

4. Озкарахан 3. Машины баз данных и управление базами данных: Пер. с англ. –М.: Мир, –1989. 696 с.

5. Язык Пролог в пятом поколении ЭВМ//Сб. статей. 1983—1986 гг.: Пер. с англ. –М.: Мир, –1988. –501 с.

6. Кросс-система программирования КРОСС-51. Язык программирования Ассемблер-51. Описание языка. 00189 - 01 35 02-1. –М.: НЭУМ, – 1987. –309 с.

7. Parras С.H., Murray-Ill W.H. 80386 Microprocessor Handbook. Olsborne McGraw - Hill , –1988. –434 p .

8. Дж. Фрир. Построение вычислительных систем на базе перспективных микропроцессоров: Пер. с англ. –М.: Мир. –413 с.

9. John F. Wakerly. Microcomputer Architecture and Programming. The 68000 Family. Wiley, – 1989. –762 p.

10. Кристиан К. Руководство по программированию на языке Модула-2. –М.: Мир, –1989. –464 с.

Статья опубликована в журнале “Компьютерный мост” #1/1992 г.
Статья помещена в музей 06.05.2006 года