Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Умножение двоичных чисел без знака



Для умножения двоичных чисел без знака предназначена команда

MUL сомножитель1

Второй операнд сомножитель2 задан неявно. Его местоположение фиксировано и зависит от размера сомножителей. Так как в общем случае результат умножения больше, чем любой из сомножителей, то его размер и местоположение должны быть определены тоже однозначно. Варианты размеров сомножителей и размещения второго операнда и результата приведены в таблице.

Таблица 8. – Расположение операндов и результата при умножении

Сомножитель1 Сомножитель2 Результат
Байт al 16 бит в ax: al-младшая часть результата; ah-старшая часть результата
Слово ax 32 бит в паре dx:ax: ax-младшая часть, dx-старшая часть
Двойное слово eax 64 бит в паре edx:eax: eax-младшая часть, edx-старшая часть

Из таблицы видно, что произведение состоит из двух частей и в зависимости от размера операндов размещается в двух местах: на месте сомножитель2 (младшая часть) и в дополнительных регистрах ah, dx, edx (старшая часть). Для того, чтобы определить, что результат достаточно мал и уместился в одном регистре, или что он превысил размерность регистра, и старшая часть результата оказалась в другом регистре, используются флаги переноса cf и переполнения of.

Если старшая часть результата нулевая, то после операции умножения флаги cf и of равны 0. Если же эти флаги ненулевые, то это означает, что результат состоит из двух частей, и это обстоятельство следует учитывать при дальнейшей работе. Например умножение чисел 25 и 45:

. data

rez_l db 45

rez_h db 0

. code

xor ax, ax

mov al, 25;в al один из сомножителей

mul res_1;результат в al (младшая часть) и в ah (старшая часть)

jnc m1;если нет переполнения, то на m1

mov rez_h,ah;старшая часть результата в rez_h

m1:

mov rez_1,al

Для определения размера результата командой условного перехода jnc анализируется состояние флага cf, и если оно не равно 1, то результат остается в рамках регистра al. Если же cf =1, то выполняется команда в строке 16, которая формирует в поле rez_h старшее слово результата.





Дата публикования: 2014-12-08; Прочитано: 511 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...