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



         

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


len_string-$-string adr string dd string b1n~dd label BYTE "dd Offffffffh 1 еп_Ы n_dd-$ - bi n_dd ten*db To remainder dw 0 .code

значение для преобразования должно быть в памяти

les di,adr_string строка с десятичными символами

eld обработка в прямом направлении

continue:

di v_unsign_N_l_I bin_dd.1en_bin_dd.ten.Ыn_dd.remainder

mov ax.remainder

or al.30h :преобразуем в символьное представление

stosb сохраняем в string очередную десятичную цифру

inccx {подсчитываем количество цифр

cmpbinjjd.0

jne continue :вывод на консоль с конца строки

mov ah,2

std

mov si .di

dec si ml: "lodsb

mov dl ,al

Int 21h

loop ml

В данной программе преобразованию подвергается значение в памяти. Причем мы в качестве исходного двоичного значения задали максимально возможное беззнаковое число размером в двойное слово. Результат преобразования — 4 294 967 295, что полностью сходится с ожидаемым десятичным значением. Но задавать исходные значения в памяти не всегда удобно, хотелось бы, чтобы можно было подвергать преобразованию значения прямо из регистров процессора. Для такого типа преобразований (значений в регистрах процессора) лучше подойдет способ с использованием сопроцессора. Рассмотрим его.




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