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



         

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



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

Второй способ преобразования десятичных чисел хотя и выглядит несколько экзотически, вполне работоспособен. Данный способ предполагает использование особенностей некоторых команд сопроцессора. В материале урока 19 «Архитектура и программирование сопроцессора» учебника мы перечисляли форматы данных, которые поддерживает сопроцессор. Перечислим их еще раз:

  • двоичные целые числа в трех форматах — 16, 32 и 64 бита;
  • упакованные целые десятичные (BCD) числа — максимальная длина -18 упакованных десятичных цифр (9 байт);
  • вещественные числа в трех форматах — коротком (32 бита), длинном (64 бита), расширенном (80 бит).
  • Для нас интерес представляют форматы целых двоичных и упакованных десятичных (BCD) чисел, а также команды обмена этими значениями с вершиной сопроцессора. Процесс преобразования десятичного целого числа, вводимого с клавиатуры, показан в программе ниже. Необходимо отметить, что этот способ преобразования позволяет расширить диапазон значений 0..999 999 999 999 999 999.

    :prg06_03.asm - программа ввода целых десятичных чисел из диапазона

    :0..999 999 999 999 999 999 и преобразования их в эквивалентное двоичное представление.

    ;Вход: ввод с клавиатуры числа в десятичной системе счисления

    :в диапазоне значений 0..999 999 999 999 999 999.

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

    .data

    db 0 :барьер. если введенное количество цифр нечетно string db 20 dup (0) максимальное исходное число состоит из 18 цифр (20 - с учетом

    Od0ah)

    len_string=$-string adr_string dd string

    string_pack dt 0 :сюда упаковывается исходное значение

    len_string_pack=$-string_pack adr_string_pack dd string_pack результат - двоичное значение различной разрядности:

    string_bin_byte label byte

    string_bin_word label word

    string_bin_word label word

    string_bin_dword label dword

    string_bindq 0 ;поле для результата - эквивалентного двоичного представления

    --------вводим с экрана----------------............-----




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