Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
программирование ассемблер(лекция).doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
798.72 Кб
Скачать

Сандарды көбейту

Таңбасыз сандарды көбейту командасы:

MUL операнд

Операнд жады ұяшығында немесе жалпы міндетті регистрдің бірінде орналаса, оның өлшемі 8, 16 немесе 32 бит болады. Командада бір ғана операнд көрсетілген. Екінші операнд көсетілмей берілген. Оның орны жасырын көбейткіш өлшеміне байланысты болады. Өйткені көбейту нәтижесі оның көбейткішнің өлшемінен бірнеші рет көп болғандықтан оны болжау үшін жасалған. Көбейткіштердің өлшемін және екінші операнд пен нәтижені орналастыратын регистрлер:

Байт *

AL

= AX

Сөз *

AX

= DX:AX

Екілік сөз *

EAX

= EDX:EAX

Таңбасыз бүтін сандарды көбейту командасы:

Imul операнд

Бұл команда MUL командасына ұқсас. IMUL командасының ерекшелігі, ол таңбаны қалыптастырады. Егер нәтиже кішкентай болса және бір регистрге орналасса (яғни CF = OF = 0 болса), онда екінші регистрге (үлкен бөлікке) таңба жазылады— бұл регистрдің барлық биттері кіші бөліктің үлкен битінің (таңба разряды) мәнімен толтырылады. Басқа жағдайда (егер CF = OF = 1) нәтиже таңбасы ретінде үлкен бөліктің таңба биті алынады. i486 және одан жоғарғы микропроцессорларында IMUL командасы операндтарға орын берудің кең тараған түрлерін қолданады. Бұл қолдануға ыңғайлы болу үшін жасалған. 

Деление чисел

Таңбасыз сандарды бөлу командасы:

DIV бөлінгіш

Бөлінгіш жады ұяшығында немесе жалпы міндетті регистрдің бірінде орналаса, оның өлшемі 8, 16 немесе 32 бит болады. Бөлгіштің орны көбейту командасындағыдай жасырын, ол да операнд өлшеміне байланысты болады. Бөлу командасының нәтижесі болып бөлінді мен қалдық мәндері табылады. Бөлу орындалған кездегі нәтиже мен операндтардың орналасуы:

Бөлінгіш

Бөлгіш

Бөлінді

Қалдық

AX

Байт (регистр немесе жады ұяшығы)

AL

AH

DX: AX

Сөз (регистр немесе жады ұяшығы)

AX

DX

EDX: EAX

Екілік сөз (регистр немесе жады ұяшығы)

EAX

EDX

Бөлу командасы орындалғаннан кейін белгілер өзгермейді, бірақ 0 нөмірлі «0-ге бөлу» үзуі, кездесуі мүмкін. DIV командасында 0-ге бөлу үзуі келесі жағдайларда болуы мүмкін:

  • Бөлінгіш 0 тең;

  • Бөлінді оған бөлінген разрядтық торға сыймайды.

Мысалы. Сандарды бөлу

del _b label byte

del dw 29876

delt db 45

...

xor ax, ax

;келесі екі команданы mov ax, del бір командасымен ауыстыруға болады.

mov ah, del_b ; ah бөлінгіштің үлкен байты

mov al, del_b+1 ; al бөлінгіштің кіші байты

div delt ; al — бөлінді, ah — қалдық

...

таңбалы сандарды бөлу командасы:

IDIV бөлінгіш

Бұл команда үшін жоғарыда барлық таңбалы сандарға және командаларға байланысты айтылған тәртіптер орындалады. Мұнда тек IDIV командасын қолданғанда кездесетін 0-ге бөлу қай кезде пайда болатындығын қарастырып кетейік:

- Бөлінгіш 0 тең;

- Бөлінді оған бөлінген разрядтық торға сыймайды.