Команда деления числа без знака DIV и деления числа со знаком IDIV — КиберПедия 

История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...

Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...

Команда деления числа без знака DIV и деления числа со знаком IDIV

2024-02-15 21
Команда деления числа без знака DIV и деления числа со знаком IDIV 0.00 из 5.00 0 оценок
Заказать работу

Имея две отдельные команды умножения, микропроцессор 8x86 имеет и две отдельные команды деления. Команда DIV (divide - разделить) выполняет деление чисел без знака, а команда IDIV (integer divide - разделить целые числа) выполняет деление чисел со знаком. Эти команды имеют формат

DIV источник

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    ; а затем выполнить деление

 


Индивидуальное задание.

  1. Вычислить произведение элементов с заданием согласно варианту и результат поместить в элемент с заданным номером (для вариантов с 32-битными числами берутся младшие части элементов) (табл.4 из лабораторной № 2).

2.    Каждому студенту выдается 4-хзначный вариант.  Согласно этому варианту вычислить следующее выражение:

 

       F = (КОН1 оп1 КОН2) оп2 Х оп3 ( Y оп4 КОН3)

       где

                КОН1, КОН2, КОН3 – числовые константы, согласно табл. 1

                   оп1, оп2, оп3, оп4 – операции сложения, вычитания, умножения и деления согласно табл. 2

                   X, Y – переменные, тип которых определяется согласно табл. 3

       Числовые константы из табл. 1 берутся согласно первой цифре варианта, операции сложения и вычитания из табл. 2 – согласно второй цифре варианта, а размер и тип переменных – из табл. 3 согласно третьей цифре варианта.    

 

 

Таблица 1.

 

Первая цифра варианта

0 1 2 3 4 5 6 7 8 9
  КОН1   12   12569   8735   12   78   4596   12563   4589   369   458
  КОН2     1369   12   588   96385   47   589   78   29   3856   481
  КОН3   3699   4589   12   3698   4862   2385   2852   5625   336   36

 

 

Таблица 2.

 

Вторая цифра варианта

0 1 2 3 4 5 6 7 8 9
  оп1     /   *   —     +   *   +   —   —   /   —
  оп2     *    /   *     /   —   +   /   *   +   +
  оп3     +   +   /     *   +   *   +   /   —   /
  оп4     —   +   —     —   /   /   *   +   *   *

 

 

Таблица 3.

 

Третья цифра варианта

0 1 2 3 4 5 6 7 8 9
  X   char un char int un int int un char int char char un int
  Y   int un int char un char int un int int int char un char

Примечания:        – char         – 8 битн. со знаком

– un. char – 8 битн. без знака

                              – int           – 16 битн. со знаком

– un. int     – 16 битн. без знака

                                  

Пример. У студента индивидуальный вариант 990. Строим индивидуальное выражение для вычисления:

                              F=(458 – 481) + X / (Y * 36)

       Согласно варианту переменные X, Y и Z должны быть описаны следующим образом

                   char x;

                   int y;

       Ассемблерный фрагмент выглядит следующим образом:

                   mov bx, 458h // Пересылаем константу в регистр AX

                   sub bx, 481h // Вычитаем константу

                   mov ax,y

                   mov cx,36h

                   imul cx                   // Пренебрегаем старшей частью 32-б рез-та

                   mov cx,ax

                   mov al,x                     

                   cbw                        // Расширяем число X до 16 бит

                   cwd                       // расширяем x до 32 бит

                   idiv cx        // результат в ax

                   add bx,ax

                   mov f,cx

Содержание отчета :

1. Название работы

2. Цель работы

3. Приборы и оборудование

4. Краткие теоретические сведения

5. Индивидуальное задание

6. Распечатанный текст программы

7. Выводы.

       Вопросы к защите лабораторной работы.

1. Форматы арифметических данных.

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

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

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

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

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


Лабораторная работа №5

 «Изучение команд манипулирования битами»

 

Цель работы: изучить форматы и правила работы с командами манипулирования битами микропроцессора i8086.

 

Оборудование: IBM - совместимый персональный компьютер, работающий под управлением операционной системы, совместимой с MS-DOS®.

 

Программное обеспечение: Программа DEBUG.


Поделиться с друзьями:

История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...

Папиллярные узоры пальцев рук - маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни...

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...

Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.017 с.