На пути к битовой ЭВМ
Эдуард Пройдаков
Архитектура ЭВМ развивается в направлениях, определяемых требованиями областей применения. Исторически первыми областями применения были численные расчёты и обработка текстов.
Как известно для численных расчётов были созданы: представления в ЭВМ целых чисел и чисел с плавающей точкой; программные (языки программирования высокого уровня, пакеты программ численных методов, интегрированные математические пакеты) и аппаратные средства для обработки чисел (команды плавающей арифметики арифметические сопроцессоры, векторные и матричные процессоры и т. д.).
В результате развития обработки текстов наименьшей адресуемой ячейкой памяти в ЭВМ стал байт и появились машинные команды для работы с символьными строками. Вершиной этого направления в настоящее время являются настольные издательские системы.
Несколько позже методы машинной графики привели к созданию различных типов графических дисплеев, замене алфавитно-цифрового дисплея графическим, увеличению разрешения экрана и вытеснению монохромных дисплеев цветными (увеличено также число цветов, одновременно выводимых на экран). Аналогичный процесс происходит с печатающими устройствами: переход на многоцветные и лазерные принтеры.
Компьютерная звукосинтезация привела к тому, что сейчас в качестве обязательного элемента ПЭВМ имеет от одного до четырех звуковых каналов и появился интерфейс 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) |
Сканирование бита второго операнда (слово/ двойное слово) начинается с нулевого бита. |
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 года