Бітовий зсув ― зміна позицій бітів у машинному слові на одну і ту ж величину.
Більшість комп'ютерів не можуть напряму адресувати біти, які містяться групами по 8, 16, 32 або 64 бітів у машинних словах. Для забезпечення роботи з бітами існує багато машинних інструкцій, що включають різні типи зсувів. Всі зсуви схожі між собою поведінкою середніх бітів, які просто зсуваються вліво або вправо на певну величину. Однак, поведінка крайніх бітів, які виходять зі слова та які з'являються в слові, залежить від типу зсуву.
В електроніці бітові зсуви здійснюються в регістрах зсуву.
Логічний зсув
Логічний зсув — це зсув, за якого біт, який зсувається, зникає не впливаючи на біти, що залишились, а замість нього записується 0.
Приклад виконання логічного зсуву:
- нехай є число 10101010b (в двійковій системі);
- після зсуву вліво на 1 біт отримаємо число 01010100b;
- після зсуву початкового числа вправо на 1 біт отримаємо число 01010101b.
У більшості процесорів біт, що зсувається зберігається у прапорі переносу. Ця функція використовується для роботи з багатобайтовими числами.
Арифметичний зсув
При цьому зсуві слово розглядається не просто як група бітів, а як ціле число в доповняльному коді. Зсув вліво виконується як логічний зсув, а під час зсуву вправо біт, що виходить, зникає, не впливаючи на біти, що залишилися, а на місце біта, що з'явився, встановлюється біт, відповідний знаку.
Приклад виконання арифметичного зсуву:
- нехай є число 11111010b = -6 (у двійковій системі);
- Після зсуву вліво на 1 біт отримаємо число 11110100b = -12;
- Після зсуву початкового числа вправо на 1 біт отримаємо число 11111101b = -3.
Легко помітити, що, за арифметичного зсуву, зсув вліво відповідає множенню на 2, а зсув вправо ― діленню на 2 (в загальному випадку — на основу системи числення) з округленням до -∞. Наприклад:
1011 = -5 1111 = -1 >> a 1 >> a 1 -------- 1101 = -3 1111 = -1
Схемотехнічна реалізація операцій зсуву дуже проста. Саме тому ці операції рекомендують використовувати для операцій множення і ділення цілих чисел на числа, рівні степеням 2 (2, 4, 8, 16, 32, 64 і т. д.), якщо, звичайно, не заважає таке округлення від'ємних чисел.
Циклічний зсув
Під час цього зсуву біт, що виходить, з'являється на місці того біта, який з'явився.
Приклад виконання циклічного зсуву:
- нехай є число 11111010b (у двійковій системі);
- після зсуву вліво на 1 біт отримаємо число 11110101b;
- після зсуву початкового числа вправо на 1 біт отримаємо число 01111101b.
Циклічний зсув через біт переносу
В архітектуру багатьох процесорів входить прапор переносу до наступного розряду (наприклад, cf
на x86). Ця операція виконує циклічний зсув над (n+1)-бітовим числом, що складається з регістра і прапора переносу.
Наприклад, якщо в регістрі число 11111010b, а прапор переносу дорівнює 0:
- після зсуву вліво на 1 біт: у регістрі 11110100b, прапор переносу дорівнює 1;
- після зсуву вправо на 1 біт: у регістрі 01111101b, прапор переносу дорівнює 0.
Операція циклічного зсуву через біт переносу використовується для роботи з багатобайтовими числами. Зокрема, щоб зсунути вправо на 1 біт довге число, потрібно очистити cf
(у разі ділення числа зі знаком потрібно записати в cf
старший біт старшого слова) і циклічно зсунути на одиницю через cf
кожне слово, починаючи з верхнього.
Наприклад, нехай є число 011000111100b, що займає три 4-бітових слова:
Було: HI = 0110, MED = 0011, LO = 1100, cf = 0 Після зсуву HI: HI = 0011, MED = 0011, LO = 1100, cf = 0 Після зсуву MED: HI = 0011, MED = 0001, LO = 1100, cf = 1 Після зсуву LO: HI = 0011, MED = 0001, LO = 1110, cf = 0
Зсув через регістр прапорів більш ніж на 1 біт практично не використовують.
Див. також
- Бітові операції
- Регістр зсуву з лінійним зворотним зв'язком
- (Рахівниця#Використання)
Примітки
- Можна замість очищення прапора для першого оброблюваного слова використати арифметичний/логічний зсув, якщо він присвоює прапору
cf
значення біта, який вийшов.
Посилання
- «Assembler & Win32. Курс молодого бійця.» Урок 11. «Біти, зсув логічний, арифметичний і циклічний.» [ 5 жовтня 2012 у Wayback Machine.]
Це незавершена стаття про інформаційні технології. Ви можете проєкту, виправивши або дописавши її. |
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Bitovij zsuv zmina pozicij bitiv u mashinnomu slovi na odnu i tu zh velichinu Bilshist komp yuteriv ne mozhut napryamu adresuvati biti yaki mistyatsya grupami po 8 16 32 abo 64 bitiv u mashinnih slovah Dlya zabezpechennya roboti z bitami isnuye bagato mashinnih instrukcij sho vklyuchayut rizni tipi zsuviv Vsi zsuvi shozhi mizh soboyu povedinkoyu serednih bitiv yaki prosto zsuvayutsya vlivo abo vpravo na pevnu velichinu Odnak povedinka krajnih bitiv yaki vihodyat zi slova ta yaki z yavlyayutsya v slovi zalezhit vid tipu zsuvu V elektronici bitovi zsuvi zdijsnyuyutsya v registrah zsuvu Logichnij zsuvLogichnij zsuv vlivo Logichnij zsuv vpravo Logichnij zsuv ce zsuv za yakogo bit yakij zsuvayetsya znikaye ne vplivayuchi na biti sho zalishilis a zamist nogo zapisuyetsya 0 Priklad vikonannya logichnogo zsuvu nehaj ye chislo 10101010b v dvijkovij sistemi pislya zsuvu vlivo na 1 bit otrimayemo chislo 01010100b pislya zsuvu pochatkovogo chisla vpravo na 1 bit otrimayemo chislo 01010101b U bilshosti procesoriv bit sho zsuvayetsya zberigayetsya u prapori perenosu Cya funkciya vikoristovuyetsya dlya roboti z bagatobajtovimi chislami Arifmetichnij zsuvArifmetichnij zsuv vlivo Arifmetichnij zsuv vpravo Pri comu zsuvi slovo rozglyadayetsya ne prosto yak grupa bitiv a yak cile chislo v dopovnyalnomu kodi Zsuv vlivo vikonuyetsya yak logichnij zsuv a pid chas zsuvu vpravo bit sho vihodit znikaye ne vplivayuchi na biti sho zalishilisya a na misce bita sho z yavivsya vstanovlyuyetsya bit vidpovidnij znaku Priklad vikonannya arifmetichnogo zsuvu nehaj ye chislo 11111010b 6 u dvijkovij sistemi Pislya zsuvu vlivo na 1 bit otrimayemo chislo 11110100b 12 Pislya zsuvu pochatkovogo chisla vpravo na 1 bit otrimayemo chislo 11111101b 3 Legko pomititi sho za arifmetichnogo zsuvu zsuv vlivo vidpovidaye mnozhennyu na 2 a zsuv vpravo dilennyu na 2 v zagalnomu vipadku na osnovu sistemi chislennya z okruglennyam do Napriklad 1011 5 1111 1 gt gt a 1 gt gt a 1 1101 3 1111 1 Shemotehnichna realizaciya operacij zsuvu duzhe prosta Same tomu ci operaciyi rekomenduyut vikoristovuvati dlya operacij mnozhennya i dilennya cilih chisel na chisla rivni stepenyam 2 2 4 8 16 32 64 i t d yaksho zvichajno ne zavazhaye take okruglennya vid yemnih chisel Ciklichnij zsuvCiklichnij zsuv vlivo Ciklichnij zsuv vpravo Pid chas cogo zsuvu bit sho vihodit z yavlyayetsya na misci togo bita yakij z yavivsya Priklad vikonannya ciklichnogo zsuvu nehaj ye chislo 11111010b u dvijkovij sistemi pislya zsuvu vlivo na 1 bit otrimayemo chislo 11110101b pislya zsuvu pochatkovogo chisla vpravo na 1 bit otrimayemo chislo 01111101b Ciklichnij zsuv cherez bit perenosuCiklichnij zsuv vlivo cherez bit perenosu Ciklichnij zsuv vpravo cherez bit perenosu V arhitekturu bagatoh procesoriv vhodit prapor perenosu do nastupnogo rozryadu napriklad cf na x86 Cya operaciya vikonuye ciklichnij zsuv nad n 1 bitovim chislom sho skladayetsya z registra i prapora perenosu Napriklad yaksho v registri chislo 11111010b a prapor perenosu dorivnyuye 0 pislya zsuvu vlivo na 1 bit u registri 11110100b prapor perenosu dorivnyuye 1 pislya zsuvu vpravo na 1 bit u registri 01111101b prapor perenosu dorivnyuye 0 Operaciya ciklichnogo zsuvu cherez bit perenosu vikoristovuyetsya dlya roboti z bagatobajtovimi chislami Zokrema shob zsunuti vpravo na 1 bit dovge chislo potribno ochistiti cf u razi dilennya chisla zi znakom potribno zapisati v cf starshij bit starshogo slova i ciklichno zsunuti na odinicyu cherez cf kozhne slovo pochinayuchi z verhnogo Napriklad nehaj ye chislo 011000111100b sho zajmaye tri 4 bitovih slova Bulo HI 0110 MED 0011 LO 1100 cf 0 Pislya zsuvu HI HI 0011 MED 0011 LO 1100 cf 0 Pislya zsuvu MED HI 0011 MED 0001 LO 1100 cf 1 Pislya zsuvu LO HI 0011 MED 0001 LO 1110 cf 0 Zsuv cherez registr praporiv bilsh nizh na 1 bit praktichno ne vikoristovuyut Div takozhBitovi operaciyi Registr zsuvu z linijnim zvorotnim zv yazkom Rahivnicya VikoristannyaPrimitkiMozhna zamist ochishennya prapora dlya pershogo obroblyuvanogo slova vikoristati arifmetichnij logichnij zsuv yaksho vin prisvoyuye praporu cf znachennya bita yakij vijshov Posilannya Assembler amp Win32 Kurs molodogo bijcya Urok 11 Biti zsuv logichnij arifmetichnij i ciklichnij 5 zhovtnya 2012 u Wayback Machine Ce nezavershena stattya pro informacijni tehnologiyi Vi mozhete dopomogti proyektu vipravivshi abo dopisavshi yiyi