Deplasare de biți

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită la 22 martie 2015; verificarea necesită 41 de modificări .

Deplasare biți  - schimbarea pozițiilor biților într-un cuvânt de mașină .

Majoritatea computerelor nu pot adresa direct biții care sunt conținute în grupuri de 8, 16, 32 sau 64 de biți într-un cuvânt de mașină . Există multe instrucțiuni ale mașinii pentru a sprijini manipularea biților , inclusiv diferite tipuri de schimburi. Toate deplasările sunt similare între ele în comportamentul biților din mijloc, care sunt pur și simplu deplasați la stânga sau la dreapta cu o anumită cantitate. Cu toate acestea, comportamentul biților de margine care părăsesc cuvântul și care apar în cuvânt depinde de tipul de schimbare.

În electronică, deplasările de biți sunt efectuate pe registrele de deplasare .

Schimbare logică

O schimbare în care bitul de ieșire dispare fără a afecta biții rămași, iar bitul 0 este scris în locul bitului apărut .

Un exemplu despre cum funcționează operațiunea de schimb:

În majoritatea procesoarelor, bitul de ieșire este stocat în flag-ul de transport . Această funcție este utilizată pe scară largă atunci când lucrați cu numere pe mai mulți octeți .

Deplasare aritmetică

În această schimbare, cuvântul este tratat nu doar ca un grup de biți, ci ca un întreg de complement a doi . Când este deplasat la stânga, se comportă ca o deplasare logică, când este deplasat la dreapta, bitul de ieșire dispare fără a afecta biții rămași, iar bitul corespunzător semnului este setat în locul bitului apărut.

Exemplul #1

Un exemplu de operare de schimbare a unui număr de 8 biți într-un cod direct:

Exemplul #2

Un exemplu de operare de schimbare a unui număr de 8 biți scris într-un cod suplimentar de până la 2:

Concluzie

Este ușor de observat că, cu o deplasare aritmetică, o deplasare la stânga corespunde înmulțirii cu 2, iar o deplasare la dreapta corespunde împărțirii cu 2 (în cazul general, la baza sistemului numeric) rotunjită la −∞. De exemplu:

1011 = -5 1111 = -1 >>a1 >>a1 ---- ---- 1101 = -3 1111 = -1

Implementarea în circuit a operațiunilor de schimb este foarte simplă. De aceea, aceste operații sunt recomandate a fi folosite pentru operațiuni de înmulțire și împărțire a numerelor întregi cu numere egale cu puterea lui 2 (2, 4, 8, 16, 32, 64 etc.) - cu excepția cazului, desigur, o astfel de rotunjire. a numerelor negative nu interferează.

Schimbarea ciclică

Cu această schimbare, bitul de ieșire apare în locul numărului liber care a apărut la celălalt capăt.

Exemplu

  • Să presupunem că avem numărul 11111010b (în binar ).
  • Dacă deplasăm la stânga cu 1 bit, obținem numărul 11110101b.
  • Dacă deplasăm numărul original la dreapta cu 1 bit, obținem numărul 01111101b.

Rotiți prin bitul de transport

Arhitectura multor procesoare include un flag de transport (de exemplu, cfpe x86 ). Această operație efectuează o rotație pe numărul ( n +1) de biți, constând dintr-un registru și un flag de transport.

De exemplu, dacă avem numărul 11111010b în registru, indicatorul de transport la dreapta al deplasării ciclice este 0.

  • După deplasarea la stânga cu 1 bit în registrul 11110101b, indicatorul de transport este 1.
  • Apoi, după deplasarea la dreapta cu 1 bit în registrul 01111101b, indicatorul de transport este 1.

Operația de rotație a bitului de transport este utilizată atunci când se lucrează cu numere pe mai mulți octeți . În special, pentru a deplasa la dreapta un număr lung cu 1, ștergeți [1] cf (în cazul unei diviziuni cu semne, scrieți-l la cfbitul de ordin superior al cuvântului de ordine superioară) și rotiți cu câte unul prin cffiecare cuvânt, începând de sus. De exemplu, să presupunem că avem numărul 011000111100b care se întinde pe trei cuvinte de 4 biți:

A fost: HI=0110, MED=0011, LO=1100, cf=0 După schimbarea HI: HI=0011, MED=0011, LO=1100, cf=0 După schimbarea MED: HI=0011, MED=0001, LO=1100, cf=1 După schimbarea LO: HI=0011, MED=0001, LO=1110, cf=0

Deplasările prin registrul flag cu mai mult de 1 bit nu sunt practic utilizate.

Vezi și

Note

  1. În loc să ștergeți pavilionul pentru primul cuvânt care urmează să fie procesat, o schimbare aritmetică/logică poate fi folosită dacă setează pavilionul la cfvaloarea bitului de ieșire.

Link -uri