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