Esiste un'istruzione Bit Test nel set di istruzioni x86 (dal 80386):
BT copies a bit from a given register to the carry flag.
A quanto ho capito, puoi quindi eseguire un'istruzione JC
(jump se carry) per prendere una decisione basata sul flag di carry. Questo è un totale di due istruzioni elementali e utilizza un solo registro.
Tuttavia, dubito che sia più efficiente dell'utilizzo di AND
con 1 e salta se è impostato il flag di zero. Entrambe le alternative sono due istruzioni CPU elementali. È possibile che la costante per specificare il bit nell'istruzione BT
utilizzi meno bit dell'operando costante dell'istruzione AND
, ma non mi preoccuperò di cercarlo. :)
Questo probabilmente significa che il metodo OR
è meno efficiente perché dovresti fare il OR
, quindi confrontare il numero originale e saltare se uguale o non uguale, che perlomeno sta legando 2 registri invece di 1.
Un'alternativa leggermente migliore di AND
potrebbe essere l'istruzione TEST perché esegue un AND
ma butta via il risultato dell'operazione e mantiene solo i flag impostati. Dato che in realtà non vuoi mantenere il risultato, allora TEST eax, 1
seguito da jump se zero ( JZ
) potrebbe essere la soluzione migliore (dato che è possibile che tu voglia fare qualcos'altro con il valore originale e questo lo lasci caricato nel registro).