На главную Назад
Добро пожаловать, уважаемый посетитель!

Микропроцессор 8088 значительно мощнее предшествовавших ему

8=битовых устройств.Одна из причин увеличения мощности -

добавление команд умножения и деления к набору команд

микропроцессора.В прежних микропроцессорах выполнение операций

умножения и деления требовало вызова подпрограмм на языке

ассемблера.

 

Существует две команды умножения. Покоманде MUL умножаются два

целых числа без знака и дает результат без знака. По команде IMUL

умножаются целые числа со знаком. При умножении целых чисел в

качестве операндов используются числа, представленные в

дополнительном коде и получается результат, имеющий правильный знак

и значение.

 

Обе команды умножения работают как с байтами, так и со словами.

Однако диапазон форм представления операндов гораздо уже, чем для

команд сложения и вычитания. Фиг. 4.13 иллюстрирует варианты

команды умножения. Чтобы умножить 8 бит на 8 бит, один из операндов

должен быть в регистре AL, а результат всегда оказывается в

регистре AX. Результат может иметь длину вплоть до 16 бит

(максимальное получаемое значение равно 255 * 255 = 65025). Чтобы

умножить 16 бит на 16 бит, один из операндов нужно поместить в

регистр AX. Результат, который может быть длиной до 32 бит

(максимальное значение 65535 * 65535 < 2+32) помещается в пару

регистров; в регистре DX содержатся старшие 16 бит результата, а

врегистре AX - младшие 16 бит. Умножение не допускает

непосредственного операнда.

 

Установка флагов командой умножения несколько отличается от

других арифметических команд. Единственные имеющие смысл два флага

- это флаги переноса и переполнения, и они по=разному

устанавливаются двумя командами.

 

Команда умножения без знака MUL устанавливает оба флага, если

старшая половина резул в регистре AL получится 2AH; команда AAM

преобразует этот результат, оставляя в регистре AH число 04H, и

02H в регистре AL - или распакованное десятичное число 42 в паре

регистров AH:AL.

 

ЪДДДДДДДДї

іAXі

іBXі

іCXі

іDXі

ЪДДДДДДДДїАДДДДДДДДЩЪДДДДДДДДВДДДДДДДДї

іAXі *ЪДДДДДДДДїДДДДД>іDX іAXі

АДДДДДДДДЩіSIіАДДДДДДДДБДДДДДДДДЩ

іDIі

іBPі

іSPі

АДДДДДДДДЩ

ЪДДДДДДДДї

і Память і

і(слова) і

АДДДДДДДДЩ

(a) Умножение слов

 

ЪДДДДДДДДДї

іAHі

іALі

іBHі

іBLі

іCHі

іCLі

іDHі

іDLі

ЪДДДДДДДДїАДДДДДДДДДЩ ЪДДДДДДДДВДДДДДДДДї

іALі *ЪДДДДДДДДДїДДДДД>іAHіALі

АДДДДДДДДЩі Памятьі АДДДДДДДДБДДДДДДДДЩ

і(байты)і

АДДДДДДДДДЩ

(b) умножение байтов

 

Фиг. 4.13 Операции умножения

Целое умножение со знаком (IMUL) устанавливает флаги переноса и

переполнения в соответствии с тем же критерием, т.е. эти флаги

устанавливаются в случае, когда результат не может быть представлен

тоько своей младшей половиной. Однако, поскольку число имеет знак,

то задача не сводится только к сравнению старшей половины

результата с нулем. Команда IMUL устанавливает флаги, если старшая

половина результата не является распространением знака младшей. Это

значит, что в случае положительного результата проверка будет такой

же, как для команды MUL - установка флага происходит при ненулевой

старшей половине результата (но самый старший бит равен нулю,

указывая на положительность результата). В случае отрицательного

результата IMUL устанавливает флаги, если старшая половина

результата состоит не только из едениц (но старший бит равен 1,

указывая на отрицательность результата). Например, перемножение

байтов с отрицательным результатом устанавливает флаги когда

результат менше -128 - наименьшего числа, представимого в одном

байте. Другой пример, перемножение слов с положительным

результатом, устанавливает флаги, если результат превышает 32 767 -

наиболшее представимое одним словом число.


 

Mail.ru