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



         

Вывод вещественных чисел - часть 2


fidiv ten

sub int_har32.7 lab_n_h: fimul ten

cmp int_har32.0

inc int_har32

jl lab_n_h

ret

negative_har endp fprint32 proc :вывод вещественного числа (32 бита) в десятичном виде

pusha

установка размера мантиссы в 24 бита fstcw cwr and cwr.1111000011111111b

or cwr.ldew cwr

fid float32:загрузка 32-битного числа в стек сопроцессора fxtract выделение мантиссьКБШ и характеристики^!) fstp mant32 запоминаем мантиссу fist har32 '.запоминаем характеристику щеревод двоичн. характеристики в дес. характеристику fldlg2 -.загрузка десят. лог. двух fimul har32 -.умножение двоичной хар-ки на 1од10(2) frndint -.округление fistp int_har32 сохранение десетяч. характеристики

fild int_har32

fbstp dec_bin_har32 сохранение двоично-десятичного значения характеристики

:выбор процедуры по выделению мантиссы fid float32 cmp har32.0 jge easel

call negativejiar :вызвать процедуру преобразования мантиссы, -.если хар-ка отрицательная

jmp end_case

I^casel: call positivejiar -.вызвать процедуру преобразования мантиссы, -.если хар-ка положительная end_case-. fbstp dec_bin_mant32 сохранение двоично-десятичного представления мантиссы ;вывод на экран вещественного числа lea si.dec_bin_mant32 add si.9 mov- a "I. [si] : вывод знака числа cmp al .0 je zero mov char."-" call print_char call next_cursor_column

:данный фрагмент пропускает байты с нулевым содержимым до первого байта ;со значащей цифрой zero: dec si

dec number_of_digits mov al.[si] cmp a 1.0

jne first_zero ;найден первый байт со значением, отличным от нуля jmp zero ;байт имеет нулевое значение - продолжаем поиск ; просмотр полубайтов первого найденного байта с ненулевым значением first_zero: and al ,11110000b cmp a 1,0 je second_digit :если старший полубайт байта равен нулю, начинаем вывод

:со второго байта jmp first_digit :если старший полубайт байта не равен нулю, начинаем вывод

:с первого байта :начало цикла вывода мантиссы print_digits: dec si

dec number_of_digits :индекс выводимого байта mov al.[si]

:вывод первого полубайта, содержащего цифру first_digit: andal ,11110000b shr al.4 add al.30h mov char.al




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