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

     

Умножение чисел размером 1 байт с учетом знака



Умножение чисел размером 1 байт с учетом знака

;mul_sign.asm - программа умножения чисел размером 1 байт с учетом знака ;Вход: multiplier], и multiplied - множители со знаком размерностью 1 байт. ;Выход: product - значение произведения.

.data значения в multiplier], и multiplied нужно внести

product label word

productj label byte

multiplierl db ? ;множитель 1 (младшая часть произведения)

product_h db 0 :старшая часть произведения

multiplied db ? :множитель 2

.code

mul_sign proc

mov al.multiplierl

imul multiplied :оценить результат:

jnc no_carry :нет переполнения - на no_carry обрабатываем ситуацию переполнения

mov productji.ah :старшая часть результата, знак результата - старший бит product_h no_carry: mov productj,al :младшая часть результата, productji - расширение знвка

ret

mul_sign endp. main:

call mul_sign end main

Аналогично умножению без знака здесь также все достаточно просто и реализуется средствами самого процессора. Проблема та же — правильное определение размера результата. Произведение чисел большей размерности (2/4 байта) выполняется аналогично. Необходимо заменить директивы DB на DW/DD, регистр AL на АХ/ЕАХ, регистр АН на DX/EDX. Более того, в отличие от команды MUL команда IMLJL допускает более гибкое расположение операндов.



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