X86 Assembly Language Reference Manual
Total Page:16
File Type:pdf, Size:1020Kb
x86 Assembly Language Reference Manual 2550 Garcia Avenue Mountain View, CA 94043 U.S.A. A Sun Microsystems, Inc. Business 1995 Sun Microsystems, Inc. 2550 Garcia Avenue, Mountain View, California 94043-1100 U.S.A. All rights reserved. This product or document is protected by copyright and distributed under licenses restricting its use, copying, distribution and decompilation. No part of this product or document may be reproduced in any form by any means without prior written authorization of Sun and its licensors, if any. Portions of this product may be derived from the UNIX® system, licensed from UNIX Systems Laboratories, Inc., a wholly owned subsidiary of Novell, Inc., and from the Berkeley 4.3 BSD system, licensed from the University of California. Third-party software, including font technology in this product, is protected by copyright and licensed from Sun’s Suppliers. RESTRICTED RIGHTS LEGEND: Use, duplication, or disclosure by the government is subject to restrictions as set forth in subparagraph (c)(1)(ii) of the Rights in Technical Data and Computer Software clause at DFARS 252.227-7013 and FAR 52.227-19. The product described in this manual may be protected by one or more U.S. patents, foreign patents, or pending applications. TRADEMARKS Sun, Sun Microsystems, the Sun logo, SunSoft, the SunSoft logo, Solaris, SunOS, OpenWindows, DeskSet, ONC, ONC+, and NFS are trademarks or registered trademarks of Sun Microsystems, Inc. in the United States and other countries. UNIX is a registered trademark in the United States and other countries, exclusively licensed through X/Open Company, Ltd. OPEN LOOK is a registered trademark of Novell, Inc. PostScript and Display PostScript are trademarks of Adobe Systems, Inc. All SPARC trademarks are trademarks or registered trademarks of SPARC International, Inc. in the United States and other countries. SPARCcenter, SPARCcluster, SPARCompiler, SPARCdesign, SPARC811, SPARCengine, SPARCprinter, SPARCserver, SPARCstation, SPARCstorage, SPARCworks, microSPARC, microSPARC-II, and UltraSPARCare licensed exclusively to Sun Microsystems, Inc. Products bearing SPARC trademarks are based upon an architecture developed by Sun Microsystems, Inc. The OPEN LOOK® and Sun™ Graphical User Interfaces were developed by Sun Microsystems, Inc. for its users and licensees. Sun acknowledges the pioneering efforts of Xerox in researching and developing the concept of visual or graphical user interfaces for the computer industry. Sun holds a non-exclusive license from Xerox to the Xerox Graphical User Interface, which license also covers Sun’s licensees who implement OPEN LOOK GUI’s and otherwise comply with Sun’s written license agreements. X Window System is a trademark of X Consortium, Inc. THIS PUBLICATION IS PROVIDED “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. THIS PUBLICATION COULD INCLUDE TECHNICAL INACCURACIES OR TYPOGRAPHICAL ERRORS. CHANGES ARE PERIODICALLY ADDED TO THE INFORMATION HEREIN, THESE CHANGES WILL BE INCORPORATED IN NEW EDITIONS OF THE PUBLICATION. SUN MICROSYSTEMS, INC. MAY MAKE IMPROVEMENTS AND/OR CHANGES IN THE PRODUCT(S) AND/OR THE PROGRAMS(S) DESCRIBED IN THIS PUBLICATION AT ANY TIME. Please Recycle Contents Preface. xvii 1. Assembler Input . 1 Introduction . 1 Source Files in Assembly Language Format. 2 File Organization . 2 Statements. 3 Values and Symbol Types . 4 Expressions. 6 Expression Syntax . 7 Expression Semantics (Absolute vs. Relocatable) . 9 Machine Instruction Syntax . 10 Instruction Description . 12 Pseudo Operations . 14 General Pseudo Operations . 14 Symbol Definition Pseudo Operations . 19 iii 2. Instruction-Set Mapping . 21 Introduction . 22 Notational Conventions . 23 References . 26 Segment Register Instructions . 26 Load Full Pointer (lds,les, lfs, lgs, and lss) . 26 Pop Stack into Word (pop). 27 Push Word/Long onto Stack (push). 28 I/O Instructions . 29 Input from Port (in, ins) . 29 Output from Port (out, outs) . 31 Flag Instructions. 32 Load Flags into AH Register (lahf) . 32 Store AH into Flags (sahf). 33 Pop Stack into Flag (popf) . 33 Push Flag Register Onto Stack (pushf) . 34 Complement Carry Flag (cmc). 35 Clear Carry Flag (clc). 35 Set Carry Flag (stc). 36 Clear Interrupt Flag (cli) . 36 Set Interrupt Flag (sti) . 37 Clear Direction Flag (cld) . 37 Set Direction Flag (std) . 38 Arithmetic Logical Instructions . 38 iv x86 Assembly Language Reference Manual—November 1995 Integer Addition (add) . 38 Integer Add With Carry (adc) . 39 Integer Subtraction (sub) . 40 Integer Subtraction With Borrow (sbb) . 41 Compare Two Operands (cmp) . 42 Increment by 1 (inc). 43 Decrease by 1 (dec) . 44 Logical Comparison or Test (test) . 45 Shift (sal, shl, sar, shr) . 46 Double Precision Shift Left (shld) . 48 Double Precision Shift Right (shrd). 49 One’s Complement Negation (not) . 50 Two’s Complement Negation (neg). 50 Check Array Index Against Bounds (bound). 51 Logical And (and) . 52 Logical Inclusive OR (or) . 54 Logical Exclusive OR (xor) . 55 Multiply and Divide Instructions . 56 Signed Multiply (imul) . 57 Unsigned Multiplication of AL, AX or EAX(mul) . 58 Unsigned Divide (div). 60 Signed Divide (idiv) . 61 Conversion Instructions . 62 Convert Byte to Word (cbtw) . 62 Contents v Convert Word to Long (cwtl) . 63 Convert Signed Word to Signed Double Word (cwtd) . 63 Convert Signed Long to Signed Double Long (cltd) . 64 Decimal Arithmetic Instructions . 64 Decimal Adjust AL after Addition (daa) . 64 Decimal Adjust AL after Subtraction (das). 65 ASCII Adjust after Addition (aaa) . 65 ASCII Adjust after Subtraction (aas) . 66 ASCII Adjust AX after Multiply (aam) . 67 ASCII Adjust AX before Division (aad) . 68 Coprocessor Instructions. 69 Wait (wait, fwait) . 69 String Instructions . 69 Move Data from String to String (movs). 70 Compare String Operands (cmps) . 71 Store String Data (stos) . 72 The Load String Operand (lods) . 73 Compare String Data (scas) . 75 Look-Up Translation Table (xlat) . 76 Repeat String Operation (rep, repnz, repz) . 77 Procedure Call and Return Instructions . 78 Far Call — Procedure Call (lcall) . 78 Near Call — Procedure Call (call) . 79 Return from Procedure (ret) . 80 vi x86 Assembly Language Reference Manual—November 1995 Long Return (lret) . 81 Enter/Make Stack Frame for Procedure Parameters (enter) 82 High Level Procedure Exit (leave). 83 Jump Instructions. 83 Jump if ECX is Zero (jcxz). 83 Loop Control with CX Counter (loop, loopnz, loopz). 84 Jump (jmp, ljmp) . 85 Interrupt Instructions . 87 Call to Interrupt Procedure (int, into) . 87 Interrupt Return (iret) . 89 Protection Model Instructions . 90 Store Local Descriptor Table Register (sldt) . 90 Store Task Register (str). 90 Load Local Descriptor Table Register (lldt) . 91 Load Task Register (ltr). ..