Розподіл (div, idiv)

Мнемониками DIV. IDIV записують команди процесора, що позначають відповідно беззнаковое ділення й ділення чисел зі знаком.

DIV дільник IDIV дільник

де дільник - це 8-, 16-, 32-бітний регістр або 8-, 16-, 32-бітна змінна.

Місцезнаходження діленого в командах DIV. IDIV не вказується, воно жорстко визначено і залежить від розмірності (байт, слово, подвійне слово) подільника. З цієї причини дільником не може бути явно заданий (в команді) число, так як явно заданий число не має розмірності.

Ділене повинно бути вміщено:
в AX - якщо дільник має розмірність байт, тоді після ділення приватне знаходимо в регістрі AL. залишок від ділення - в регістрі AH;
в DX: AX - якщо дільник має розмірність слово (2 байта), тоді після ділення приватне знаходимо в регістрі AX. залишок від ділення - в регістрі DX ;;
в EDX: EAX - якщо дільник має розмірність подвійне слово (4 байта), тоді після ділення приватне знаходимо в регістрі EAX. залишок від ділення - в регістрі EDX.

При розподілі на слово або подвійне слово ділене повинно бути "розписано" на два регістру. Запис DX: AX означає ділене у вигляді подвійного слова, два старших байта якого поміщені в DX. два молодших байти - в AX. Запис EDX: EAX означає ділене у вигляді почетвереній слова (8 байт), чотири старших байти якого поміщені в EDX. чотири молодших байти - в EAX.

У беззнакову розподілі, якщо ділене не має розрядів в тій частині, яка повинна бути поміщена в DX або EDX. регістр DX або EDX просто обнуляют. У знаковому розподілі використовують команди cbw. cwd. cdq. при виконанні яких все старші біти заповнюються нулями - для позитивних чисел, або одиницями - для негативних чисел. Команда cbw знаково перетворює (розширює) вміст регістра AL до AX. команда cwd перетворює AX до DX: AX. команда cwde перетворює AX до EAX. команда cdq перетворює EAX до EDX: EAX.

У разі перевищення (overflow) результатом ділення розміру того регістра, куди повинен бути поміщений цей результат, подальше виконання програми переривається операційною системою. При беззнакову розподілі на байт максимально допустимий приватне становить 255, при розподілі на слово - 65535. Зважаючи на малу діапазону оброблюваних чисел і самого результату, розподіл на байт або слово, як операція, підтримувана сучасними процесорами Intel, має значення, в основному, для забезпечення сумісності з попередніми версіями процесорів і відповідними (застарілими) програмами. Однак, чим менше розмірність подільника, тим швидше виконується команда, і розподіл на байт і слово можуть і тепер (при відповідних умовах) послужити користь в алгоритмах з великими обсягами обчислень і критичних вчасно виконання. Так, для 386-процесорів виконання ділення на подвійне слово вимагає 38 тактів процесора, на слово - 22 такту, на байт - 14 тактів.

Приклади наведені нижче. Про функції PrintLine. PrintText. PrintDec см. VKDEBUG

Схожі статті