Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lekz._11.doc
Скачиваний:
3
Добавлен:
05.05.2019
Размер:
172.03 Кб
Скачать

Р ис.11.4 - Схема роботи команд простого циклічного зсуву

r cr операнд, (Rotate through Carry Right) - циклічний зсув вправо через перенесення. Вміст операнда зсувається вправо на кількість біт, яка визначається операндом лічильник_зсувів. Біти, що зсуваються, по черзі стають значенням прапора переносу cf.

Рис. 11.5 - Команди циклічного зсуву через прапор переносу cf

З рис. 11.5 видно, що при зсуві через прапор переносу з'являється проміжний елемент, за допомогою якого, зокрема, можна робити підміну циклічно зсуваємих бітів, зокрема, розузгодженість бітових послідовностей. Під розузгодженістю бітової послідовності тут і далі мається на увазі дія, що дозволяє деяким чином локалізувати і витягнути потрібні ділянки цієї послідовності та записати їх в інше місце.

4.3. Додаткові команди зсуву

Система команд останніх моделей мікропроцесорів Intel, починаючи з i80386, містить додаткові команди зсуву, котрі розширюють можливості, розглянуті нами раніше. Це команди зсувів подвійної точності:

s hld операнд_1,операнд_2,лічильник_зсувів - зсув вліво подвійної точності. Команда shld робить заміну шляхом зсуву бітів операнда операнд_1 вліво, заповнюючи його біти праворуч значеннями бітів, що висуваються з операнд_2, згідно зі схемою на рис. 11.6. Кількість зсуваних бітів визначається значенням лічильник_зсувів, що може лежати в діапазоні 0 ... 31. Це значення може задаватися безпосереднім операндом або міститися у регістрі cl. Значення операнд_2 не змінюється.

Рис. 11.6 - Схема роботи команди shld

shrd операнд_1,операнд_2,лічильник_зсувів - зсув вправо подвійної точності. Команда робить заміну шляхом зсуву бітів операнда операнд_1 вправо, заповнюючи його біти ліворуч значеннями бітів, що висуваються з операнд_2, згідно зі схемою на рис. 11.7. Кількість зсуваних бітів визначається значенням лічильник_зсувів, що може лежати в діапазоні 0 ... 31. Це значення може задаватися безпосереднім операндом або міститися у регістрі cl. Значення операнд_2 не змінюється.

Рис. 11.7 - Схема работи команди shrd

;...

.data

pole_l dd 0b21187f5h1

pole_h dd 45ff6711h

.code

;...

.386

mov cl,16 ; завантаження лічильника зсуву в cl

mov eax,pole_h

shld pole_l,eax,cl

shl pole_h,cl ;pole_l = 87f50000h, pole_h = 6711b211h

Як ми відзначили, команди shld і shrd здійснюють зсуви до 32 розрядів, але за рахунок особливостей завдання операндів і алгоритму роботи ці команди можна використовувати для роботи з полями довжиною до 64 біт. Наприклад, розглянемо, як можна здійснити зсув вліво на 16 біт поля з 64 бітами.

10

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]