Команды умножения целых чисел
Инструкции MUL используется для умножения без знаковых величин, а инструкция IMUL – для умножения знаковых чисел. Обе инструкции могут изменять состояние флагов переноса CF и переполнения OF. Формат инструкций следующий: MUL регистр MUL память IMUL регистр IMUL память. Можно умножать байт на байт, слово на слово и в 32-разрядных моделях Intel – двойное слово на двойное слово. Как видно из формата, в команде указывается только один из сомножителей, второй сомножитель по умолчанию располагается в регистре AL для байтовых операндов и в регистре АХ – для двухбайтовых операндов. Как видно из таблицы, операнды-сомножители должны иметь одинаковый формат: либо оба операнда – байты, либо оба операнда – слова. Если потребуется умножить байт на слово, необходимо сначала привести в соответствие размеры операндов. Результат перемножения правильных неупакованных BCD-чисел может быть представлен в неупакованном формате BCD-чисел с помощью команды ААМ. Команда работает с регистрами AL и AH и выполняет следующее: делит значение регистра AL на 10 и запоминает частное в регистре АН (старшая неупакованная цифра результата) и остаток – регистре AL (младшая неупакованная цифра результата). Однако очевидно, что этими операциями можно выполнить только табличное умножение. Для более сложных операций умножения необходимо разработать программу, реализующую умножение “в столбик”, получение частных произведений, их сдвиги и сложение. Операции, аналогичной ААМ для упакованных BCD-чисел в микропроцессоре не существует.
|