logo

Система команд x86
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

DIV

Деление

Влияние команды на флаги и форматы команды:

OF

DF

IF

TF

SF

ZF

AF

PF

CF

?

?

?

?

?

?

 

Код

Команда

Описание

Проц.

Пример

F6 /6

DIV AL,r/m8

Беззнаковое деление AX на r/m8, частное помещается в AL, остаток от деления - в AH

8086

div cl

F7 /6

DIV AX,r/m16

Беззнаковое деление DX:AX на r/m16, частное помещается в AX, остаток от деления - в DX

8086

div bx

F7 /6

DIV EAX,r/m32

Беззнаковое деление EDX:EAX на r/m32, частное помещается в EAX, остаток от деления - в EDX

Intel386

div edi

Операция:

IF SRC = 0

THEN #DE; (* Деление на нуль *)

FI;

IF OperandSize = 8 (* Операция: "слово/байт" *)

   THEN

      temp = AX / SRC;

      IF temp > 0xFF

         THEN #DE; (* Ошибка деления *)

         ELSE

            AL = temp;

            AH = AX MOD SRC;

      FI;

   ELSE

      IF OperandSize = 16 (* Операция: "двойное слово/слово" *)

         THEN

            temp = DX:AX / SRC;

            IF ( temp > 0xFFFF )

               THEN #DE; (* Ошибка деления *)

               ELSE

                  AX = temp;

                  DX = DX:AX MOD SRC;

            FI;

         ELSE (* Операция: "учетверенное слово/двойное слово" *)

            temp = EDX:EAX / SRC;

            IF ( temp > 0xFFFFFFFF )

               THEN #DE; (* Ошибка деления *)

               ELSE

                  EAX = temp;

                  EDX = EDX:EAX MOD SRC;

            FI;

      FI;

FI;

Описание:

Команда DIV выполняет целочисленное деление без знака. Делитель представляется r/m-операндом. Делимое задается неявно, только делитель задается как операнд. Остаток всегда меньше делителя. Тип делителя определяет, какие регистры будут использованы. Если размер делителя 8 бит, в качестве делимого используется AX. При размере делителя 16 бит, делимое находится в паре регистров DX:AX. Целая часть частного помещается в первом случае в AL, остаток — в AH, во втором случае, соответственно, в AX и DX. Если размер делителя — 32 бита, то аналогичным образом используются EDX и EAX.

 

Таблица 6.42. Операнды, используемые командой DIV

Размер

Делитель

Частное

Остаток

Делимое

byte

r/m8

AL

AH

AX

word

r/m16

AX

DX

DX:AX

dword

r/m32

EAX

EDX

EDX:EAX

 

Если результирующее частное слишком велико, чтобы помещаться по назначению или если делитель равен нулю, то генерируется особая ситуация #DE. Целочисленное частное округляется в сторону нуля. Абсолютная величина остатка всегда меньше, чем абсолютная величина делителя.

Особые ситуации защищенного режима:


#DE, если делимое равно нулю или частное слишком велико для регистра-назначения.
#GP(0), если используется некорректный эффективный адрес операнда в памяти в сегментах CS, DS, ES, FS, GS или нулевой селектор.
#SS(0) при использовании некорректного эффективного адреса в сегменте SS.
#PF(Код ошибки), страничная ошибка.
#AC(0) при невыровненной ссылке в память при текущем уровне привилегий равном 3.

Особые ситуации режима реальной адресации:


#DE, если делимое равно нулю или частное слишком велико для регистра-назначения.
#GP, если любая часть операнда находится вне пространства эффективных адресов в сегментах CS, DS, ES, FS или GS.
#SS, если любая часть операнда находится вне пространства эффективных адресов в сегменте SS.

Особые ситуации режима V86:


Такие же, как и в режиме реальной адресации.
#PF(Код ошибки), страничная ошибка.
#AC(0) при невыровненной ссылке в память.

Входит в группу команд: Базовая система команд CPU



Все права защищены © 1997-2011 Перепечатка возможна только по согласованию с владельцем авторских прав. admin@club155.ru

Яндекс.Метрика               Сервер радиолюбителей России - схемы, документация,

 соревнования, дипломы, программы, форумы и многое другое!   схемы новости электроники