|
Il sistema binario possiede una sua logica chiamata algebra booleana,
che è simile alla nostra algebra, ma che agisce su solo due cifre invece
che le nostre 10 (0-9).
L'addizione si esegue in modo uguale, per esempio:
1011b +
0110b =
10001b
ovvero 1+1=0 con riporto di 1 non esistendo il 2.
Stesso dicasi per le altre operazioni.
Ma l'algebra booleana possiede altre funzioni più interessanti e non
disponibili con altri sistemi.
Per esempio la funzione AND che dati due numeri esegue il confronto
bit per bit del primo numero col secondo. Per esempio:
1001b AND
1100b =
1000b
Ovvero solo se entrambi i bit sono a 1 il risultato è 1, negli altri
casi è 0.
Supponete di avere ottenuto il risultato di un calcolo e che questo sia
10110110b, ora non mi serve il risultato complessivo, ma solo i primi 4 bit,
bene basta fare AND 00001111b ed avrò estratto solo i primi 4 bit.
Un'altra funzione interessante è l'OR che funziona come AND, ma dà risultato 1
se almeno uno dei due bit è a 1.
Un OR più drastico è lo XOR che richiede che uno ed uno solo dei due bit sia ad
1 per dare 1 altrimenti ritorna 0.
Il registro F denominato FLAG (in inglese bandiera) si comporta come una bandiera
che può essere alzata o
abbassata a seconda delle condizioni, anzi 16 bandiere perché il registro
F è a 16 bit, ed ogni bit rappresenta una situazione.
Prendiamo il sequente pezzo di codice:
MOV CX, 2 - carica 2 nel registro CX
DEC CX - decrementa il registro CX di 1, CX=CX-1
DEC CX - decrementa di nuovo il registro
Cos'è successo dopo il secondo decremento?, che CX è diventato zero, la CPU
giustamente se ne accorge e pone a 1 il bit corrispondente in F che si chiama
bit di zero, quindi se io volessi controllare se un'operazione ha dato zero
come risultato mi basta controllare questo flag, esiste anche il flag di
carry che segnala se in una sottrazione c'è stato prestito, un altro chiamato
flag di overflow che segnala se l'operazione ha ecceduto la capacità del registro,
il flag di segno che segnala se il sedicesimo bit è ad 1, poiché in alcuni casi i
registri vengono considerati a 15 bit e negativi o positivi, e quindi il sedicesimo
bit è zero se positivo e 1 se negativo.
Esiste anche il flag di direzione che indica se i registri SI e DI devono
incrementarsi o decrementarsi in seguito ad alcune istruzioni di lettura
scrittura in memoria.
|