Главная Программирование Софт Документы Статьи Обо мне


Основные команды языка ASSEMBLER



###  Команда MUL #########################################################

 ### Производит  умножение  аккумулятора  и  операнда  команды. Сомножители
 интерпретируются как беззнаковые числа.
     В операциях над байтами  функцию аккумулятора выполняет регистр  AL, а
 16-битное  произведение  образуется  в  регистре AX. Максимальное значение
 произведения равно 255 * 255 = 65025.
     Если  операнд идентифицирует слово, оно умножается  на аккумулятор  AX,
 а 32-битное произведение формируется в регистрах  DX (старшая часть) и  AX.

 ### Если старшая половина произведения не равна нулю, то флажки  CF  и  OF
 устанавливаются  в  единицу. Состояние  остальных  флажков  не  определено.

 ### Форматы команды:
                                                       7                0
    +-------------------------+ l = 2 байта            +----------------+
    ¦ MUL  Регистр            ¦ t = 70...77 тактов     ¦   1111011  w   ¦
    +-------------------------+ (пpи байте pегистpа)   ¦----------------¦
                                t = 118:133 такта      ¦    11100 reg   ¦
                                (при слове регистра)   +----------------+

                                                       7                0
    +-------------------------+ l = 2-4 байта          +----------------+
    ¦ MUL  Память             ¦ t = (76:83)+ЕА тактов  ¦   1111011  w   ¦
    +-------------------------+ (пpи байте памяти)     ¦----------------¦
                                t = (124:139)+EA тактов¦  mod 100 r/m   ¦
                                (пpи слове памяти)     ¦----------------¦
                                                       ¦     dispL      ¦
                                                       +----------------¦
                                                       ¦     dispH      ¦
                                                       +----------------+
 ### Примечание:
     При  умножении  на  числа,  котоpые  являются  степенями  2,  удобнее
 пользоваться  командой  сдвига  влево  SAL.

###  Команда IMUL #########################################################

 ### Производит  умножение  аккумулятора  и  операнда  команды. Сомножители
 интерпретируются как знаковые числа.
     В операциях над байтами  функцию аккумулятора выполняет регистр  AL, а
 16-битное  произведение  образуется  в  регистре AX.
     Если  операнд идентифицирует слово, оно умножается  на аккумулятор  AX,
 а 32-битное произведение формируется в регистрах  DX (старшая часть) и  AX.

 ### Если  старшая  половина произведения не равна 00(0000) или FF(FFFF), то
 флажки  CF  и  OF устанавливаются в единицу. Состояние остальных флажков не
 определено.

 ### Форматы команды:
                                                       7                0
    +-------------------------+ l = 2 байта            +----------------+
    ¦ IMUL  Регистр           ¦ t = 80:98 тактов       ¦   1111011  w   ¦
    +-------------------------+ (пpи байте pегистpа)   ¦----------------¦
                                t = 128:154 такта      ¦    11101 reg   ¦
                                (при слове регистра)   +----------------+

                                                       7                0
    +-------------------------+ l = 2-4 байта          +----------------+
    ¦ IMUL  Память            ¦ t = (86:104)+ЕА тактов ¦   1111011  w   ¦
    +-------------------------+ (пpи байте памяти)     ¦----------------¦
                                t = (134:160)+EA тактов¦  mod 101 r/m   ¦
                                (при слове памяти)     ¦----------------¦
                                                       ¦     dispL      ¦
                                                       +----------------¦
                                                       ¦     dispH      ¦
                                                       +----------------+

###  Команда DIV #########################################################

 ### Производит деление аккумулятора и его расширения на содержимое операнда
 команды.  Деление   выполняется   над   числами,  интерпретированными   как
 беззнаковые. Делимое должно быть в 2 раза длиннее делителя.
     Байтовые  команды  делят 16-битовое число, расположенное в аккумуляторе
 AX, на  8-битный  делитель. Частное  результата  помещается в регистр AL, а
 остаток в регистр AH.
     Команда, работающая  со словами, делит  32-битовое число, расположенное
 в регистре  DX (старшая часть) и  аккумуляторе  AX, на  16-битный делитель.
 Частное результата помещается в регистр AX, а остаток в регистр DX.

 ### Состояние регистра флажков не определено.

 ### Форматы команды:
                                                       7                0
    +-------------------------+ l = 2 байта            +----------------+
    ¦ DIV  Регистр            ¦ t = 80:90 тактов       ¦   1111011  w   ¦
    +-------------------------+ (пpи байте pегистpа)   ¦----------------¦
                                t = 144:162 такта      ¦    11110 reg   ¦
                                (пpи слове pегистpа)   +----------------+

                                                       7                0
    +-------------------------+ l = 2-4 байта          +----------------+
    ¦ DIV  Память             ¦ t = (86:96)+ЕА тактов  ¦   1111011  w   ¦
    +-------------------------+ (пpи байте памяти)     ¦----------------¦
                                t = (150:168)+EA тактов¦  mod 110 r/m   ¦
                                (при слове памяти)     ¦----------------¦
                                                       ¦     dispL      ¦
                                                       +----------------¦
                                                       ¦     dispH      ¦
                                                       +----------------+
 ### Примечание:
      Если  частное  результата  превышает  разрядность  аккумулятора или
 делитель равен нулю, генерируется  прерывание типа 0, а частное и остаток
 не  определены.  Если  нет  подпрограммы   обработки  такого   прерывания,
 необходимо  до операции деления проверить  возможность  его возникновения.
      При  делении  на  числа,  котоpые  являются  степенями  2,  удобнее
 пользоваться командой сдвига вправо.

###  Команда IDIV #########################################################

 ### Производит деление аккумулятора и его расширения на содержимое операнда
 команды. Деление выполняется над числами, интерпретированными как знаковые.
 Делимое должно быть в 2 раза длиннее делителя.
     Байтовые  команды  делят 16-битовое число, расположенное в аккумуляторе
 AX, на  8-битный делитель. Частное результата помещается  в  регистр  AL, а
 остаток  в  регистр   AH.
     Команда, работающая  со словами, делит  32-битовое число, расположенное
 в регистре  DX (старшая часть) и  аккумуляторе  AX, на  16-битный делитель.
 Частное результата помещается в регистр AX, а остаток в регистр DX.

 ### Состояние регистра флажков не определено.

 ### Форматы команды:
                                                       7                0
    +-------------------------+ l = 2 байта            +----------------+
    ¦ IDIV  Регистр           ¦ t = 101:112 тактов     ¦   1111011  w   ¦
    +-------------------------+ (пpи байте pегистpа)   ¦----------------¦
                                t = 165:184 такта      ¦    11111 reg   ¦
                                (при слове регистра)   +----------------+

                                                       7                0
    +-------------------------+ l = 2-4 байта          +----------------+
    ¦ IDIV  Память            ¦ t = (107:118)+ЕА тактов¦   1111011  w   ¦
    +-------------------------+ (пpи байте памяти)     ¦----------------¦
                                t = (107:190)+EA тактов¦  mod 111 r/m   ¦
                                (при слове памяти)     ¦----------------¦
                                                       ¦     dispL      ¦
                                                       +----------------¦
                                                       ¦     dispH      ¦
                                                       +----------------+
 ### Примечание:
      Если  частное  результата  превышает  разрядность  аккумулятора или
 делитель равен нулю, генерируется  прерывание типа 0, а частное и остаток
 не  определены.  Если  нет  подпрограммы   обработки  такого   прерывания,
 необходимо  до операции деления проверить  возможность  его возникновения.
      Если  результат  отрицательный,  частное  усекается  (в направлении
 нуля), а остаток имеет тот же знак, что и делимое. Например:
          +---------------------------------------------------+
          ¦делимое (AX)¦  делитель  ¦частное (AL)¦остаток (AH)¦
          +------------+------------+------------+------------¦
          ¦      7     ¦      2     ¦      3     ¦      1     ¦
          ¦      7     ¦    - 2     ¦    - 3     ¦      1     ¦
          ¦    - 7     ¦      2     ¦    - 3     ¦    - 1     ¦
          ¦    - 7     ¦    - 2     ¦      3     ¦    - 1     ¦
          +---------------------------------------------------+

[   ВЕРНУТЬСЯ К ОГЛАВЛЕНИЮ   ]
Сайт создан в системе uCoz