Ввод-вывод целых чисел произвольной длины

Тема в разделе "WASM.BEGINNERS", создана пользователем Deadushka, 18 янв 2009.

  1. Deadushka

    Deadushka New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2009
    Сообщения:
    17
    Собственно сабж, нужно реализовать в виде библиотеки на TASM. К сожалению не имею представления, каким образом это сделать, кто-нибудь может хотя бы в общих чертах описать алгоритм? В гугле и на форуме искал, ничего не нашел, может есть у кого уже готовые решения?
     
  2. c4m310t

    c4m310t New Member

    Публикаций:
    0
    Регистрация:
    19 дек 2008
    Сообщения:
    237
    В чем именно загвоздка ? В создании библиотеки или же в I\O ?
    По манипуляциям с числами можно почитать:
    Юров В.И. "Assembler" (глава 8). Примеры там на TASM'e.
     
  3. Deadushka

    Deadushka New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2009
    Сообщения:
    17
    Проблема в том, что я не представляю как это сделать теоретически, щас почитаю про манипуляцию с числами и наверное появятся вопросы по реализации)
     
  4. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    Так же, как и ввод-вывод тобой на бумагу. Последовательным умножением или делением на степень основания системы счисления.
     
  5. Deadushka

    Deadushka New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2009
    Сообщения:
    17
    Прочитал эту главу, к сожалению ничем не помогла, у нас есть стандартные диапазоны чисел для разных типов данных, ну например -32 768...+32 767, а мне нужно осуществить ввод-вывод целых чисел произвольной длины, как это сделать?

    Как я понимаю нужно создавать свой произвольный числовой тип данных, неограниченный по длине, и выделять на него память.
     
  6. c4m310t

    c4m310t New Member

    Публикаций:
    0
    Регистрация:
    19 дек 2008
    Сообщения:
    237
    BCD числа... Там все расписано...%)
     
  7. stellaco

    stellaco New Member

    Публикаций:
    0
    Регистрация:
    11 дек 2008
    Сообщения:
    193
  8. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    Да. И в Юрове всё это есть. Ищи лучше. Есть готовые процедуры ввода-вывода и мат. операций с длинными числами.
     
  9. Deadushka

    Deadushka New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2009
    Сообщения:
    17
    насчет готовых процедур - было бы интересно взглянуть) начинаю по-тихоньку что-то понимать, значит пользователь вводит в AX строку символов (например 123456789001), моя библиотека берет эту строку, вычлиняет из нее поочередно по одному символу и поочередно умножает каждое число на 10 в степени порядкового номера цифры в строке, затем складывает и получается что-то наподобии 100000000000+20000000000+...+1 и сохраняет это в оперативной памяти, куда и как сохраняет, и как мне потом к этому числу обращаться? если его выводить то нужно уже анализировать каждую цифру хекс числа, лежащего в памяти и восстанавливать число?
     
  10. c4m310t

    c4m310t New Member

    Публикаций:
    0
    Регистрация:
    19 дек 2008
    Сообщения:
    237
    Нет... неупакованное BCD число выглядит так: 123 = 0000 0001 0000 0010 0000 0011
    Думаю, тебе нада копать сюда...
     
  11. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    Автор ничего не говорил про БЦД. Если не нужно быстро делать с ними арифметические операции и нет ограничения на память, а нужен только простой ввод-вывод, то да. Иначе - номальные полноразрядные числа.
     
  12. Deadushka

    Deadushka New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2009
    Сообщения:
    17
    никакие арифметические операции не нужны! просто ввести число в память или вывести из памяти, но ведь вывод осуществляется из регистров, значит необходимо как-то расчленять число перед делением на 10...
     
  13. c4m310t

    c4m310t New Member

    Публикаций:
    0
    Регистрация:
    19 дек 2008
    Сообщения:
    237
    Я думал, что задача состоит в том, что бы продемонстрировать тот факт, что можно задать число не ограничивающееся диапазоном integer'a в высокоуровневых языках... (2 в 32). НО, что бы это были именно ЧИСЛА а не набор цифр котрый гоняют от ввода к выводу...
    Для реализации этой задачи подойдут неупакованные BCD числа.
    p.s.
    Я недавно с Асмом... Поправьте если я ошибаюсь...
     
  14. Deadushka

    Deadushka New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2009
    Сообщения:
    17
    задача была поставлена следующая: "написать библиотеку ввода-вывода целых чисел произвольной длины" про реализацию мне ничего не говорили....
     
  15. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    Так может с самого начала надо было уточнить, какой интерфейс взаимодействия должна выдерживать эта библиотека. я вот вообще могу посоветовать (судя из вышеизложенного) написать библиотеку, которая вводит строки (раз Вам уже BCD предлагают, что само по себе является не зашифрованной (упакованной или не упакованной) бинарной строкой), ограничивая возможность ввода лишь цифрами. Иначе уточните пожалуйста задачу.
     
  16. Deadushka

    Deadushka New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2009
    Сообщения:
    17
    я думаю, что главное результат, нужно реализовать ввод и вывод, каким методом? думаю таким, какой проще, начал разбираться с реализацией через ввод строки с последующим разбиением её на цифры и получением числа путем сложения этих цифр, как выше уже было описано, проблема заключается в том, что получившиеся числа видимо надо сохранять в регистры, необходимо проверять, не превышает ли вводимое число границ одного регистра и при этом, наверное, разбивать число на два и более регистра. Те же операции и при выводе числа.
     
  17. s_d_f

    s_d_f New Member

    Публикаций:
    0
    Регистрация:
    15 май 2008
    Сообщения:
    342
    Тоерия не плохо описана в Исскустве программирования Кнута. Есть готовые программы вот ссылка там в архиве два проэкта для RadAsm+masm32 http://www.asm1a.narod.ru/calc.rar
     
  18. Deadushka

    Deadushka New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2009
    Сообщения:
    17
    Спасибо, щас гляну теорию Кнута, мне нужно реализовать на TASM, мне не хватит навыков переписать код с RadAsm и masm32)
     
  19. Deadushka

    Deadushka New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2009
    Сообщения:
    17
    Значит алгоритм для ввода у меня получился такой:
    1) вводим строку из цифр
    2) циклом вычленяем из строки по одному символу
    3) умножаем каждый символ на 10 в степени равной порядковому номеру символа в строке
    4) складываем полученные числа и получаем нужное нам число
    5) сохраняем его в регистр, вот тут возникает вопрос, как сохранить число в регистр, если оно например выходит за его пределы?
     
  20. murder

    murder Member

    Публикаций:
    0
    Регистрация:
    3 июн 2007
    Сообщения:
    628
    Deadushka
    Твоя задача очень упростится если организовать ввод данных в шестнадцатитеричной системе.