Команди зрушення

При виконанні команд зрушення прапор CF завжди містить значення останнього висунутого біта. Існують наступні команди cдвига:

SHR ;Логічний (беззнаковий) зрушення вправо

SHL ;Логічний (беззнаковий) зрушення вліво

SAR ;Арифметичне зрушення вправо

SAL ;Арифметичне зрушення вліво

Наступний фрагмент ілюструє виконання команди SHR:

MOV CL,03 ; AX:

MOV AX,10110111B ; 10110111

SHR AX,1 ; 01011011 ;Зрушення вправо на 1

SHR AX,CL ; 00001011 ;Зрушення вправо на 3

Перша команда SHR зрушує вміст регістра AX вправо на 1 біт. Висунутий у результаті один біт попадає в прапор CF, а самий лівий біт регістра AX заповнюється нулем. Друга команда зсуває вміст регістра AX ще на три біти. При цьому прапор CF послідовно приймає значення 1, 1, 0, а в три лівих біти в регістрі AX заносяться нулі. Розглянемо дію команд арифметичного вправо SAR:

MOV CL,03 ; AX:

MOV AX,10110111B ; 10110111

SAR AX,1 ; 11011011 ;Зрушення вправо на 1

SAR AX,CL ; 11111011 ;Зрушення вправо на 3

Команда SAR має важливу відмінність від команди SHR: для заповнення лівого біта використовується знаковий біт. Таким чином, позитивні і негативні величини зберігають свій знак. У приведеному прикладі знаковий біт містить одиницю. При зрушеннях уліво праві біти заповнюються нулями. Таким чином, результат команд зрушення SHL і SAL ідентичний. Зрушення вліво часто використовується для подвоєния чисел, а зрушення вправо - для розподілу на 2. Ці операції здійснюються значно швидше, ніж команди чи множення розподілу. Розподіл навпіл непарних чисел (наприклад, 5 чи 7) утворить менші значення (2 чи 3, відповідно) і встановлює прапор CF у 1. Крім того, якщо необхідно виконати зрушення на 2 біти, то використання двох команд зрушення більш эффективніше, ніж використання однієї команди з завантаженням регістра CL значенням 2. Для перевірки біта, занесеного в прапор CF використовується команда JC (перехід, якщо є перенос).

Команди циклічного зрушення

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

ROR ;Циклічне зрушення вправо

ROL ;Циклічне зрушення вліво

RCR ;Циклічне зрушення вправо з переносом

RCL ;Циклічне зрушення вліво з переносом

Наступна послідовність команд ілюструє операцію циклічного зрушення ROR: MOV CL,03 ; BX:

MOV BX,10110111B ; 10110111

ROR BX,1 ; 11011011 ;Зрушення вправо на 1

ROR BX,CL ; 01111011 ;Зрушення вправо на 3

Перша команда ROR при виконанні циклічного зрушення переносить правий одиничний біт регістра BX у ліву позицію, що звільнилася . Друга команда ROR переносить у такий спосіб три правих біти. У командах RCR і RCL у зрушенні бере участь прапор CF. Висуваємий з регістра біт заноситься в прапор CF, а значення CF при цьому надходить у позицію, що звільнилася. Розглянемо приклад, у якому використовуються команди циклічного і простого зрушення. Припустимо, що 32-бітове значення знахо- диться в регістрах DX:AX так, що ліві 16 біт лежать у регістрі DX, а праві - у AX. Для множення на 2 цього значення можливі cлідуючі дві команди:

SHL AX,1 ;Множення пари регістрів

RCL DX,1 ; DX:AX на 2

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

Наши рекомендации