Ассемблер: почему BCD существует?

Я знаю, что BCD похож на более интуитивный тип данных, если Вы не знаете двоичного файла. Но я не знаю, почему использовать это кодирование, как не делают имеет большой смысл начиная с его ненужного представления в 4 битах (когда представление больше, чем 9).

Также я думаю, что x86 только поддерживает, добавляет и нижние индексы непосредственно (можно преобразовать их через FPU).

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

Спасибо!

12
задан llazzaro 1 March 2014 в 17:41
поделиться

6 ответов

BCD существует в современных процессорах x86, поскольку он был в исходном процессоре 8086, и все процессоры x86 совместимы с 8086. Операции BCD в x86 уже тогда использовались для поддержки бизнес-приложений. Поддержка BCD в самом процессоре больше не используется.

Обратите внимание, что двоично-десятичный код является точным представлением десятичных чисел, а не плавающей запятой, и что реализация двоично-десятичного кода на аппаратном уровне намного проще, чем реализация с плавающей запятой. Подобные вещи имели большее значение, когда в процессорах было менее миллиона транзисторов, работающих на частоте в несколько мегагерц.

6
ответ дан 2 December 2019 в 03:28
поделиться

Когда я учился в колледже более 30 лет назад, мне рассказали, почему BCD (COMP-3 на COBOL) был хорошим форматом.

Ни одна из этих причин не актуальна для современного оборудования. У нас есть быстрая двоичная арифметика с фиксированной точкой. Нам больше не нужно иметь возможность преобразовывать BCD в отображаемый формат, добавляя смещение к каждой цифре BCD. Мы редко храним числа как восемь бит на цифру, поэтому тот факт, что BCD принимает только четыре бита на цифру, не очень интересен.

BCD - это пережиток, и его следует оставить в прошлом, где ему и место.

1
ответ дан 2 December 2019 в 03:28
поделиться

Я уверен, что в статье Wiki, ссылка на которую дана ранее, говорится более подробно, но я использовал BCD при программировании на мэйнфрейме IBM (в PL/I). BCD не только гарантировал, что вы можете просматривать определенные области байта, чтобы найти отдельную цифру - что иногда бывает полезно - но и позволял аппаратуре применять простые правила для вычисления требуемой точности и масштаба, например, при сложении или умножении двух чисел вместе.

Насколько я помню, мне говорили, что на мэйнфреймах поддержка BCD была реализована аппаратно и в то время была единственным вариантом представления чисел с плавающей запятой. (Речь идет о 18 годах!)

.
2
ответ дан 2 December 2019 в 03:28
поделиться

BCD занимает мало места, это правда, но у него есть преимущество - это формат с "фиксированным шагом", что позволяет легко найти n-ую цифру в конкретном числе.

Еще одним преимуществом является возможность точных арифметических вычислений на числах произвольного размера. Кроме того, используя упомянутые характеристики "фиксированного шага", такие арифметические операции можно легко разбить на несколько потоков (параллельная обработка).

6
ответ дан 2 December 2019 в 03:28
поделиться

Арифметика BCD полезна для точных десятичных вычислений, что часто требуется для финансовых приложений, бухгалтерии и т.д. Она также упрощает такие задачи, как умножение/деление на 10. В настоящее время существуют более эффективные альтернативы.

Есть хорошая статья в Википедии, в которой обсуждаются все "за" и "против".

11
ответ дан 2 December 2019 в 03:28
поделиться

BCD полезен на очень низком уровне электронного спектра, когда значение в регистре отображается некоторым устройством вывода. Например, предположим, что у вас есть калькулятор с несколькими семисегментными дисплеями, на которых отображается число. Удобно, если каждый дисплей управляется отдельными битами.

Может показаться неправдоподобным, что современный процессор x86 будет использоваться в устройстве с такими типами дисплеев, но x86 восходит к долгому пути, а ISA поддерживает значительную обратную совместимость.

9
ответ дан 2 December 2019 в 03:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: