Re: Trick with SBB instruction

From: Terje Mathisen (
Date: 01/10/05

Date: Mon, 10 Jan 2005 22:52:09 +0000 (UTC) wrote:

> I have seen some (uncommented) Intel assembler code that
> frequently uses the following pair of lines:
> sbb eax,eax
> sbb eax,0FFFFFFFFh
> and I was wondering what this is intended to achieve.
> Some Googling on 'sbb' indicates that the first is a
> well-known trick for setting eax to 0 if the carry flag
> is not set and to 0FFFFFFFFh otherwise.

Right, SBB is used to replicating the carry flag across the entire
register. As a side-effect, it will also maintain the incoming carry flag.

This means that the second SBB will either subtract -1 from zero, i.e.
adding 1 to generate 1, or subtract (-1 + 1) = 0 from -1.

I.e. the idiom seems to turn a carry flag into either +1 or -1, which
would be perfect for a signum function.


- <>
"almost all programming can be viewed as an exercise in caching"