ЦикличСский сдвиг c: c++ — Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ цикличСский сдвиг Π²ΠΏΡ€Π°Π²ΠΎ Π½Π° K разрядов

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

ЦикличСский сдвиг. — it-black.ru

ЦикличСский сдвиг. — it-black.ru

ЦикличСский сдвиг отличаСтся ΠΎΡ‚ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹Π΄Π²ΠΈΠ³Π°Π΅ΠΌΡ‹Π΅ с ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ†Π° Π±ΠΈΡ‚Ρ‹ Π²Π΄Π²ΠΈΠ³Π°ΡŽΡ‚ΡΡ с Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ двиТутся ΠΏΠΎ ΠΊΠΎΠ»ΡŒΡ†Ρƒ. Π’ процСссора x86 сущСствуСт 2 Π²ΠΈΠ΄Π° цикличСского сдвига: простой ΠΈ Ρ‡Π΅Ρ€Π΅Π· Ρ„Π»Π°Π³ пСрСноса (CF).

ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ цикличСский сдвиг

ЦикличСский сдвиг Π²ΠΏΡ€Π°Π²ΠΎ выполняСтся ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ROR, Π° Π²Π»Π΅Π²ΠΎ β€” ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ROL. ΠŸΡ€ΠΈ этом ΡΡ‚Π°Ρ€ΡˆΠΈΠΉ (для ROL) ΠΈΠ»ΠΈ младший (для ROR) Π±ΠΈΡ‚ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π° вдвигаСтся Π² ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ справа (для ROL) ΠΈΠ»ΠΈ слСва (для ROR) ΠΈ становится Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ младшСго (для ROL) ΠΈΠ»ΠΈ ΡΡ‚Π°Ρ€ΡˆΠ΅Π³ΠΎ (для ROR) Π±ΠΈΡ‚Π° ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π°; ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π²Ρ‹Π΄Π²ΠΈΠ³Π°Π΅ΠΌΡ‹ΠΉ Π±ΠΈΡ‚ становится Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ„Π»Π°Π³Π° пСрСноса CF. Π£ΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ дСйствия ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‚ΡΡ количСство Ρ€Π°Π·, Ρ€Π°Π²Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π°. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования ΠΊΠΎΠΌΠ°Π½Π΄:


rol bl,1        ;ЦикличСский сдвиг BL Π½Π° 1 Π±ΠΈΡ‚ Π²Π»Π΅Π²ΠΎ
ror word[si],5  ;ЦикличСский сдвиг слова ΠΏΠΎ адрСсу Π² SI Π½Π° 5 Π±ΠΈΡ‚ Π²ΠΏΡ€Π°Π²ΠΎ
rol ax,cl       ;ЦикличСский свдиг AX Π½Π° CL Π±ΠΈΡ‚ Π²Π»Π΅Π²ΠΎ
ЦикличСский сдвиг Ρ‡Π΅Ρ€Π΅Π· Ρ„Π»Π°Π³ пСрСноса

ЦикличСский сдвиг Ρ‡Π΅Ρ€Π΅Π· Ρ„Π»Π°Π³ пСрСноса отличаСтся ΠΎΡ‚ простого цикличСского сдвига Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ„Π»Π°Π³ CF участвуСт Π² сдвигС Π½Π°Ρ€Π°Π²Π½Π΅ с Π±ΠΈΡ‚Π°ΠΌΠΈ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π°. ΠŸΡ€ΠΈ сдвигС Π½Π° 1 Π±ΠΈΡ‚ Π²Ρ‹Π΄Π²ΠΈΠ³Π°Π΅ΠΌΡ‹ΠΉ Π±ΠΈΡ‚ помСщаСтся Π² CF, Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ CF вдвигаСтся Π² ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ с Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны. ΠŸΡ€ΠΈ сдвигС Π½Π° нСсколько Π±ΠΈΡ‚ эта опСрация повторяСтся ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ. ЦикличСский сдвиг Ρ‡Π΅Ρ€Π΅Π· Ρ„Π»Π°Π³ пСрСноса выполняСтся ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ RCR (Π²ΠΏΡ€Π°Π²ΠΎ) ΠΈ RCL (Π²Π»Π΅Π²ΠΎ). ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования ΠΊΠΎΠΌΠ°Π½Π΄:


rcr dh,3        ;Π¦ΠΈΠΊΠ». сдвиг DH Π½Π° 3 Π±ΠΈΡ‚Π° Π²ΠΏΡ€Π°Π²ΠΎ Ρ‡Π΅Ρ€Π΅Π· Ρ„Π»Π°Π³ CF
rcl byte[bx],cl ;Π¦ΠΈΠΊΠ». сдвиг Π±Π°ΠΉΡ‚Π° ΠΏΠΎ адрСсу Π² BX Π½Π° CL Π±ΠΈΡ‚ Π²Π»Π΅Π²ΠΎ Ρ‡Π΅Ρ€Π΅Π· Ρ„Π»Π°Π³ CF
rcl dx,1        ;Π¦ΠΈΠΊΠ». сдвиг DX Π½Π° 1 Π±ΠΈΡ‚ Π²Π»Π΅Π²ΠΎ Ρ‡Π΅Ρ€Π΅Π· Ρ„Π»Π°Π³ CF