Sunteți pe pagina 1din 5

Sisteme cu microprocesoare

Testarea, setarea si resetarea unui bit dintr-un numr


Lucrarea 4

P.Lucrare.04.A


Testare, setarea, resetarea unui bit al unui numar
Coninut
1. Introducere ......................................................................................................................2
1.1. Scop .........................................................................................................................2
2. Testarea, setarea si resetarea unui bit dintr-un numr ...............................................2
2.1. Testarea unui bit dintr-un numr ..............................................................................2
2.2. Setarea unor bii dintr-un numr ...............................................................................4
2.3. Resetarea unor bii dintr-un numr ...........................................................................4
3. Aplicaii ............................................................................................................................5

Lista de tabele
Tabel 1 Testarea unui bit:.........................................................................................................2
Tabel 2 Setarea unui bit: ..........................................................................................................4
Tabel 3 Resetarea unui bit: ......................................................................................................4

1. Introducere
1.1. Scop
Aceast lucrare prezint:
Modalitatea prin care pot fi testati si poziionai pe valoarea 1 i 0 logic biii coninui
ntr-un numr

2. Testarea, setarea si resetarea unui bit dintr-un numr
2.1. Testarea unui bit dintr-un numr

Se poate folosi la testarea unor bii din registrii de stare. Se construieste o masc ce
are ca scop izolarea bitului care se vrea a fi testat dintr-un numr i apoi se aplic operaia
logic AND ntre numr i masc, astfel :

Tabel 1 Testarea unui bit:
Nr:
y .y x y .y
Masc:
0 ....0 1 0 .0

AND
Rezultat
0 ....0 x 0 .0
x = bitul de testat, y = 0 sau 1

Rezultatul este 0 atunci cnd bitul testat este zero (x = 0) i este diferit de zero atunci cnd
bitul testat este 1 (x = 1).

L.4 - 2/5
Testare, setarea, resetarea unui bit al unui numar
Uzual, pentru testare se folosesc instructiunile AND si TEST, ambele efectuand operatia
AND logic pe biti. Reamintim ca prin instructiunea TEST se modifica indicatorii de conditie,
iar rezultatul nu se pastreaza nicaieri.
Daca se doreste executarea unui salt conditionat, in urma operatiei AND, se poate folosi
instructiunea de salt conditionat JZ (jump zero), in care se testeaza indicatorul de conditie
ZF.

JZ eticheta1 //se sare la eticheta1 daca rezultatul este zero, indicatorul
//zero flag fiind setat pe 1, ZF = 1)

Tabela de adevar pentru operatia SI logic este urmtoarea:
1 0 1
0 0 0
1 0 AND

Exemple:
1. Testarea bitului 3 al unui cuvant:
0 0 0 0 ... 0 0 rezultat
0 0 0 1 0 ... 0 0 masca
AND ... nr
0 1 2 3 ..... 14 15
x
y y y x y y
b b b b b b


2. Testarea bitului 1 al unui octet:

b7 b6 b5 b4 b3 b2 b1 b0
nr 0 0 0 0 1 0 1 1
masca 0 0 0 0 0 0 1 0
AND
rezultat 0 0 0 0 0 0 1 0

Rezultatul este 0, deci bitul 1 testat (cel de pe pozitia 1) avea valoarea 1.

3. // Testarea bitului 1 al unei variabile a de tip word
#include

void main()
{
int a;
clrscr();
printf(a=);

asm{
mov ax,a
and ax,0000000000000010b //testarea bitului 1 al numarului a; masca este nr. binar
jz et1 /* daca bitul este 0 adica s-a obtinut rezultat 0 in registrul
acumulator AX (indicatorul zero flag s-a setat ZF=1) sare la
et1, altfel executa in continuare*/
}
et1: asm{ ..}



L.4 - 3/5
Testare, setarea, resetarea unui bit al unui numar
2.2. Setarea unor bii dintr-un numr

Se forteaza unul sau mai muli bii pe valoarea 1 (setare). Se construieste o masca
care va avea 1 pe poziia bitului dorit i 0 n rest, i se va aplica operaia logic OR ntre
numr i masc.
Tabel 2 Setarea unui bit:
Nr: y .y x y .y
Masc: 0 ....0 1 0 .0

OR
Rezultat y ....y 1 y .y
x = bitul de setat, y = 0 sau 1
Tabela de adevr n cazul operaiei SAU logic este urmtoare:
1 1 1
1 0 0
1 0 OR

Exemplu :
4. Setarea bitului 2 al unui octet:


b7 b6 b5 b4 b3 b2 b1 b0
nr. 0 1 0 0 1 0 0 1
masca 0 0 0 0 0 1 0 0
OR
rezultat 0 1 0 0 1 1 0 1

; nr. a = 0100 1001b
;
MOV AL, a ; AL = 0100 1001b
OR AL, 00000100b ; AL = 0100 1101b
;--------------------------------------------------------------------------------------------


2.3. Resetarea unor bii dintr-un numr

Se forteaz unul sau mai muli bii pe valoarea 0 (resetare). Se construiete o masc ce va
avea 0 pe poziia bitul ce se dorete a fi resetat i 1 n rest. Intre numr i masc se aplic
operaia logic AND.

Tabel 3 Resetarea unui bit:
Nr: y .y x y .y
Masc: 1 ....1 0 1 .1

AND
Rezultat y ....y 0 y.y
x = bitul de resetat, y = 0 sau 1

L.4 - 4/5
Testare, setarea, resetarea unui bit al unui numar

Exemplu :
5. Resetarea bitului 1 al unui octet:


b7 b6 b5 b4 b3 b2 b1 b0
nr. 0 1 0 0 1 0 1 1
masca 1 1 1 1 1 1 0 1
AND
rezultat 0 1 0 0 1 0 0 1

; nr. a = 0100 1011b
;
MOV AL, a ; AL = 0100 1011b
AND AL, 11111101b ; AL = 0100 1001b
;-----------------------------------------------------------

3. Aplicaii

1. S se indice masca utilizat pentru:
Testarea bitului 5
Setarea bitilor 4, 5, 9
Resetarea bitilor 1, 8, 9
ai unui cuvnt. S se scrie secvena de instruciuni pentru fiecare caz.

2. Fie trei numere ntregi a,b,c :

a) funcie de bitul 1 al numarului a :
1) dac bitul este 0 s se tipareasc suma b+c ;
2) dac bitul este 1 s se tipareasc diferena b-c .
Dac rezultatul este mai mic dect -32768 se va limita la valoarea -32768, iar dac rezultatul
este mai mare decat +32767 se va limita la valoarea +32767.

b) funcie de bitul 3 al numarului a:
1) dac bitul este 1 s se poziioneze bitul 2 al numr b pe valoarea 1 i s se
tipareasc b pe ecran ;
2) dac bitul este 0 s se poziioneze bitul 0 al numr c pe valoarea 0 i s se
tipareasc c pe ecran.


3. S se testeze dac biii b0, b1, b2 ai unui numar ntreg au valorile 1, 0, respectiv 1.
Dac da, atunci s se poziioneze bitul 4 al numrului pe 1, altfel s se poziioneze bitul 3 la
numrului pe valoarea 0.


L.4 - 5/5