AngoLinux

80386 Programmer's Reference Manual -- Opcode SBB


SBB -- Integer Subtraction with Borrow

OpcodeInstructionClocks DescriptionExample
1C ibsbbb imm8,al2 Subtract with borrow immediate byte from ALsbbb $0x7f,%al
1D iwsbbw imm16,ax2 Subtract with borrow immediate word from AXsbbw $0x7fff,%ax
1D idsbbl imm32,eax2 Subtract with borrow immediate dword from EAXsbbl $0x7fffffff,%eax
80 /3 ibsbbb imm8,r/m82/7 Subtract with borrow immediate byte from r/m bytesbbb $0x7f,%dl
sbbb $0x7f,(%ebx,1)
sbbb $0x7f,m8(%ebx,1)
sbbb $0x7f,m8(%ebx,%ebp,1)
81 /3 iwsbbw imm16,r/m162/7 Subtract with borrow immediate word from r/m wordsbbw $0x7fff,%cx
sbbw $0x7fff,(%ebx,1)
sbbw $0x7fff,(%ebx,2)
sbbw $0x7fff,(%ebx,%ebp,1)
81 /3 idsbbl imm32,r/m322/7 Subtract with borrow immediate dword from r/m dwordsbbl $0x7fffffff,%ecx
sbbl $0x7fffffff,(%ebx,2)
sbbl $0x7fffffff,(%ebx,4)
sbbl $0x7fffffff,(%ebx,%ebp,1)
83 /3 ibsbbw imm8,r/m162/7 Subtract with borrow sign-extended immediate byte from r/m wordsbbw $0x7f,%cx
sbbw $0x7f,(%ebx,1)
sbbw $0x7f,(%ebx,2)
sbbw $0x7f,(%ebx,%ebp,1)
83 /3 ibsbbl imm8,r/m322/7 Subtract with borrow sign-extended immediate byte from r/m dwordsbbl $0x7f,%ecx
sbbl $0x7f,(%ebx,2)
sbbl $0x7f,(%ebx,4)
sbbl $0x7f,(%ebx,%ebp,1)
18 /rsbbb r8,r/m82/6 Subtract with borrow byte register from r/m bytesbbb %bh,%dl
sbbb %bh,(%ebx,1)
sbbb %bh,m8(%ebx,1)
sbbb %bh,m8(%ebx,%ebp,1)
19 /rsbbw r16,r/m162/6 Subtract with borrow word register from r/m wordsbbw %bx,%cx
sbbw %bx,(%ebx,1)
sbbw %bx,(%ebx,2)
sbbw %bx,(%ebx,%ebp,1)
19 /rsbbl r32,r/m322/6 Subtract with borrow dword register from r/m dwordsbbl %ebx,%ecx
sbbl %ebx,(%ebx,2)
sbbl %ebx,(%ebx,4)
sbbl %ebx,(%ebx,%ebp,1)
1A /rsbbb r/m8,r82/7 Subtract with borrow byte register from r/m bytesbbb %dl,%bh
sbbb (%ebx,1),%bh
sbbb m8(%ebx,1),%bh
sbbb m8(%ebx,%ebp,1),%bh
1B /rsbbw r/m16,r162/7 Subtract with borrow word register from r/m wordsbbw %cx,%bx
sbbw (%ebx,1),%bx
sbbw (%ebx,2),%bx
sbbw (%ebx,%ebp,1),%bx
1B /rsbbl r/m32,r322/7 Subtract with borrow dword register from r/m dwordsbbl %ecx,%ebx
sbbl (%ebx,2),%ebx
sbbl (%ebx,4),%ebx
sbbl (%ebx,%ebp,1),%ebx

Operation




IF SRC is a byte and DEST is a word or dword
THEN DEST := DEST - (SignExtend(SRC) + CF)
ELSE DEST := DEST - (SRC + CF);

Description

SBB adds the second operand (DEST) to the carry flag (CF) and subtracts the result from the first operand (SRC). The result of the subtraction is assigned to the first operand (DEST), and the flags are set accordingly.

When an immediate byte value is subtracted from a word operand, the immediate value is first sign-extended.

Flags Affected

OF, SF, ZF, AF, PF, and CF as described in Appendix C

Protected Mode Exceptions

#GP(0) if the result is in a nonwritable segment; #GP(0) for an illegal memory operand effective address in the CS, DS, ES, FS, or GS segments; #SS(0) for an illegal address in the SS segment; #PF(fault-code) for a page fault

Real Address Mode Exceptions

Interrupt 13 if any part of the operand would lie outside of the effective address space from 0 to 0FFFFH

Virtual 8086 Mode Exceptions

Same exceptions as in Real Address Mode; #PF(fault-code) for a page fault


[Home Page dell'ITIS "Fermi"] [80386 Programmer's Reference Manual Index] [Previous] [Next]