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
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
; 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
; 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.