* remove "\r" nonsense
[mascara-docs.git] / i386 / i386.reference / SUB.htm
blob6542cdbaea2586a347f9b2e0a316277c30839f4a
1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
2 <HTML>
3 <HEAD>
4 <TITLE>80386 Programmer's Reference Manual -- Opcode SUB</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="STR.htm"> STR Store Task Register</A><BR>
10 <B>next:</B><A HREF="TEST.htm"> TEST Logical Compare</A>
11 <P>
12 <HR>
13 <P>
14 <H1>SUB -- Integer Subtraction</H1>
16 <PRE>
17 Opcode Instruction Clocks Description
19 2C ib SUB AL,imm8 2 Subtract immediate byte from AL
20 2D iw SUB AX,imm16 2 Subtract immediate word from AX
21 2D id SUB EAX,imm32 2 Subtract immediate dword from EAX
22 80 /5 ib SUB r/m8,imm8 2/7 Subtract immediate byte from r/m byte
23 81 /5 iw SUB r/m16,imm16 2/7 Subtract immediate word from r/m word
24 81 /5 id SUB r/m32,imm32 2/7 Subtract immediate dword from r/m
25 dword
26 83 /5 ib SUB r/m16,imm8 2/7 Subtract sign-extended immediate byte
27 from r/m word
28 83 /5 ib SUB r/m32,imm8 2/7 Subtract sign-extended immediate byte
29 from r/m dword
30 28 /r SUB r/m8,r8 2/6 Subtract byte register from r/m byte
31 29 /r SUB r/m16,r16 2/6 Subtract word register from r/m word
32 29 /r SUB r/m32,r32 2/6 Subtract dword register from r/m
33 dword
34 2A /r SUB r8,r/m8 2/7 Subtract byte register from r/m byte
35 2B /r SUB r16,r/m16 2/7 Subtract word register from r/m word
36 2B /r SUB r32,r/m32 2/7 Subtract dword register from r/m
37 dword
38 </PRE>
41 <H2>Operation</H2>
43 <PRE>
44 IF SRC is a byte and DEST is a word or dword
45 THEN DEST := DEST - SignExtend(SRC);
46 ELSE DEST := DEST - SRC;
47 FI;
48 </PRE>
50 <H2>Description</H2>
52 SUB subtracts the second operand (SRC) from the first operand (DEST). The
53 first operand is assigned the result of the subtraction, and the flags are
54 set accordingly.
55 <P>
56 When an immediate byte value is subtracted from a word operand, the
57 immediate value is first sign-extended to the size of the destination
58 operand.
60 <H2>Flags Affected</H2>
62 OF, SF, ZF, AF, PF, and CF as described in <A HREF="appc.htm">Appendix C</A>
64 <H2>Protected Mode Exceptions</H2>
66 #GP(0) if the result is in a nonwritable segment; #GP(0) for an illegal
67 memory operand effective address in the CS, DS, ES, FS, or GS segments;
68 #SS(0) for an illegal address in the SS segment; #PF(fault-code) for a page
69 fault
71 <H2>Real Address Mode Exceptions</H2>
73 Interrupt 13 if any part of the operand would lie outside of the effective
74 address space from 0 to 0FFFFH
76 <H2>Virtual 8086 Mode Exceptions</H2>
78 Same exceptions as in Real Address Mode; #PF(fault-code) for a page fault
81 <P>
82 <HR>
83 <P>
84 <B>up:</B> <A HREF="c17.htm">
85 Chapter 17 -- 80386 Instruction Set</A><BR>
86 <B>prev:</B><A HREF="STR.htm"> STR Store Task Register</A><BR>
87 <B>next:</B><A HREF="TEST.htm"> TEST Logical Compare</A>
88 </BODY>