|
SBB -- Integer Subtraction with Borrow
Opcode | Instruction | Clocks |
Description | Example |
1C ib | sbbb imm8,al | 2 |
Subtract with borrow immediate byte from AL | sbbb $0x7f,%al |
1D iw | sbbw imm16,ax | 2 |
Subtract with borrow immediate word from AX | sbbw $0x7fff,%ax |
1D id | sbbl imm32,eax | 2 |
Subtract with borrow immediate dword from EAX | sbbl $0x7fffffff,%eax |
80 /3 ib | sbbb imm8,r/m8 | 2/7 |
Subtract with borrow immediate byte from r/m byte | sbbb $0x7f,%dl
sbbb $0x7f,(%ebx,1)
sbbb $0x7f,m8(%ebx,1)
sbbb $0x7f,m8(%ebx,%ebp,1) |
81 /3 iw | sbbw imm16,r/m16 | 2/7 |
Subtract with borrow immediate word from r/m word | sbbw $0x7fff,%cx
sbbw $0x7fff,(%ebx,1)
sbbw $0x7fff,(%ebx,2)
sbbw $0x7fff,(%ebx,%ebp,1) |
81 /3 id | sbbl imm32,r/m32 | 2/7 |
Subtract with borrow immediate dword from r/m dword | sbbl $0x7fffffff,%ecx
sbbl $0x7fffffff,(%ebx,2)
sbbl $0x7fffffff,(%ebx,4)
sbbl $0x7fffffff,(%ebx,%ebp,1) |
83 /3 ib | sbbw imm8,r/m16 | 2/7 |
Subtract with borrow sign-extended immediate byte from r/m word | sbbw $0x7f,%cx
sbbw $0x7f,(%ebx,1)
sbbw $0x7f,(%ebx,2)
sbbw $0x7f,(%ebx,%ebp,1) |
83 /3 ib | sbbl imm8,r/m32 | 2/7 |
Subtract with borrow sign-extended immediate byte from r/m dword | sbbl $0x7f,%ecx
sbbl $0x7f,(%ebx,2)
sbbl $0x7f,(%ebx,4)
sbbl $0x7f,(%ebx,%ebp,1) |
18 /r | sbbb r8,r/m8 | 2/6 |
Subtract with borrow byte register from r/m byte | sbbb %bh,%dl
sbbb %bh,(%ebx,1)
sbbb %bh,m8(%ebx,1)
sbbb %bh,m8(%ebx,%ebp,1) |
19 /r | sbbw r16,r/m16 | 2/6 |
Subtract with borrow word register from r/m word | sbbw %bx,%cx
sbbw %bx,(%ebx,1)
sbbw %bx,(%ebx,2)
sbbw %bx,(%ebx,%ebp,1) |
19 /r | sbbl r32,r/m32 | 2/6 |
Subtract with borrow dword register from r/m dword | sbbl %ebx,%ecx
sbbl %ebx,(%ebx,2)
sbbl %ebx,(%ebx,4)
sbbl %ebx,(%ebx,%ebp,1) |
1A /r | sbbb r/m8,r8 | 2/7 |
Subtract with borrow byte register from r/m byte | sbbb %dl,%bh
sbbb (%ebx,1),%bh
sbbb m8(%ebx,1),%bh
sbbb m8(%ebx,%ebp,1),%bh |
1B /r | sbbw r/m16,r16 | 2/7 |
Subtract with borrow word register from r/m word | sbbw %cx,%bx
sbbw (%ebx,1),%bx
sbbw (%ebx,2),%bx
sbbw (%ebx,%ebp,1),%bx |
1B /r | sbbl r/m32,r32 | 2/7 |
Subtract with borrow dword register from r/m dword | sbbl %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]
|