Le maschere di bit sono terribilmente vecchie. Non sono stato in grado di trovare un riferimento al primo, ma erano certamente popolari con l'avvento dei processori a 8 bit e probabilmente erano anche usati nei processori a 4 bit.
L'idea alla base delle maschere di bit è quella di sfruttare il parallelismo bit a bit. Un computer a 8 bit può eseguire la stessa operazione bit a bit a 8 bit in una volta se sono impacchettati in una singola parola nativa (il che significa che si inserisce in un registro).
Il nome deriva dal mascheramento, che è un approccio generale per coprire aree con le quali non vuoi interagire. Ad esempio, considera questo stencil per mascherare le aree di un muro (lo stencil è stato spostato dopo la verniciatura per mostrare il motivo)
Lemascherevengonoancheutilizzateinfotografia,dovevengonoutilizzateconiltermine"schivare" piuttosto che con "stencil". È possibile utilizzare una maschera per oscurare parte della luce durante la stampa per schiarire un'area.
Iltermineèancheusatodirettamentenellafotolitografia,cheèlatecnicausataperrealizzarecircuitiintegrati.Lamascheraimpedisceallalucediraggiungereilfotoresistdipintosulchip,ilchecreapatterncheinseguitoportanoaimodellisfaccettatisulchip.(L'immaginequisottoèunadellemaschereperil processore Intel 8080A , se tu " curioso)
Allostessomodo,nelmascheramentodeibit,siselezionanolepartidellaparolasucuisidesideraoperare,mascherandotuttiglialtribit.Nell'esempioseguente,utilizzol'operazione"e" per mascherare l'input in modo tale da mostrare solo il 3 °, il 4 ° e l'8 ° bit. Il resto è "mascherato" in modo che siano 0. La maschera che uso è 00110001
. Lo mostro sotto con #
che rappresenta 0 e .
che rappresenta 1 perché questo rende l'aspetto visivo della maschera di bit simile a quello delle maschere fisiche di cui sopra, e mostro una riga "bit selezionati" che mostra i bit dall'output che non sono stati mascherati ("i bit selezionati" non sono in realtà un'operazione logica che accade ... il processore passa davvero direttamente dall'ingresso e dalla 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 obsoleto perché aumenta notevolmente la produttività del processore. Su un processore a 4 bit, può rendere il processore 4x più veloce. In un processo a 8 bit, o 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 cosiddetti " bitboard " che contengono le posizioni dei pezzi. Questo ti permette di fare ogni sorta di ottimizzazioni, come cercare tutti i movimenti pedone in un unico passaggio.