Say no to branching
No outro dia perguntaram-me porque é que uma função no fim tinha esta sequência de instruções:
sbb eax, eax
sbb eax, 0FFFFFFFFh
Ora, este tipo de cena vem tipicamente depois de comparações.
Se a carry flag for 1, a primeira linha vai resultar em EAX=0xFFFFFFFF. A segunda por sua vez em EAX=0xFFFFFFFF;
Se a carry flag for 0, a primeira linha var resultar em EAX=0xFFFFFFFF. A segunda em EAX=1;
Assim temos valores de retorno alternativos sem recorrer a branching. Mas muito menos legíveis.