Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вывод результатов арифметических вычислений 
:(
    Опции темы
ZIFIR
Дата 3.3.2009, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 8.3.2006

Репутация: нет
Всего: нет



Tasm под DOS.
При разработке программ с различными арифметическими вычислениями, результаты необходимо выводить на 
экран в десятичном виде. Если я правильно понимаю, для вывода различных типов результатов (беззнаковых, 
знаковых целых чисел и вещественных чисел) необходимо написать соответствующие процедуры, объединить их
в модуль, затем подключать модуль и вызывать процедуры.
Правильный ли подход к решению данного вопроса?
PM MAIL   Вверх
Mikl_
Дата 4.3.2009, 04:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 9.11.2007

Репутация: 6
Всего: 14



ZIFIR, правильный smile 
PM MAIL   Вверх
AKATAN
Дата 14.3.2009, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 30.9.2008
Где: Украина

Репутация: нет
Всего: 1



ГЫГЫГЫ =))))
Не изобретай велосипед.

Код

;Процедура вывода на екран 64-х бтных чисел
;Вход:   Number_dec - 64-х битное число для вывода
;Выход: ничего
   Out_dec proc
    pusha
    push es
    push 0B800h
    pop es

    xor cx,cx  
    finit       ;Инициализация сопроцессора
    fstcw Dat
    or Dat,0C00h
    fldcw Dat       ;округления чисел
    fldz
    fild Divider
    fild Number_dec
    fst st(7)       ;ST(7)=ST(0)
   
   Next_sym:
    fprem            ;Делим и получаем остаток от деления в ST(0)
    fistp Dat        ;Dat=ST(0)
   ;Выводим остаток от деления, который загружен в Dat.
    mov al,byte ptr Dat
    add al,'0'
   ;Выводим преобразованое число на экран
    pusha
    
    int 29h       ;Вывод на экран поточной цифры
    popa   

    dec dx          ;Вывели. DX=DX-1 - следующий символ
    fld st(6)       ;ST(0)=ST(6)
    fdiv st,st(1)   ;Теперь делим ST(0) на ST(1)
    frndint         ;Округлим полученное число
    fst st(7)       ;ST(7)=ST(0).

    push ax
    fcom st(2)      ;ST(0)=ST(2)?
    fstsw ax        ;AX=состояние сопроцессора
    and ax,100010100000000b ;Аннулируем ненужные биты
    cmp ax,100000000000000b ;ST(0)=ST(2)?
    pop ax
    je Finish_dec           ;Если равно, то на выход 
    jne Next_sym    ;Пока нет. Следующая цифра 
    dec dx
    xor cx,cx       ;Обнулим счетчик
    jmp short Next_sym ;Следующая цифра 

   Finish_dec:
    pop es
    popa

   ret
   Out_dec endp


З.Ы. Автор - Калашников Олег. (Пишу, ибо это парень весьма помешан на своих правах...)
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0515 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.