Екілік сандарды азайту
Азайту командаларына келесілер жатады:
DEC операнд — декремент операциясы, операнд мәнін 1 кемітуді орындайды;
CMP қабылдағыш, таратқыш – салыстыру командасы. CMP командасы, SUB командасы сияқты, операндтарды азайтуды орындайды және белгілерді орнатады, бірақ нәтиже ешқайда жазылмайды. CMP командасымен орнатылатын белгілерді арнайы шартты ауысу командаларының көмегімен қадағалауға болады.
SUB қабылдағыш, таратқыш — азайту командасы; орындалу принципі:
қабылдағыш = қабылдағыш - таратқыш
SBB қабылдағыш, таратқыш — несиені еакере отырып азайту командасы (CF белгісі). Оның орындалу принципі:
қабылдағыш = қабылдағыш - таратқыш – CF.
SBB командасы ADC командасына ұқсас, бірақ енді CF белгісі несие индикаторының ролін атқарады, ол 1-ге тең болса, онда сандарды азайту кезінде үлкен разрядтан несие берілгендігін білдіреді.
Таңбасыз сандарды азайтудан кейін CF белгісін тексеру керек. Егер ол 1 тең болса, онда үлкен разрядтан несие берілгендігін және нәтиже қосымша кодта алынғандығын білдіреді.
Таңбалы сандарды азайтқан кезде, таңбалы сандарды қосу кезіндегідей мантиссаның өзгеруіне көңіл аударған жөн, яғни тікелген сан разряды операндтын таңбалық разрядын өзгертуі мүмкін, оны OF асатолу белгісімен тексеруге болады.. Ол белгінің 1 –ге орнатылуы, нәтиже берілген операнд өлшемі таңбалы сандар диапазонынан шығып кеткендігін (яғни үлкен бит өзгергендігін) білдіреді, сол үшін пайдаланушы нәтижені қалыпқа келтіру жағдайларын қарастыруы керек.
Сандарды көбейту
Таңбасыз сандарды көбейту командасы:
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 bytedel dw 29876delt db 45...xor ax, ax;келесі екі команданы mov ax, del бір командасымен ауыстыруға болады.mov ah, del_b ; ah бөлінгіштің үлкен байты mov al, del_b+1 ; al бөлінгіштің кіші байты div delt ; al — бөлінді, ah — қалдық ...таңбалы сандарды бөлу командасы:
Дата добавления: 2015-10-26; просмотров: 1512;