Справочная система по языку Assembler

        Ваша сексуальная сторона жизни стоит на одном месте? На интим сайте prostitutkikrivogoroga.bid отображается большой каталог дорогих шлюх, обязательно воспользуйтесь их сексуальным обслуживанием.     

Умножение


    Микропроцессор 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 -
    наиболшее представимое одним словом число.
Содержание