Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Ділення чисел без знака

ЛАБОРАТОРНА РОБОТА №5

ТЕМА: Команди математичних операцій

Мета роботи: Вивчення правил виконання математичних операцій.

Інструменти: персональний комп’ютер, програма-емулятор Emu8086

 

 

Хід роботи

Множення і ділення виконуються по-різному для чисел із знаком і без, тому в системі команд процесора x86 є окремі команди множення і ділення для чисел із знаком і для чисел без знака.

 

Множення чисел без знака

Для множення чисел без знака призначена команда MUL. У цієї команди тільки один операнд - другий множник, який повинен знаходитися в регістрі або в пам'яті. Розташування першого множника і результату задається неявно і залежить від розміру операнда:

Розмір операнда Множник Результат
Байт AL AX
Слово AX DX:AX

 

Відмінність множення від додавання і віднімання в тому, що розрядність результату виходить в 2 рази більше, ніж розрядність співмножників. Також і в десятковій системі - наприклад, множачи двозначне число на двозначне, ми можемо отримати в результаті максимум чотиризначне. Запис «DX: AX» означає, що старше слово результату буде знаходитися в DX, а молодше - в AX.

Приклади:

mul bl;AX = AL * BL

mul ax;DX:AX = AX * AX

 

Якщо старша частина результату дорівнює нулю, то прапори CF і ОF будуть мати нульове значення. В цьому випадку старшу частину результату можна відкинути. Це властивість можна використовувати в програмі, якщо результат повинен бути такого ж розміру, як множники.

 

 

Множення чисел із знаком

Для множення чисел зі знаком призначена команда IMUL. Ця команда має три форми, що розрізняються кількістю операндів:

  1. З одним операндом - форма, аналогічна команді MUL. В якості операнда вказується множник. Розташування іншого множника і результату визначається за таблицею.
  2. З двома операндами - вказуються два множника. Результат записується на місце першого множника. Старша частина результату в цьому випадку ігнорується. До речі, ця форма команди не працює з операндами розміром 1 байт.
  3. З трьома операндами - вказується положення результату, першого і другого множника. Другий множник повинен бути безпосереднім значенням. Результат має такий же розмір, як перший множник, старша частина результату ігнорується. Це форма теж не працює з однобайтними множниками.

 

Приклади:

imul cl;AX = AL * CL

imul si;DX:AX = AX * SI

imul bx,ax;BX = BX * AX

imul cx,-5;CX = CX * (-5)

imul dx,bx,134h;DX = BX * 134h

 

CF = OF = 0, якщо твір поміщається в молодшій половині результату, інакше CF = OF = 1. Для другої та третьої форми команди CF = OF = 1 означає, що сталося переповнення.

 

Ділення чисел без знака

Ділення цілих двійкових чисел – це завжди ділення з залишком! За аналогією з множенням, розмір дільника, приватного та залишку повинен бути в 2 рази менше розміру діленого. Ділення чисел без знака здійснюється за допомогою команди DIV. У цієї команди один операнд – дільник, який повинен знаходитися в регістрі або в пам'яті. Розташування діленого, частки та остачі задається неявно і залежить від розміру операнда:

Розмір операнда (дільник) Ділене Частка Остача
Байт AX AL AH
Слово DX:AX AX DX

При виконанні команди DIV може виникнути переривання:

1. якщо дільник дорівнює нулю;

2. якщо приватне не поміщається у відведену під нього розрядну сітку (наприклад, якщо при розподілі слова на байт приватне більше 255).

Приклади:

div cl;AL = AX / CL, остача в AH

div di;AX = DX:AX / DI, остача в DX

 

Поделиться:





Читайте также:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...