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



         

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


mov cx.len_string

lea dx.string ;формируем указатель на строку string

movah,3fh :номер функции DOS

int 21h

jc exit :переход в случае ошибки :в регистре AL - количество действительно введенных десятичных цифр

mov ecx.eax

sub есх.2 корректируем счетчик цикла (чтобы не учитывать OdOah. вводимые 3fh)

jcxz $+4 :число не было введено

jmp $+5

jmp exit cont_l:dec ecx ;не умножать на 10 последнюю цифру числа

jcxz $+4 юднозначное число

tjmp S+5 jmp m2 lea si.string ;формируем указатель на строку string хог еах.еах :еах:=0 ml: хог edx.edx

mov dl.[si]

and dl.Ofh преобразуем ASCI I->BCD add_unsign_N_lstring_bin.dl. len_string_bin ¦.умножаем на 10

mul_unsign_NM string_bin. len_string_bin.ten,l. string_bin_w :копируем string bin_w в string_bin

eld

push si push ex

Ids si .adr_sthng_bin_w

lesdi.adr_string_bin

mov cx.len_string_bin_w repmovsb pop ex pop si

inc si dec ex jcxm2 ' jmp ml m2: mov dl .[si] and dl.Ofh

¦ add_unsign_N_lstring_bin.dl, len_string_bin

¦ результат преобразования - в строке string_bin

Одно из направлений совершенствования этой программы — динамическое \ выделение памяти для всех чисел с неизвестной длиной. Необходимо заметить, i что способ преобразования длинных чисел универсален — его можно использовать и для преобразования значений, которые укладываются в представимые в микропроцессоре диапазоны типов данных.




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