* better
[mascara-docs.git] / hw / i386.reference / SBB.htm
blob190ba9665e493f8b5ac671bdc08a26d0169e18ce
1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
2 <HTML>
3 <HEAD>
4 <TITLE>80386 Programmer's Reference Manual -- Opcode SBB</TITLE>
5 </HEAD>
6 <BODY>
7 <B>up:</B> <A HREF="c17.htm">
8 Chapter 17 -- 80386 Instruction Set</A><BR>
9 <B>prev:</B><A HREF="SAL.htm"> SAL/SAR/SHL/SHR Shift Instructions</A><BR>
10 <B>next:</B><A HREF="SCAS.htm"> SCAS/SCASB/SCASW/SCASD Compare String Data</A>
11 <P>
12 <HR>
13 <P>
14 <H1>SBB -- Integer Subtraction with Borrow</H1>
17 <PRE>
18 Opcode Instruction Clocks Description
20 1C ib SBB AL,imm8 2 Subtract with borrow immediate byte
21 from AL
22 1D iw SBB AX,imm16 2 Subtract with borrow immediate word
23 from AX
24 1D id SBB EAX,imm32 2 Subtract with borrow immediate
25 dword from EAX
26 80 /3 ib SBB r/m8,imm8 2/7 Subtract with borrow immediate byte
27 from r/m byte
28 81 /3 iw SBB r/m16,imm16 2/7 Subtract with borrow immediate word
29 from r/m word
30 81 /3 id SBB r/m32,imm32 2/7 Subtract with borrow immediate
31 dword from r/m dword
32 83 /3 ib SBB r/m16,imm8 2/7 Subtract with borrow sign-extended
33 immediate byte from r/m word
34 83 /3 ib SBB r/m32,imm8 2/7 Subtract with borrow sign-extended
35 immediate byte from r/m dword
36 18 /r SBB r/m8,r8 2/6 Subtract with borrow byte register
37 from r/m byte
38 19 /r SBB r/m16,r16 2/6 Subtract with borrow word register
39 from r/m word
40 19 /r SBB r/m32,r32 2/6 Subtract with borrow dword register
41 from r/m dword
42 1A /r SBB r8,r/m8 2/7 Subtract with borrow byte register
43 from r/m byte
44 1B /r SBB r16,r/m16 2/7 Subtract with borrow word register
45 from r/m word
46 1B /r SBB r32,r/m32 2/7 Subtract with borrow dword register
47 from r/m dword
48 </PRE>
50 <H2>Operation</H2>
52 <PRE>
53 IF SRC is a byte and DEST is a word or dword
54 THEN DEST := DEST - (SignExtend(SRC) + CF)
55 ELSE DEST := DEST - (SRC + CF);
56 </PRE>
58 <H2>Description</H2>
60 SBB adds the second operand (DEST) to the carry flag (CF) and
61 subtracts the result from the first operand (SRC). The result of the
62 subtraction is assigned to the first operand (DEST), and the flags are
63 set accordingly.
64 <P>
65 When an immediate byte value is subtracted from a word operand, the
66 immediate value is first sign-extended.
68 <H2>Flags Affected</H2>
70 OF, SF, ZF, AF, PF, and CF as described in <A HREF="appc.htm">Appendix C</A>
72 <H2>Protected Mode Exceptions</H2>
74 #GP(0) if the result is in a nonwritable segment; #GP(0) for an illegal
75 memory operand effective address in the CS, DS, ES, FS, or GS
76 segments; #SS(0) for an illegal address in the SS segment; #PF(fault-code)
77 for a page fault
79 <H2>Real Address Mode Exceptions</H2>
81 Interrupt 13 if any part of the operand would lie outside of the effective
82 address space from 0 to 0FFFFH
84 <H2>Virtual 8086 Mode Exceptions</H2>
86 Same exceptions as in Real Address Mode; #PF(fault-code) for a page
87 fault
90 <P>
91 <HR>
92 <P>
93 <B>up:</B> <A HREF="c17.htm">
94 Chapter 17 -- 80386 Instruction Set</A><BR>
95 <B>prev:</B><A HREF="SAL.htm"> SAL/SAR/SHL/SHR Shift Instructions</A><BR>
96 <B>next:</B><A HREF="SCAS.htm"> SCAS/SCASB/SCASW/SCASD Compare String Data</A>
97 </BODY>