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

       

Вычисление модуля числа размером N байт



Вычисление модуля числа размером N байт

---------------------------------------------------------------------

:calc_abs - процедура вычисления модуля числа размером N байт

:Вход: bx - адрес операнда в памяти; сх - длина операнда.
;Порядок следования байтов - младший байт по младшему адресу.

:Выход: bx - адрес результата в памяти.

---------------------------------------------------------------------

.code

calc_abs proc определим знак операнда

mov si.cx

dec si

test byte ptr [bx][si],80h проверяем знак операнда

jz @@exit ;число положительное

call calc_complement @@exit:ret
calc_abs endp



Вычисление модуля числа размером N байт (реверсивное)

calc_abs_r - процедура на ассемблере вычисления модуля числа размером N байт

:(старший байт по младшему адресу).

:Вход: регистр ВХ - адрес операнда в памяти: регистр СХ - длина операнда. :Выход: регистр ВХ - адрес модуля операнда в памяти.

.code

calc_abs_r proc определим знак операнда

test byte ptr [bx],80h ;проверяем знак operand

jz @@exit :число положительное

call calc_complement_r @@exit: ret calc_abs_r endp

Для вычислений над операндами, порядок следования байтов которых характерен для микропроцессоров Intel, нам придется разработать еще один вариант процедуры умножения значений размерностью в произвольное количество байтов. Псевдокод и соответствующая ему программа на ассемблере mul_sign_NM_I приведены на дискете.



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