Команды деления  - DIV, IDIV
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

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

DIV источник; Где источник - делитель размером в байт или слово,

IDIV источник; находящийся в регистре общего назначения или

                        в ячейке памяти.

Делимое должно иметь двойной размер; оно извлекается из регистра АХ (при делении на 8-битовое число) или из регистров DX и АХ (при делении на 16-битовое число). Результаты возвращаются следующим образом:

– если операнд-источник представляет собой байт, то частное возвращается в регистр AL, а остаток в регистр АН;

– если операнд-источник представляет собой слово, то частное возвращается в регистр АХ, а остаток - в регистр DX.

Обе команды оставляют состояние флагов неопределенными, но если частное не помещается в регистре-приемнике (AL или АХ), то микропроцессор генерирует прерывание типа 0 (деление на 0).

Переполнение результата деления возникает при следующих условиях:

– делитель равен 0;

– при делении байтов без знака, делимое, по меньшей мере, в 256 раз превышает делитель;

– при делении слов без знака, делимое, по меньшей мере, в 65 536 раз превышает делитель;

– при делении байтов со знаком частное лежит вне диапазона

-128 до +127;

– при делении слов со знаком частное лежит вне диапазона от -32768 до 32767.   

Приведем несколько типичных примеров операций деления:

          DIV BX; Разделить DX:AX на ВХ, без знака.

          DIV MEM_BYTE; Разделить АХ на байт памяти, без знака.

          IDIV DL; Разделить АН:AL на DL со знаком.

          IDIV MEM WORD; Разделить DX:AX на слово памяти, со знаком.

Команды DIV и IDIV не позволяют прямо разделить на непосредственное значе­ние, так как процессор не может определить тип данных. Число предварительно загружают в регистр или ячейку памяти, которые точно указывают тип данных числа. Например, команда

 MOV BX,20; Загружает непосредственное данное в словный регистр,

 DIV ВХ ; а здесь делится содержимое регистров DX и АХ на 20.

Команды умножения - MUL, IMUL

Команда MUL (multiply-умножить) умножает числа без знака, a IMUL (integer multiply-умно­жить) умножает целые числа со знаком. Множимое и множитель у обеих команд должны быть данные одного типа, то есть байты, слова, двойные слова и т. д.

Эти команды имеют следующий формат:

MUL источник; Где источник - регистр общего назначения,

IMUL источник; или ячейка памяти размером в байт или слово.

В качестве первого операнда (множимого),  команды MUL и IMUL используют содер­жимое регистра AL (при операциях над байтами) или регистра АХ (при операциях над словами). Произведение имеет двойной размер и возвращается следующим образом:

– умножение байтов - возвращает 16-битовое произведение в регистры АН (старший байт) и AL (младший байт);

– умножение слов - возвращает 32- битовое произведение в регистры DX (старшее слово) и АХ (младшее слово).

То есть размер произведения  n- битных сомножителей равен 2 n .

После исполнения команды MUL флаги CF и OF равны 0, если старшая половина произведения равна 0; в противном случае оба этих флага равны 1. После исполнения команды IMUL флаги CF и OF равны 0, если старшая половина произведения представляет собой лишь расширение знака младшей половины. В противном случае они равны 1.

Несколько примеров умножения:

MUL BX; Умножить ВХ на АХ без знака.

MUL MEM_BYTE; Умножить содержимое ячейки памяти на AL без знака.

IMUL DL; Умножить DL на AL со знаком.

IMUL MEM_WORD; Умножить ячейку памяти на АХ со знаком.

Команды MUL и IMUL не дозволяют в качестве операнда использовать непосредственное число. Перед умножением непосредственное число необходимо загрузить в регистр или в ячейку памяти.

Например: MOV DX,10; Непосредственное данное поместим в DX.

              MUL DX; Умножаем содержимое регистра АХ на 10.

Дата: 2018-11-18, просмотров: 593.