>> Technologie Électronique >  >> Téléviseurs >> Télécommandes

Instructions décalage et rotation en langage assembleur : Référence complète

Les instructions de décalage (shift) et rotation (rotate) sont des opérations bitwise fondamentales qui manipulent contenus registres au niveau binaire. Essentielles pour arithmétique efficace, compactage bits, cryptographie, programmation bas niveau systèmes.

Instructions décalage (Shift)

Déplacent bits gauche ou droite, jettent bits qui tombent au bout (sauf dans flags).

Décalages logiques

  • SHL / SAL (Shift Left Logical/Arithmetic) : Bits vers MSB. LSB rempli 0. MSB → Drapeau Retenue (CF). Multiplication non-signée par 2ⁿ.
  • SHR (Shift Right Logical) : Bits vers LSB. MSB rempli 0. LSB → CF. Division non-signée par 2ⁿ.

Décalages arithmétiques

  • SAR (Shift Right Arithmetic) : Bits vers LSB. MSB **reproduit** (extension signe). LSB → CF. Division signée par 2ⁿ (arrondi vers -∞).

Résumé instructions décalage (x86)

InstructionOpérationCFOFCas d'usage
SHL r, cl/immr ← r << nDernier bit décalé sortiSet si changement signe (décalage 1 bit)Rapide ×2ⁿ non-signé
SHR r, cl/immr ← r >> n (remplissage zéro)Dernier bit décalé sortiSet si changement signe (décalage 1 bit)Rapide ÷2ⁿ non-signé
SAR r, cl/immr ← r >> n (remplissage signe)Dernier bit décalé sortiToujours 0Rapide ÷2ⁿ signé

Instructions rotation (Rotate)

Bits s'enroulent — aucun bit perdu. CF capture bit traversant frontière.

Types

  • ROL (Rotate Left) : MSB → LSB et CF
  • ROR (Rotate Right) : LSB → MSB et CF
  • RCL (Rotate Through Carry Left) : CF → LSB, MSB → CF (rotation n+1 bits)
  • RCR (Rotate Through Carry Right) : CF → MSB, LSB → CF (rotation n+1 bits)

Exemples pratiques (Assembleur x86)

Multiplier EAX par 8

shl eax, 3 ; EAX *= 8 (2^3)

Diviser EAX par 4 (non-signé)

shr eax, 2 ; EAX /= 4

Diviser EAX par 4 (signé)

sar eax, 2 ; Préserve signe

Extraire octet poids faible vers AL

movzx eax, al ; Ou : and eax, 0xFF

Insérer valeur bits 8-15

shl eax, 8 ; Déplace bits existants 8-15 vers 16-23 mov al, 0x12 ; Insère nouvel octet poids faible (exemple) ; Mieux : and eax, 0xFFFF00FF; or eax, (0x12 << 8)

Échanger poids fort/faible 16 bits EAX

rol eax, 16 ; Rotation 32 bits

Index tampon circulaire (Modulo puissance 2)

inc edi and edi, BUFFER_SIZE-1 ; Si BUFFER_SIZE puissance de 2 ; Ou rotation pour non-puissance-2 (complexe)

Inversion bits simple (8 bits dans AL)

mov cl, 8 .rev: ror al, 1 rcl bl, 1 loop .rev ; Résultat dans BL

Drapeaux affectés

  • CF : Dernier bit décalé/roté sorti (toutes instructions)
  • OF : Défini seulement pour décalages 1 bit (SHL/SAL: changement signe; SHR/SAR: cleared)
  • SF, ZF, PF : Mis à jour selon résultat (décalages/rotations)
  • AF : Indéfini

Variations architectures

  • ARM : LSL, LSR, ASR, ROR, RRX (barrel shifter dans ALU — gratuit avec la plupart instructions)
  • MIPS : SLL, SRL, SRA, ROT (pseudo-instruction)
  • RISC-V : SLL, SRL, SRA, ROL, ROR (via extension Zbb)
  • 8086/8088 : SHL, SHR, SAR, ROL, ROR, RCL, RCR (CL ou 1 seulement)

Note performance

x86 moderne : Décalages/rotations 1 cycle latence, débit 0,25-0,5. Compilateurs auto-convertissent ×/÷ puissances de 2. Usage manuel requis pour manipulation bits, crypto, compression, graphiques.

Télécommandes