OPERATII PE BITI

Operatii de deplasare:

shl - shift left (deplaseaza în stânga)
shr - shift right (deplaseaza în dreapta)
sal - shift arithmetic left (deplasare artimetica în stânga)
sar - shift arithmetic right (deplasare aritmetica în dreapta)

Sintaxa shl:

shl destinatie, numar
- destinatie poate fi registru pe 1 sau 2 octeti sau o locatie de memorie de 1 sau 2 octeti
- numar poate fi 1 sau registrul cl, valoarea din cl nu trebuie sa depaseasca 31

Efect:
Bitii stocati în destinatie se deplaseaza numar pozitii spre stânga. Bitul (sau bitii) cel mai din dreapta se completeaza cu 0. Ultimul bit care iese în stânga se pastreaza în CF.

Exemplu:
mov al, 00110011
mov cl, 2
shl al, cl ; -> al = 11001100, CF = 0

Sintaxa shr:

shr destinatie, numar
- destinatie poate fi registru pe 1 sau 2 octeti sau o locatie de memorie de 1 sau 2 octeti
- numar poate fi 1 sau registrul cl, valoarea din cl nu trebuie sa depaseasca 31

Efect:
Bitii stocati în destinatie se deplaseaza numar pozitii spre dreapta. Bitul (sau bitii) cel mai din stânga se completeaza cu 0. Ultimul bit care iese în dreapta se pastreaza în CF.

Exemplu:
mov al, 01011110
mov cl, 2
shr al, cl ; -> al = 00010111, CF = 1

Sintaxa sar:

sar destinatie, numar
- destinatie poate fi registru pe 1 sau 2 octeti sau o locatie de memorie de 1 sau 2 octeti
- numar poate fi 1 sau registrul cl, valoarea din cl nu trebuie sa depaseasca 31

Efect:
Bitii stocati în destinatie se deplaseaza numar pozitii spre dreapta. Bitul (sau bitii) cel mai din stânga se completeaza cu bitul de semn (bitul cel mai din stânga înainte de rotire). Ultimul bit care iese în dreapta se pastreaza în CF.

Exemplu:
mov al, 11011110
mov cl, 2
sar al, cl ; -> al = 11110111, CF = 1

Sintaxa sal: identica cu sintaxa shl


Operatii de rotire:

rol - rotate left
ror - rotate right
rcl - rotate through carry left
rcr - rotate through carry right

Sintaxa rol:

rol destinatie, numar
- destinatie poate fi registru pe 1 sau 2 octeti sau o locatie de memorie de 1 sau 2 octeti
- numar poate fi 1 sau registrul cl, valoarea din cl nu trebuie sa depaseasca 31

Efect:
Bitii stocati în destinatie se rotesc numar pozitii spre stânga. Odata un bit iesit în stânga el se adauga automat în partea dreapta a destinatiei. Ultimul bit rotit se pastreaza în CF.

Exemplu:
mov al, 00110011
mov cl, 2
rol al, cl ; -> al = 11001100, CF = 0

Sintaxa ror:

ror destinatie, numar
- destinatie poate fi registru pe 1 sau 2 octeti sau o locatie de memorie de 1 sau 2 octeti
- numar poate fi 1 sau registrul cl, valoarea din cl nu trebuie sa depaseasca 31

Efect:
Bitii stocati în destinatie se rotesc numar pozitii spre dreapta. Odata un bit iesit în dreapta el se adauga automat în partea stânga a destinatiei. Ultimul bit rotit se pastreaza în CF.

Exemplu:
mov al, 00111110
mov cl, 2
ror al, cl ; -> al = 10001111, CF = 1

Sintaxa rcl:

rcl destinatie, numar
- destinatie poate fi registru pe 1 sau 2 octeti sau o locatie de memorie de 1 sau 2 octeti
- numar poate fi 1 sau registrul cl, valoarea din cl nu trebuie sa depaseasca 31

Efect:
Bitii stocati în destinatie se rotesc numar pozitii spre stânga. Odata un bit iesit în stânga el se pastreaza în CF. Valoarea anteriora din CF se adauga automat în partea dreapta a destinatiei.

Exemplu:
stc; CF = 1 (set carry)
mov al, 00110011
mov cl, 2
rcl al, cl ; -> al = 11001110, CF = 0

Sintaxa rcr:

rcr destinatie, numar
- destinatie poate fi registru pe 1 sau 2 octeti sau o locatie de memorie de 1 sau 2 octeti
- numar poate fi 1 sau registrul cl, valoarea din cl nu trebuie sa depaseasca 31

Efect:
Bitii stocati în destinatie se rotesc numar pozitii spre dreapta. Odata un bit iesit în dreapta el se pastreaza în CF. Valoarea anteriora din CF se adauga automat în partea stânga a destinatiei.

Exemplu:
stc; CF = 1 (set carry)
mov al, 00110011
mov cl, 2
rcr al, cl ; -> al = 11001100, CF = 1


Operatii logice:

and - SI logic
or - SAU logic
xor - SAU EXCLUSIV logic
not - negare logica

Sintaxa and, or, xor, not:

and destinatie, sursa
or destinatie, sursa
xor destinatie, sursa
not destinatie
- destinatie poate fi registru sau memorie pe unul sau doi octeti
- sursa poate fi registru, memorie sau constanta pe unul sau doi octeti
- trebuie sa aiba ambele aceeasi dimensiune nu pot fi ambele memorie

Efect:
destinatie = destinatie and sursa
destinatie = destinatie or sursa
destinatie = destinatie xor sursa
destinatie = not destinatie


Observatie: operatiile de deplasare si de rotire pe biti afecteaza si flagul OF. Pentru mai multe informatii se poate consulta documentatie Norton Guide.