BCD, упакованные и неупакованные данные

Тема в разделе "WASM.BEGINNERS", создана пользователем cpp_and_wasm, 21 дек 2006.

  1. cpp_and_wasm

    cpp_and_wasm Владимир

    Публикаций:
    0
    Регистрация:
    27 июл 2006
    Сообщения:
    128
    То есть те данные, которыми оперируют мнемоники AAA, AAD, PACKSSDW и т.д. Собственно зачем они нужны? Где можно применять их и в каких случаях?
     
  2. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Слышал, что их любят какие-то внешние устройства, но точно не уверен.
     
  3. cpp_and_wasm

    cpp_and_wasm Владимир

    Публикаций:
    0
    Регистрация:
    27 июл 2006
    Сообщения:
    128
    Я раньше думал, что это пережитки старых 386, но оказалось инструкции получили своё продолжение в MMX,SSE...
     
  4. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Это и есть пережитки ;)
    Все BCD-инструкции на современных компах реализованы через микрокод и довольно или ужасно тормозные, особенно на P4
    PACKSSWB и т.п. никакого отношения к BCD не имеют и никакого продолжения BCD в MMX,SSE не получили, т.к. все SIMD оперируют только с натуральными размерами операндов 8, 16 и т.д. бит, а BCD как известно принимает значения только 0..9
     
  5. Miller Rabin

    Miller Rabin New Member

    Публикаций:
    0
    Регистрация:
    4 янв 2006
    Сообщения:
    185
    Упакованные BCD это когда два числа на один байт
    41h это две цифры 4 и 1 в BCD
    Неупакованные BCD это когда одно число на один байт.
    В смысле байт может принимать только значения от 0 до 9

    Вы пробовали конвертить число из двоичного представления в строковое десятичное?
    Ну как?
    В основе преобразования лежит деление на 10 с помещением остатка в результат.
    команда DIV была всегда очень интересной в плане быстродействия :)
    когда таких преобразований надо делать много, например для вывода числа на экран, то это могло сильно замедлить скорость выполнения приложения на старых машинах.
    Алгоритм преобразования BCD числа в десятичную строку намного быстрее.

    Числа в формате BCD имело смысл применять в офисных приложениях, где такие преобразования приходится выполнять ну очень уж часто. Сейчас на этом уже никто не заморачивается так как быстродействия современных машин офисным приложениям хватает за глаза.
     
  6. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Miller Rabin
    Зато числовые операции с ними гораздо медленнее. Экономим на делении при преобразовании в строку, зато при каждом умножении требуется коррекция ААM, которая есть ни что иное как деление AX на 10.
    Кстати в 64-битном режиме AMD64\EM64T integer-операции с BCD не поддерживаются, только FPU-шные FBLD\FBSTP
     
  7. Miller Rabin

    Miller Rabin New Member

    Публикаций:
    0
    Регистрация:
    4 янв 2006
    Сообщения:
    185
    Кстати, вспомнил тут яркий пример использования BCD чисел.

    коммутатор GSM Ericsson ведет лог поступивших звонков с мобильных телефонов поля PhoneNumber, IMSI, IMEI хранит как упакованные BCD числа. С ними не нужно проводить никакие арифметические операции, а вот конвертировать их в строки требуется постоянно.

    Не буду спорить со специалистами Ericsson об оптимальности их алгоритмов, пусть сами с ними разбираются.
    Просто BCD числа еще как используются. Правда все это осуществляется на мэйнфрейме SUN. Не знаю как там у него обстоят дела с обработкой BCD чисел.