SBB             Subtract with Borrow                 Flags: O D I T S Z A P C
* - - - * * * * *
SBB destination,source

Logic destination ← destination - source - CF

SBB subtracts the source operand from the destination operand,
subtracts 1 from that result if the carry flag is set, and stores
the result in destination.

When an immediate byte value is subtracted from a (double)word
operand, the immediate value is first sign-extended to the size of
the destination operand.


Opcode Format
18 /r SBB r/m8,r8
19 /r SBB r/m16,r16
19 /r SBB r/m32,r32
1A /r SBB r8,r/m8
1B /r SBB r16,r/m16
1B /r SBB r32,r/m32
1C ib SBB AL,imm8
1D iw SBB AX,imm16
1D id SBB EAX,imm32
80 /3 ib SBB r/m8,imm8
81 /3 iw SBB r/m16,imm16
81 /3 id SBB r/m32,imm32
83 /3 ib SBB r/m16,imm8
83 /3 ib SBB r/m32,imm8


Length and timing
Operands Bytes 8088 186 286 386 486 Pentium
reg, reg 2 3 3 2 2 1 1 PU
mem, reg 2+d(0,2) 24+EA 10 7 7 3 3 PU
reg, mem 2+d(0,2) 13+EA 10 7 6 2 2 PU
reg, imm 2+i(1,2) 4 4 3 2 1 1 PU
mem, imm 2+d(0,2) 23+EA 16 7 7 3 3 PU*
+i(1,2)
acc, imm 1+i(1,2) 4 4 3 2 1 1 PU

* = not pairable if there is a displacement and immediate