Сборник по задачам и примерам Assembler



         

Ввод целых десятичных чисел из диапазона 0..99 - часть 2


  • для операнда размером 8 бит — 0..255;
  • для операнда размером 16 бит — 0..65 535;
  • для операнда размером 32 бита — 0..4 294 967 295.
  • Как видите, максимальное число не такое уж и большое. Поэтому мы столько внимания уделили работе с числами большой размерности в главе 1, посвященной программированию арифметических операций. В ней данные большой размерности просто описывались в сегменте данных без какого-либо намека на возможность их ввода с консоли или отображения на ней. В этом разделе мы постараемся ликвидировать этот недостаток, что несомненно поднимет привлекательность для читателя того и другого материала. Но вначале мы рассмотрим способы преобразования значений, которые укладываются в указанные выше диапазоны. Для этого можно предложить два способа преобразования в символьном представлении десятичных чисел, вводимых с консоли: с использованием деся-

    точного полинома и с использованием возможностей сопроцессора по обработке

    данных.

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

    А10 = an.,x10nl + an.2x10"-2 + ... + а,х10 + а0х10°.

    Вычисление данного полинома лучше производить по схеме Горнера:

    А10 - (...(0+an.,)x10+an.2)x10+ ... + а,)х10+а0.

    Например, число 3405 по этим формулам может быть представлено так:

    3405=Зх103+4х102+Ох101+5х100=(((0+3)х10+4)х10+0)х10+5.

    Ниже приведена программа преобразования целого десятичного числа в символьном виде из диапазона 0..4 294 967 295 в эквивалентное двоичное представление. Для ввода числа с клавиатуры используем функцию 3fh MS D0S. Она удобна тем, что возвращает количество действительно введенных символов в регистре AL.

    :prg06_02.asm - программа преобразования целого десятичного числа в символьном виде :из диапазона 0..4294967295 в эквивалентное двоичное представление.

    :Вход: ввод с клавиатуры числа в десятичной системе счисления (не более 10 цифр).

    :Выход: двоичное число-результат преобразования в регистре ЕАХ.

    add eax.edx

    mul ten

    jc exit_e

    inc si

    loop ml m2: mov dl .[si]

    anddl.Ofh преобразуем ASCI I->BCD

    add еах^х;результат преобразования в регистре ЕАХ

    jncexit результат вышел за границы операнда exit_e: .выводим строку string_e на экран

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




    Содержание  Назад  Вперед