- •Тема 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 |