Команди зрушення
При виконанні команд зрушення прапор 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, а при вивченні арифметичних команд необхідно розглянути деякі тонкості їх виконання.