![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
Для умножения двоичных чисел без знака предназначена команда
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; Прочитано: 535 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!