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

Преобразование неупакованного BCD-числа размером N байт в упакованное BCD-число (макрокоманда)



Преобразование неупакованного BCD-числа размером N байт в упакованное BCD-число (макрокоманда)

ВС D_U N РАС К_ТО_РАСК macro UNPACK.N,PACK local cycl

:BCD_UNPACK_TO_PACK UNPACK,N.PACK - макрокоманда преобразования неупакованного

iBCD-числа"размером N байт в упакованное BCD-число. ;Порядок следования байтов - младший байт по младшему адресу ;(Intel).

сохраняем регистры ... push ds

pop es

mov ecx.N

:определяем N/2 (размерность PACK) - если нечетное, юкругляем в большую сторону

shr ecx.l ;делим на 2

bt есх.О

jc $+4

setc Ы

inc есх добавляем 1 для округления в больщую сторону предыдущие три команды можно заменить одной: adcecx.O :теперь в есх правильное значение сч. цикла в соответствии с размерностью UNPACK



eld шорядок обработки BCD-цифр - начиная с младшей

lea edi.PACK

lea esi.UNPACK cycl: xorax.ax загрузить очередные 2 неупакованные BCD-цифры из UNPACK в ах

lodsw

rol ah,4

rol ax,4

stosb

loop cycl

emp . 0

jne $+7

and byte ptr [edi-1].OfOh восстанавливаем регистры ...

endm

 



Содержание раздела