Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа 2.docx
Скачиваний:
22
Добавлен:
10.05.2015
Размер:
46.76 Кб
Скачать

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 элементов каждый. Выполнить поэлементно операции сложения, умножения, вычитания и деления. Каждый раз результат выводить в новый массив.

Контрольные вопросы

  1. Формат и правила применения команд ADD и ADC.

  2. Воздействие на флаги команд ADD и ADC.

  3. Формат и правила применения команд SUB и SBB.

  4. Воздействие на флаги команд SUB и SBB.

  5. Команды обращения знака и расширения знака.

  6. Формат и правила применения команд MUL и IMUL.

  7. Воздействие на флаги команд MUL и IMUL.

  8. Формат и правила применения команд DIV и IDIV.

  9. Воздействие на флаги команд DIV и IDIV.

  10. Правила применения команд AAO и AAM.