манди простого циклічного зсуву;
команди циклічного зсуву через прапор перенесення CF.
До команд простого циклічного зсуву відносяться:
ROL (Rotate Left) - циклічний зсув вліво.
ROR (Rotate Right) - циклічний зсув вправо.
Синтаксис: ROL dst, countdst, count
Вміст операнда dst зсувається вліво/вправо на кількість біт, визначається операндом count. Зрушувані вліво/вправо біти записуються в той же операнд справа/зліва. Схема роботи команд простого циклічного зсуву показана на малюнку 6.3. br/>В
Фрагменти використання логічних зрушень
Провести обмін старшої та молодшої половинок операнда розміром в байт і слово.
data_8 db 0Fh_16 dw 1234hal, 26hal, 4val_8, 4ax, 0203hax, 8 val_16, 8
До команд циклічного зсуву через прапор перенесення CF належать такі:
RCL (Rotate through Carry Left) - циклічний зсув вліво через перенесення;
RCR (Rotate through Carry Right) - циклічний зсув вправо через перенос.
Синтаксис: RCL dst, count
RCR dst, count
Вміст операнда dst зсувається вліво/вправо на кількість біт, визначається операндом count. Зрушувані біти по черзі стають значенням прапора перенесення CF. Схема роботи команд циклічного зсуву через прапор перенесення CF показана на малюнку 6.4. br/>В
Використання логічних і арифметичних команд зсуву.
1. Команди логічного зсуву. Використовуються для виконання швидкого множення і ділення цілих чисел на ступені двійки, на 2 k .
Зрушення двійкового числа на k розрядів вліво - це приписування праворуч k двійкових нулів, тобто множення на 2 k . Наприклад, при зсуві числа 5 на 3 розряду вліво отримуємо:
= 101b -> 101000b = 40 = 5 * 2 3
Це ж вірно і для негативних чисел, представлених у додатковому коді. Наприклад, при зсуві числа -4 на 1 розряд вліво отримуємо:
доп (-4) = 11111100b -> 11111000b = 100h-8 = доп (-8)
У загальному випадку множення на 2 k реалізується так:
MOV CL, kdst, CL
При цьому треба враховувати, що все це вірно, тільки якщо результат зсуву уміщається в клітинку. Наприклад, шляхом зрушення можна реалізувати множення на 2 всіх беззнакових чисел, менших 128, і всіх знакових чисел від -64 до +63. p align="justify"> Зрушення на k розрядів вправо - це відкидання останніх k розрядів, що відповідає отриманню неповного приватного (операції div) від ділення на 2 k . Наприклад, при зсуві числа 18 на 3 розряду вправо отримуємо:
= 10010b-> 10b = 2 = 18 div 2 3
Однак так можна реалізувати операцію ділення без остачі тільки для беззнакових чисел, для негативних чисел це не проходить. Тому маємо:
CL, kdst, CL
. Команда SAR може бути використана для швидкого отримання неповного приватного при діленні знакових чисел на ступені 2. Однак ця операція відрізняється від тієї, що реалізується командою IDIV: команда IDIV округлює приватне в бік 0, а SAR округлює в бік мінус нескінченності. Наприклад, при діленні -1 на 2 (тобто при приватному -0.5) команда IDIV видасть відповідь 0, а команда SAR - відповідь -1:
MOV AL, -1; AL = 11111111bAL, 1; AL = 11111111b (-1)
. Команди циклічного зсуву зазвичай використовуються для перестановки частин вмісту комірки або регістра. Наприклад, поміняти місцями праву і ліву половини регістра AL можна циклічним зрушенням цього байта на 4 розряди вліво (або вправо):
MOV AL, 17h; AL = 00010111bCL, 4AL, CL; AL = 01110001b = 71h
. Команди циклічного зсуву через перенос RCL і RCR зазви...