команда div

команда div

Як вивчити англійську

У наш час будь-яка людина має знати англійську мову. А тим більше програміст. Тому що досить велика частина документації існує тільки англійською. А професіонал не може чекати, поки хтось переведе йому документацію. Він повинен вміти швидко отримувати потрібну інфорамцію і використовувати її, незалежно від того, на якому вона мовою - англійською або російською. Посилання на курси з англійської.

Інструкція DIV в Асемблері виконує ділення без знака. Використання цієї інструкції схоже на роботу команди MUL. хоча, звичайно, має деякі особливості, тому що поділ - це не множення)))

Отже, синтаксис команди DIV такий:

ЧИСЛОМ може бути один з наступних:

  • Область пам'яті (MEM)
  • Регістр загального призначення (REG)

Ця команда не працює з сегментними регістрами, а також не працює безпосередньо з числами. Тобто ось так

DIV 200; неправильно

А тепер алгоритм роботи команди DIV:

  • Якщо ЧИСЛО - це БАЙТ, то AL = AX / ЧИСЛО
  • Якщо ЧИСЛО - це СЛОВО, то AX = (DX AX) / ЧИСЛО

Якщо ви вже вивчили інструкцію MUL. то нічого особливо нового для вас тут немає. Ну а якщо не вивчали, то трохи нагадаю.

Зверніть увагу, що інструкція DIV працює або з регістром АХ, або з парою регістрів DX AX. Тобто перед виконанням цієї команди нам треба записати в регістр АХ або пару регістрів DX AX значення, яке потрібно розділити. Зробити це можна, наприклад, за допомогою вже відомої нам команди MOV.

Потім треба в область пам'яті або в регістр загального призначення записати дільник - тобто число, на яке будемо ділити.

Далі ми виконуємо поділ, і отримуємо результат або в регістр АL (якщо ЧИСЛО - це байт), або в регістр AX (якщо ЧИСЛО - це слово).

Залишок від ділення

Як ви розумієте, інструкція DIV виконує цілочисельне ділення. При цьому залишок від ділення, якщо такий є, буде записаний:

  • У регістр АН, якщо ЧИСЛО - це байт
  • У регістр DX, якщо ЧИСЛО - це слово

Ніякі прапори при цьому не змінюються. А якщо і змінюються, то про це нічого не сказано в документації, отже, перевіряти прапори немає необхідності.

Просто якщо є сумніви, що розподіл виконано без залишку, треба перевірити вміст регістрів AL або DX в залежності від того, який розмір має ЧИСЛО.

Приклад розподілу в Асемблері

Отже, наприклад, нам треба 250 розділити на 150. Тоді ми робимо так:

Зверніть увагу, що нам доводиться два рази використовувати команду MOV, так як команда DIV не працює безпосередньо з числами, а тільки з регістрами загального призначення або з пам'яттю.

Після виконання цього коду в регістрі АL буде результат цілочисельного ділення числа 250 на число 150, тобто число 1, а в регістрі АН буде залишок від ділення - число 100 (64 в шістнадцятковій системі).

Тепер спробуємо число 50000000 розділити на 60000.

Для запису подільника в пару регістрів DX і AX використовуються дві команди MOV. У нашому прикладі в регістр DX буде записано число 762 (02FA - в шістнадцятковій системі), а в регістр АХ - число 61568 (F080 - в шістнадцятковій системі). А якщо розглядати їх як одне число (подвійне слово), де в старшому слові 762, а в молодшому - 61568, то це і буде 50000000 (2FAF080 - в шістнадцятковій системі).

В кінці як завжди розповім, чому ця команда асемблера називається DIV. Це скорочення від англійського слова DIV IDE, яке можна перевести як "розділити".

Схожі статті