Le maschere di bit sono terribilmente vecchie. Non sono stato in grado di trovare un riferimento al primo, ma erano sicuramente popolari con l'avvento dei processori a 8 bit e probabilmente sono stati utilizzati anche nei processori a 4 bit.
L'idea alla base delle maschere di bit è sfruttare il parallelismo bit a bit. Un computer a 8 bit può eseguire la stessa operazione bit per bit a 8 bit contemporaneamente se sono impacchettati in una singola parola nativa (il che significa che si adatta a un registro).
Il nome deriva dal mascheramento, che è un approccio generale per coprire le aree con cui non si desidera interagire. Ad esempio, considera questo stencil per mascherare le aree di un muro (lo stencil è stato spostato dopo la pittura per mostrare il motivo)
Le maschere vengono utilizzate anche in fotografia, dove vanno con il termine "schivare" anziché "stencil". È possibile utilizzare una maschera per oscurare parte della luce durante la stampa per schiarire un'area.
Il termine è anche usato direttamente nella fotolitografia, che è la tecnica utilizzata per realizzare circuiti integrati. La maschera impedisce alla luce di raggiungere il fotoresist dipinto sul chip, il che crea motivi che in seguito conducono ai motivi di rivestimento sul chip. (L'immagine sotto è una delle maschere per il processore Intel 8080A , se sei curioso)
Allo stesso modo, nel bit masking, stai selezionando le parti della parola su cui vuoi operare, mascherando tutto il resto dei bit. Nell'esempio seguente, utilizzo l'operazione "e" per mascherare l'ingresso in modo tale che solo il 3 °, 4 ° e 8 ° bit vengano visualizzati. Il resto è "mascherato" in modo che siano 0. La maschera che uso è 00110001
. Lo mostro di seguito con #
rappresentare 0 e .
rappresentare 1 perché ciò rende l'aspetto visivo della maschera di bit simile a quello delle maschere fisiche sopra e mostra una riga di "bit selezionati" che mostra i bit dell'output che non sono stati mascherati ( "bit selezionati" non è in realtà un'operazione logica che si verifica ... il processore passa proprio dall'input AND maschera all'output in un solo passaggio, ma penso che chiarisca l'immagine visiva)
Input 10010111
Mask ##..###. (aka 00110001)
-----------------------
(selected) 01 1
Input AND Mask 00010001
Come ho già detto, il bitmasking è terribilmente vecchio perché aumenta notevolmente la produttività del processore. Su un processore a 4 bit, può rendere il processore 4x più veloce. Su un processo a 8 bit, oppure può renderlo 8 volte più veloce (ovviamente solo sulle operazioni bit a bit).
Un uso affascinante per questo sono i motori di scacchi. La scacchiera ha 64 quadrati. I motori moderni hanno numeri interi a 64 bit. Questo è un po 'di fortuna terribilmente conveniente, quindi i motori di scacchi spesso lo sfruttano. Hanno i cosiddetti " bitboard " che contengono le posizioni dei pezzi. Ciò ti consente di eseguire tutti i tipi di ottimizzazioni, come la ricerca di tutte le mosse del pedone in un unico passaggio.