Десятичный компьютер — это компьютер, который может представлять числа и адреса в десятичной системе счисления и который предоставляет инструкции для работы с этими числами и адресами непосредственно в десятичной системе счисления, без преобразования в чистое двоичное представление. Некоторые также имели переменную длину слова , что позволяло выполнять операции с числами с большим количеством цифр.
Десятичные компьютеры были распространены с ранних машин до 1960-х и до 1970-х годов. Использование десятичных чисел напрямую избавляло от необходимости преобразовывать десятичную систему в двоичную для ввода и вывода и предлагало значительное улучшение скорости по сравнению с двоичными машинами, которые выполняли эти преобразования с помощью подпрограмм. Это позволяло машинам низкого уровня предлагать практическую производительность для таких ролей, как бухгалтерский учет и ведение книг , и многие системы низкого и среднего уровня той эпохи были основаны на десятичной системе.
Линия двоичных компьютеров IBM System/360 , анонсированная в 1964 году, включала инструкции, которые выполняют десятичную арифметику; последовали другие линии двоичных компьютеров с десятичными арифметическими инструкциями. В 1970-х годах микропроцессоры с инструкциями, поддерживающими десятичную арифметику, стали обычным явлением в электронных калькуляторах , кассовых аппаратах и подобных ролях, особенно в эпоху 8 бит.
Быстрое улучшение общей производительности двоичных машин подорвало ценность десятичных операций. Одним из последних крупных новых проектов, поддерживающих их, был Motorola 68000 , который был поставлен в 1980 году. Совсем недавно IBM добавила поддержку десятичных операций в свои проекты POWER6 , чтобы позволить им напрямую поддерживать программы, написанные для платформ 1960-х годов, таких как System/360 . За этим исключением, большинство современных проектов имеют небольшую или не имеют никакой поддержки десятичных операций.
Ранние компьютеры , которые были исключительно десятичными, включают ENIAC , IBM NORC , IBM 650 , IBM 1620 , IBM 7070 , UNIVAC Solid State 80. В этих машинах основной единицей данных была десятичная цифра, закодированная по одной из нескольких схем, включая двоично-десятичный код (BCD), би-квинарный и код «два из пяти» . За исключением IBM 1620 и 1710, эти машины использовали адресацию слов . Когда в этих машинах использовались нечисловые символы, они кодировались как две десятичные цифры.
Другие ранние компьютеры были ориентированы на символы, предоставляя инструкции для выполнения арифметических операций над строками символов десятичных чисел, используя BCD или избыточность-3 (XS-3) [1] для десятичных цифр. На этих машинах базовым элементом данных был буквенно-цифровой символ, обычно кодируемый шестью битами . UNIVAC I и UNIVAC II использовали адресацию слов с 12-символьными словами. Примерами IBM являются IBM 702 , IBM 705 , серия IBM 1400 , [2] IBM 7010 и IBM 7080 .
Некоторые ранние двоичные компьютеры, такие как Honeywell 800 [3] и RCA 601, [4] [5] также имели десятичные арифметические инструкции. Некоторые другие имели специальные инструкции, такие как CVR и CAQ на IBM 7090 , которые могли использоваться для ускорения десятичного сложения и преобразования десятичных чисел в двоичные. [6]
Семейство компьютеров IBM System/360 , представленное в 1964 году для объединения линеек продуктов IBM, использует двоичную адресацию, двоичную целочисленную арифметику и двоичные числа с плавающей точкой; оно также включает инструкции для упакованной десятичной целочисленной арифметики. [7]
Некоторые другие линии бинарных компьютеров добавляли десятичные арифметические инструкции. Например, серия Honeywell 6000 , основанная на бинарной серии GE-600 , предлагала в некоторых моделях расширенный набор инструкций, который поддерживал упакованную десятичную целочисленную арифметику и десятичную арифметику с плавающей точкой. [8]
Линейки компьютеров среднего класса IBM , начиная с System/3 в 1969 году [9] , представляют собой двоичные компьютеры с десятичными целочисленными инструкциями.
Линейка 32-разрядных двоичных компьютеров VAX от Digital Equipment Corporation , представленная в 1977 году, также включает в себя инструкции арифметики упакованных десятичных целых чисел.
Системы Burroughs Medium , начиная с Burroughs B2500 и B3500 в 1966 году, обеспечивали только десятичную арифметику, включая десятичную адресацию, что делало их десятичной архитектурой.
Поддержка BCD была распространена в ранних микропроцессорах , которые часто использовались в таких ролях, как электронные калькуляторы и кассовые аппараты , где вся математика была десятичной. Примеры такой поддержки можно найти в Intel 8080 , MOS 6502 , Zilog Z80 , Motorola 6800/6809 и большинстве других разработок той эпохи. В этих разработках BCD напрямую поддерживался в АЛУ, что позволяло ему выполнять операции с десятичными данными напрямую.
Опкоды Intel BCD остались в семействе x86 по сей день, хотя они не поддерживаются в длинном режиме. Эти инструкции преобразуют однобайтовые числа BCD ( упакованные и распакованные ) в двоичный формат до или после арифметических операций. [10] Эти операции не были расширены до более широких форматов и, следовательно, теперь медленнее, чем использование 32-битных или более широких «трюков» BCD для вычислений в BCD. [11] FPU x87 имеет инструкции для преобразования 10-байтовых (18 десятичных цифр) упакованных десятичных данных, хотя затем он работает с ними как с числами с плавающей точкой.
Серия Motorola 68000 предлагала как утилиты преобразования, так и возможность прямого сложения и вычитания в BCD. [12] Эти инструкции были удалены, когда был определен набор инструкций Coldfire .
В редакцию стандарта IEEE 754 с плавающей точкой 2008 года добавлены три десятичных типа с двумя двоичными кодировками, с 7-, 16- и 34-значными десятичными значащими . [13]
Одним из немногих наборов инструкций RISC , напрямую поддерживающих десятичные числа, является Power ISA от IBM , который добавил поддержку десятичных чисел с плавающей точкой IEEE 754-2008, начиная с Power ISA 2.05. Поддержка десятичных целых чисел была частью их линейки мэйнфреймов, и в рамках более широких усилий по объединению iSeries и zSeries десятичная арифметика была добавлена в линейку POWER, чтобы один процессор мог поддерживать рабочие нагрузки этих старых машин с полной производительностью. [ необходима цитата ] Процессор IBM POWER6 является первым процессором Power ISA, который реализовал эти типы, используя плотно упакованное десятичное двоичное кодирование вместо BCD. [14] Начиная с Power ISA 3.0, были добавлены инструкции арифметики десятичных целых чисел.
z/Architecture , 64-битная версия набора инструкций мэйнфрейма IBM, добавила поддержку тех же кодировок десятичных чисел с плавающей точкой IEEE 754, начиная с IBM System z9 . [14] Начиная с процессора z15 , были добавлены векторные инструкции для выполнения десятичной целочисленной арифметики. [15]
Он может интерпретировать 48 бит слова группами по 4 для целей двоично-десятичных операций, группами по шесть для целей буквенно-цифровых операций или как отдельные единицы информации для чисто двоичных операций.
Арифметические операции с фиксированными словами или полусловами могут выполняться как в двоичном, так и в алфавитно-цифровом и десятичном режимах.