Инструменты пользователя

Инструменты сайта


examination:asm:question34

Вопрос №34. Деление двоичных чисел

Команда DIV служит для деления на 8-, 16- и 32-разрядное беззнаковое целое число, находящееся в одном из регистров общего назначения или в памяти операнда, расположенного в регистрах АХ, DX: АХ или EDX: EAX:

DIV r/m8

DIV r/ml6

DIV r/m32

Делимое задано неявно, его местоположение фиксировано и зависит от размера операндов:

После выполнения команды содержимое флагов неопределенно, но возможно прерывание с номером 0, возникающее из-за деления на 0. Это прерывание может возникнуть, если:

  1. делитель равен нулю
  2. частное не входит в отведенную для него разрядную сетку

Деление целых чисел со знаком

Команды CBW, CWD, CDQ

Прежде чем рассмотреть команды деления целых чисел со знаком, мы должны познакомиться с тремя командами, с помощью которых можно расширить длину целого числа со знаком (т.е. распространить знаковый разряд на его старшую половину).

Команда CBW (Convert Byte to Word, или преобразовать байт в слово) позволяет расширить знаковый разряд из регистра AL в регистр АН. В результате знак исходного числа сохраняется.

Команда CWD (Convert Word to Doubleword, или преобразовать слово вдвойное слово) расширяет знаковый бит из регистра АХ в регистр DX.

Команда CDQ (Convert Doubleword to Quadword, или преобразовать двойное слово в учетверенное слово) расширяет знаковый бит из регистра ЕАХ в регистр ЕDХ.

Команда IDIV

Команда IDIV позволяет выполнить деление целых чисел со знаком. Она имеет те же форматы операнда, что и команда DIV. При делении на 8-разрядное число, перед выполнением команды IDIV нужно расширить знак делимого в регистр АН с помощью команды CBW. По аналогии, при выполнении деления на 16-разрядное число, необходимо вначале расширить знак регистра АХ в регистр DX. Аналогично, при выполнении деления на 32-разрядное число, необходимо вначале расширить знак регистра EAX в регистр EDX.

После выполнения обеих команд Div и IDIV арифметические флаги состояния процессора остаются в неопределенном состоянии.

Переполнение при делении

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

examination/asm/question34.txt · Последние изменения: 2014/01/15 12:12 (внешнее изменение)