Idiv источник
где источник - делитель размером в байт или слово, находящийся в регистре общего назначения или в ячейке памяти. Делимое должно иметь двойной размер; оно извлекается из регистров АН и AL (при делении на 8-битовое число) или из регистров DX и АХ (при делении на 16-битовое число). Результаты возвращаются следующим образом:
Если операнд-источник представляет собой байт, то частное возвращается в регистре AL, а остаток в регистре АН.
Если операнд-источник представляет собой слово, то частное возвращается в регистре АХ, а остаток - в регистре DX.
Обе команды оставляют состояние флагов неопределенными, но если частное не помещается в регистре-приемнике (AL или АХ), то микропроцессор 8x86 сообщает Вам об этом весьма драматическим образом: он генерирует прерывание типа 0 (деление на 0).
Переполнение результата деления возникает при следующих условиях:
1. Делитель равен 0.
2. При делении байтов без знака делимое по меньшей мере в 256 раз превышает делитель.
3. При делении слов без знака делимое по меньшей мере в 65 536 раз превышает делитель.
4. При делении байтов со знаком частное лежит вне диапазона от -128 до +127.
5. При делении слов со знаком частное лежит вне диапазона от -32768 до 32767. Приведем несколько типичных примеров операций деления:
DIV BX ;Разделить DX:AX на ВХ , без знака
DIV MEM_BYTE ;Разделить AH:AL на байт памяти, без знака
IDIV DL ;Разделить АН:AL на DL со знаком
IDIV MEM_WORD ;Разделить DX:AX на слово памяти, со знаком
Команды DIV и IDIV не позволяют прямо разделить на непосредственное значение; его надо предварительно загрузить в регистр или ячейку памяти. Например, команды
MOV ВХ,20
DIV ВХ
разделят объединенное содержимое регистров DX и АХ на 20.
Команда коррекции деления для представления в кодах ASCII (команда AAO)
Все ранее описанные команды десятичной коррекции (ААА, DAA, AAS, DAS и ААМ) выполняли действия над результатом операции. В противоположность им команда AAD (ASCII adjust for division - скорректировать деление для представления в кодах ASCII) должна исполняться непосредственно перед операцией деления.
Команда ADD преобразует неупакованное делимое в двоичное значение и загружает его в регистр AL. Для этого она умножает старшую цифру делимого (содержимое регистра АН) на 10 и добавляет полученный результат к младшей цифре, находящейся в регистре AL. Затем она обнуляет содержимое регистра АН.
Приведем типичный пример применения команды AAD:
AAD ; Скорректировать неупакованное делимое в АН:АL,
DIV BL ; а затем выполнить деление
Задание
Организовать два массива по 5 элементов каждый. Выполнить поэлементно операции сложения, умножения, вычитания и деления. Каждый раз результат выводить в новый массив.
Контрольные вопросы
Формат и правила применения команд ADD и ADC.
Воздействие на флаги команд ADD и ADC.
Формат и правила применения команд SUB и SBB.
Воздействие на флаги команд SUB и SBB.
Команды обращения знака и расширения знака.
Формат и правила применения команд MUL и IMUL.
Воздействие на флаги команд MUL и IMUL.
Формат и правила применения команд DIV и IDIV.
Воздействие на флаги команд DIV и IDIV.
Правила применения команд AAO и AAM.