
- •Тема 2. Архітектура процесора і мова асемблера: Основи програмування на мові асемблера
- •4.1. Команди лінійного зсуву
- •Р ис. 11.3 - Схема роботи команд лінійного арифметичного зсуву.
- •4.2. Команди циклічного зсуву
- •Р ис.11.4 - Схема роботи команд простого циклічного зсуву
- •4.3. Додаткові команди зсуву
Р ис.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 |