То есть те данные, которыми оперируют мнемоники AAA, AAD, PACKSSDW и т.д. Собственно зачем они нужны? Где можно применять их и в каких случаях?
Я раньше думал, что это пережитки старых 386, но оказалось инструкции получили своё продолжение в MMX,SSE...
Это и есть пережитки Все BCD-инструкции на современных компах реализованы через микрокод и довольно или ужасно тормозные, особенно на P4 PACKSSWB и т.п. никакого отношения к BCD не имеют и никакого продолжения BCD в MMX,SSE не получили, т.к. все SIMD оперируют только с натуральными размерами операндов 8, 16 и т.д. бит, а BCD как известно принимает значения только 0..9
Упакованные BCD это когда два числа на один байт 41h это две цифры 4 и 1 в BCD Неупакованные BCD это когда одно число на один байт. В смысле байт может принимать только значения от 0 до 9 Вы пробовали конвертить число из двоичного представления в строковое десятичное? Ну как? В основе преобразования лежит деление на 10 с помещением остатка в результат. команда DIV была всегда очень интересной в плане быстродействия когда таких преобразований надо делать много, например для вывода числа на экран, то это могло сильно замедлить скорость выполнения приложения на старых машинах. Алгоритм преобразования BCD числа в десятичную строку намного быстрее. Числа в формате BCD имело смысл применять в офисных приложениях, где такие преобразования приходится выполнять ну очень уж часто. Сейчас на этом уже никто не заморачивается так как быстродействия современных машин офисным приложениям хватает за глаза.
Miller Rabin Зато числовые операции с ними гораздо медленнее. Экономим на делении при преобразовании в строку, зато при каждом умножении требуется коррекция ААM, которая есть ни что иное как деление AX на 10. Кстати в 64-битном режиме AMD64\EM64T integer-операции с BCD не поддерживаются, только FPU-шные FBLD\FBSTP
Кстати, вспомнил тут яркий пример использования BCD чисел. коммутатор GSM Ericsson ведет лог поступивших звонков с мобильных телефонов поля PhoneNumber, IMSI, IMEI хранит как упакованные BCD числа. С ними не нужно проводить никакие арифметические операции, а вот конвертировать их в строки требуется постоянно. Не буду спорить со специалистами Ericsson об оптимальности их алгоритмов, пусть сами с ними разбираются. Просто BCD числа еще как используются. Правда все это осуществляется на мэйнфрейме SUN. Не знаю как там у него обстоят дела с обработкой BCD чисел.