⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 8086_instruction_set.html

📁 嵌入式C++开发环境 模拟器 可以帮助你调试开发环境 提高工作效率
💻 HTML
📖 第 1 页 / 共 5 页
字号:
<!doctype HTML public "-//W3O//DTD W3 HTML 3.0//EN"><HTML><HEAD><TITLE>8086 instructions</TITLE><META name="description" content="Complete 8086 instruction set"><META name="keywords" content="8086, instruction, set, complete instruction set, example, mov, add, inc, sub, xor, xchg"><META name="robots" content="nofollow"></HEAD><BODY bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#007099" alink="#FF0000"><FONT FACE="Verdana" SIZE=3><FONT SIZE=+2><B>Complete 8086 instruction set</B></FONT><!-- 116 instructions --><HR><BR>Quick reference:<BR><BR><FONT FACE="Fixedsys"><TABLE BORDER=0 WIDTH=100%><TR><TD><A HREF="#AAA">AAA</A>  <BR><A HREF="#AAD">AAD</A>  <BR><A HREF="#AAM">AAM</A>  <BR><A HREF="#AAS">AAS</A>  <BR><A HREF="#ADC">ADC</A>  <BR><A HREF="#ADD">ADD</A>  <BR><A HREF="#AND">AND</A>  <BR><A HREF="#CALL">CALL</A>  <BR><A HREF="#CBW">CBW</A>  <BR><A HREF="#CLC">CLC</A>  <BR><A HREF="#CLD">CLD</A>  <BR><A HREF="#CLI">CLI</A>  <BR><A HREF="#CMC">CMC</A>  <BR><A HREF="#CMP">CMP</A>  <BR></TD><TD><A HREF="#CMPSB">CMPSB</A>  <BR><A HREF="#CMPSW">CMPSW</A>  <BR><A HREF="#CWD">CWD</A>  <BR><A HREF="#DAA">DAA</A>  <BR><A HREF="#DAS">DAS</A>  <BR><A HREF="#DEC">DEC</A>  <BR><A HREF="#DIV">DIV</A>  <BR><A HREF="#HLT">HLT</A>  <BR><A HREF="#IDIV">IDIV</A>  <BR><A HREF="#IMUL">IMUL</A>  <BR><A HREF="#IN">IN</A>  <BR><A HREF="#INC">INC</A>  <BR><A HREF="#INT">INT</A>  <BR><A HREF="#INTO">INTO</A>  <BR><A HREF="#IRET">IRET</A>  <BR><A HREF="#JA">JA</A>  <BR></TD><TD><A HREF="#JAE">JAE</A>  <BR><A HREF="#JB">JB</A>  <BR><A HREF="#JBE">JBE</A>  <BR><A HREF="#JC">JC</A>  <BR><A HREF="#JCXZ">JCXZ</A>  <BR><A HREF="#JE">JE</A>  <BR><A HREF="#JG">JG</A>  <BR><A HREF="#JGE">JGE</A>  <BR><A HREF="#JL">JL</A>  <BR><A HREF="#JLE">JLE</A>  <BR><A HREF="#JMP">JMP</A>  <BR><A HREF="#JNA">JNA</A>  <BR><A HREF="#JNAE">JNAE</A>  <BR><A HREF="#JNB">JNB</A>  <BR></TD><TD><A HREF="#JNBE">JNBE</A>  <BR><A HREF="#JNC">JNC</A>  <BR><A HREF="#JNE">JNE</A>  <BR><A HREF="#JNG">JNG</A>  <BR><A HREF="#JNGE">JNGE</A>  <BR><A HREF="#JNL">JNL</A>  <BR><A HREF="#JNLE">JNLE</A>  <BR><A HREF="#JNO">JNO</A>  <BR><A HREF="#JNP">JNP</A>  <BR><A HREF="#JNS">JNS</A>  <BR><A HREF="#JNZ">JNZ</A>  <BR><A HREF="#JO">JO</A>  <BR><A HREF="#JP">JP</A>  <BR><A HREF="#JPE">JPE</A>  <BR></TD><TD><A HREF="#JPO">JPO</A>  <BR><A HREF="#JS">JS</A>  <BR><A HREF="#JZ">JZ</A>  <BR><A HREF="#LAHF">LAHF</A>  <BR><A HREF="#LDS">LDS</A>  <BR><A HREF="#LEA">LEA</A>  <BR><A HREF="#LES">LES</A>  <BR><A HREF="#LODSB">LODSB</A>  <BR><A HREF="#LODSW">LODSW</A>  <BR><A HREF="#LOOP">LOOP</A>  <BR><A HREF="#LOOPE">LOOPE</A>  <BR><A HREF="#LOOPNE">LOOPNE</A>  <BR><A HREF="#LOOPNZ">LOOPNZ</A>  <BR><A HREF="#LOOPZ">LOOPZ</A>  <BR></TD><TD><A HREF="#MOV">MOV</A>  <BR><A HREF="#MOVSB">MOVSB</A>  <BR><A HREF="#MOVSW">MOVSW</A>  <BR><A HREF="#MUL">MUL</A>  <BR><A HREF="#NEG">NEG</A>  <BR><A HREF="#NOP">NOP</A>  <BR><A HREF="#NOT">NOT</A>  <BR><A HREF="#OR">OR</A>  <BR><A HREF="#OUT">OUT</A>  <BR><A HREF="#POP">POP</A>  <BR><A HREF="#POPA">POPA</A>  <BR><A HREF="#POPF">POPF</A>  <BR><A HREF="#PUSH">PUSH</A>  <BR><A HREF="#PUSHA">PUSHA</A>  <BR><A HREF="#PUSHF">PUSHF</A>  <BR><A HREF="#RCL">RCL</A>  <BR></TD><TD><A HREF="#RCR">RCR</A>  <BR><A HREF="#REP">REP</A>  <BR><A HREF="#REPE">REPE</A>  <BR><A HREF="#REPNE">REPNE</A>  <BR><A HREF="#REPNZ">REPNZ</A>  <BR><A HREF="#REPZ">REPZ</A>  <BR><A HREF="#RET">RET</A>  <BR><A HREF="#RETF">RETF</A>  <BR><A HREF="#ROL">ROL</A>  <BR><A HREF="#ROR">ROR</A>  <BR><A HREF="#SAHF">SAHF</A>  <BR><A HREF="#SAL">SAL</A>  <BR><A HREF="#SAR">SAR</A>  <BR><A HREF="#SBB">SBB</A>  <BR></TD><TD><A HREF="#SCASB">SCASB</A>  <BR><A HREF="#SCASW">SCASW</A>  <BR><A HREF="#SHL">SHL</A>  <BR><A HREF="#SHR">SHR</A>  <BR><A HREF="#STC">STC</A>  <BR><A HREF="#STD">STD</A>  <BR><A HREF="#STI">STI</A>  <BR><A HREF="#STOSB">STOSB</A>  <BR><A HREF="#STOSW">STOSW</A>  <BR><A HREF="#SUB">SUB</A>  <BR><A HREF="#TEST">TEST</A>  <BR><A HREF="#XCHG">XCHG</A>  <BR><A HREF="#XLATB">XLATB</A>  <BR><A HREF="#XOR">XOR</A>  <BR></TD></TR></TABLE></FONT><BR><BR><HR>Operand types:<BR><BR><B>REG</B>: AX, BX, CX, DX, AH, AL, BL, BH, CH, CL, DH, DL, DI, SI, BP, SP.<BR><BR><B>SREG</B>: DS, ES, SS, and only as second operand: CS.<BR><BR><B>memory</B>: [BX], [BX+SI+7], variable, etc...(see <A HREF="asm_tutorial_02.html"><B>Memory Access</B></A>).<BR><BR><B>immediate</B>: 5, -24, 3Fh, 10001101b, etc...<BR><BR><HR><BR>Notes:<BR><BR><UL><LI>When two operands are required for an instruction they are separated by comma. For example:<BR><BR>	<FONT FACE="Fixedsys">	REG, memory	</FONT>	<BR><BR></LI><LI>When there are two operands, both operands must have the same size (except shift and rotate    instructions). For example:<BR><BR>    <FONT FACE="Fixedsys">	AL, DL<BR>	DX, AX<BR>	<FONT COLOR=#005555>	m1 DB ?<BR>	</FONT>	AL, m1<BR>	<FONT COLOR=#005555>	m2 DW ?<BR>	</FONT>	AX, m2	</FONT>	<BR><BR>    </LI>	<LI>Some instructions allow several operand combinations.	 For example:<BR><BR>	<FONT FACE="Fixedsys">		memory, immediate<BR>		REG, immediate<BR><BR>		memory, REG<BR>		REG, SREG	</FONT><BR><BR>	</LI> <LI>Some examples contain macros, so it is advisable to use <NOBR><B>Shift + F8</B></NOBR> hot key to <I>Step Over</I> (to make macro code execute at maximum speed set <B>step delay</B> to zero), otherwise emulator will step through each instruction of a macro. Here is an example that uses PRINTN macro: <PRE> <FONT FACE="Fixedsys">   #make_COM#   include 'emu8086.inc'   ORG 100h   MOV AL, 1   MOV BL, 2   PRINTN 'Hello World!'   ; macro.   MOV CL, 3   PRINTN 'Welcome!'       ; macro.   RET</FONT></PRE> </LI></UL><BR><HR><BR><BR>These marks are used to show the state of the flags:<BR><BR><B>1</B> - instruction sets this flag to <B>1</B>.<BR><B>0</B> - instruction sets this flag to <B>0</B>.<BR><B>r</B> - flag value depends on result of the instruction.<BR><B>?</B> - flag value is undefined (maybe <B>1</B> or <B>0</B>).<BR><BR><BR><HR><BR><BR><B>Some instructions generate exactly the same machine code, so disassemblermay have a problem decoding to your original code. This is especiallyimportant for Conditional Jump instructions (see"<A HREF="asm_tutorial_07.html">Program Flow Control</A>"in Tutorials for more information).</B><BR><BR><BR><HR><BR><BR>Instructions in alphabetical order:<BR><BR><TABLE BORDER=1 WIDTH=100% CELLPADDING=10><TR><TD>Instruction</TD> <TD>Operands</TD> <TD>Description			<A NAME="AAA">&nbsp;</A></TD></TR><TR><TD><FONT FACE="Fixedsys">AAA</FONT></TD><TD>No operands</TD><TD>ASCII Adjust after Addition.<BR>Corrects result in AH and AL after additionwhen working with BCD values. <BR><BR> It works according to the following Algorithm:<BR><BR><FONT FACE="Fixedsys">if low nibble of AL > 9 or AF = 1 then:<BR><UL><LI>AL = AL + 6</LI><LI>AH = AH + 1</LI><LI>AF = 1</LI><LI>CF = 1</LI></UL>else<UL><LI>AF = 0</LI><LI>CF = 0</LI></UL>in both cases:<BR>clear the high nibble of AL.</FONT><BR><BR>Example:<PRE><FONT FACE="Fixedsys">MOV AX, 15   ; AH = 00, AL = 0FhAAA          ; AH = 01, AL = 05RET</FONT></PRE><FONT FACE="Fixedsys"><TABLE BORDER=1 NOSHADE><TR> <TD>C</TD> <TD>Z</TD> <TD>S</TD> <TD>O</TD> <TD>P</TD> <TD>A</TD> </TR><TR> <TD>r</TD> <TD>?</TD> <TD>?</TD> <TD>?</TD> <TD>?</TD> <TD>r</TD> </TR></TABLE></FONT>			<A NAME="AAD">&nbsp;</A></TD></TR><TR><TD><FONT FACE="Fixedsys">AAD</FONT></TD><TD>No operands</TD><TD>ASCII Adjust before Division.<BR>Prepares two BCD values for division. <BR><BR>Algorithm:<BR><BR><FONT FACE="Fixedsys"><UL><LI>AL = (AH * 10) + AL</LI><LI>AH = 0</LI></UL></FONT><BR>Example:<PRE><FONT FACE="Fixedsys">MOV AX, 0105h   ; AH = 01, AL = 05AAD             ; AH = 00, AL = 0Fh (15)RET</FONT></PRE><FONT FACE="Fixedsys"><TABLE BORDER=1 NOSHADE><TR> <TD>C</TD> <TD>Z</TD> <TD>S</TD> <TD>O</TD> <TD>P</TD> <TD>A</TD> </TR><TR> <TD>?</TD> <TD>r</TD> <TD>r</TD> <TD>?</TD> <TD>r</TD> <TD>?</TD> </TR></TABLE></FONT>			<A NAME="AAM">&nbsp;</A></TD></TR><TR><TD><FONT FACE="Fixedsys">AAM</FONT></TD><TD>No operands</TD><TD>ASCII Adjust after Multiplication.<BR>Corrects the result of multiplication of two BCD values. <BR><BR>Algorithm:<BR><BR><FONT FACE="Fixedsys"><UL><LI>AH = AL / 10</LI><LI>AL = remainder</LI></UL></FONT><BR>Example:<PRE><FONT FACE="Fixedsys">MOV AL, 15   ; AL = 0FhAAM          ; AH = 01, AL = 05RET</FONT></PRE><FONT FACE="Fixedsys"><TABLE BORDER=1 NOSHADE><TR> <TD>C</TD> <TD>Z</TD> <TD>S</TD> <TD>O</TD> <TD>P</TD> <TD>A</TD> </TR><TR> <TD>?</TD> <TD>r</TD> <TD>r</TD> <TD>?</TD> <TD>r</TD> <TD>?</TD> </TR></TABLE></FONT>			<A NAME="AAS">&nbsp;</A></TD></TR><TR><TD><FONT FACE="Fixedsys">AAS</FONT></TD><TD>No operands</TD><TD>ASCII Adjust after Subtraction.<BR>Corrects result in AH and AL after subtractionwhen working with BCD values. <BR><BR>Algorithm:<BR><BR><FONT FACE="Fixedsys">if low nibble of AL > 9 or AF = 1 then:<BR><UL><LI>AL = AL - 6</LI><LI>AH = AH - 1</LI><LI>AF = 1</LI><LI>CF = 1</LI></UL>else<UL><LI>AF = 0</LI><LI>CF = 0</LI></UL>in both cases:<BR>clear the high nibble of AL.</FONT><BR><BR>Example:<PRE><FONT FACE="Fixedsys">MOV AX, 02FFh  ; AH = 02, AL = 0FFhAAS            ; AH = 01, AL = 09RET</FONT></PRE><FONT FACE="Fixedsys"><TABLE BORDER=1 NOSHADE><TR> <TD>C</TD> <TD>Z</TD> <TD>S</TD> <TD>O</TD> <TD>P</TD> <TD>A</TD> </TR><TR> <TD>r</TD> <TD>?</TD> <TD>?</TD> <TD>?</TD> <TD>?</TD> <TD>r</TD> </TR></TABLE></FONT>			<A NAME="ADC">&nbsp;</A></TD></TR><TR><TD><FONT FACE="Fixedsys">ADC</FONT></TD><TD><FONT FACE="Fixedsys">	<NOBR>	REG, memory<BR>	memory, REG<BR>	REG, REG<BR>	memory, immediate<BR>	REG, immediate	</NOBR></FONT></TD><TD>Add with Carry.<BR><BR><BR>Algorithm:<BR><BR><FONT FACE="Fixedsys">operand1 = operand1 + operand2 + CF</FONT><BR><BR>Example:<PRE><FONT FACE="Fixedsys">STC        ; set CF = 1MOV AL, 5  ; AL = 5ADC AL, 1  ; AL = 7RET</FONT></PRE><FONT FACE="Fixedsys"><TABLE BORDER=1 NOSHADE><TR> <TD>C</TD> <TD>Z</TD> <TD>S</TD> <TD>O</TD> <TD>P</TD> <TD>A</TD> </TR><TR> <TD>r</TD> <TD>r</TD> <TD>r</TD> <TD>r</TD> <TD>r</TD> <TD>r</TD> </TR></TABLE></FONT>			<A NAME="ADD">&nbsp;</A></TD></TR><TR><TD><FONT FACE="Fixedsys">ADD</FONT></TD><TD><FONT FACE="Fixedsys">	<NOBR>	REG, memory<BR>	memory, REG<BR>	REG, REG<BR>	memory, immediate<BR>	REG, immediate	</NOBR></FONT></TD><TD>Add.<BR><BR><BR>Algorithm:<BR><BR><FONT FACE="Fixedsys">operand1 = operand1 + operand2</FONT><BR><BR>Example:<PRE><FONT FACE="Fixedsys">MOV AL, 5   ; AL = 5ADD AL, -3  ; AL = 2RET</FONT></PRE><FONT FACE="Fixedsys"><TABLE BORDER=1 NOSHADE><TR> <TD>C</TD> <TD>Z</TD> <TD>S</TD> <TD>O</TD> <TD>P</TD> <TD>A</TD> </TR><TR> <TD>r</TD> <TD>r</TD> <TD>r</TD> <TD>r</TD> <TD>r</TD> <TD>r</TD> </TR></TABLE></FONT>			<A NAME="AND">&nbsp;</A></TD></TR><TR><TD><FONT FACE="Fixedsys">AND</FONT></TD><TD><FONT FACE="Fixedsys">	<NOBR>	REG, memory<BR>	memory, REG<BR>	REG, REG<BR>	memory, immediate<BR>	REG, immediate	</NOBR></FONT></TD><TD>Logical AND between all bits of two operands. Result is stored in operand1.<BR><BR>These rules apply:<BR><BR><FONT FACE="Fixedsys">1 AND 1 = 1<BR>1 AND 0 = 0<BR>0 AND 1 = 0<BR>0 AND 0 = 0<BR></FONT><BR><BR>Example:<PRE><FONT FACE="Fixedsys">MOV AL, 'a'        ; AL = 01100001bAND AL, 11011111b  ; AL = 01000001b  ('A')RET</FONT></PRE><FONT FACE="Fixedsys"><TABLE BORDER=1 NOSHADE><TR> <TD>C</TD> <TD>Z</TD> <TD>S</TD> <TD>O</TD> <TD>P</TD> </TR><TR> <TD>0</TD> <TD>r</TD> <TD>r</TD> <TD>0</TD> <TD>r</TD> </TR></TABLE></FONT>			<A NAME="CALL">&nbsp;</A></TD></TR><TR><TD><FONT FACE="Fixedsys">CALL</FONT></TD><TD><FONT FACE="Fixedsys">	<NOBR>	procedure name<BR>	label<BR>	4-byte address<BR>	</NOBR></FONT></TD><TD>Transfers control to procedure, return address is (IP) is pushed tostack. <I>4-byte address</I> may be entered in this form:<FONT FACE="Fixedsys">1234h:5678h</FONT>, first value is a segment secondvalue is an offset (this is a far call, so CS is also pushed to stack).<BR><BR><BR>Example:<PRE><FONT FACE="Fixedsys">#make_COM#ORG 100h  ; for COM file.CALL p1ADD AX, 1RET         ; return to OS.p1 PROC     ; procedure declaration.    MOV AX, 1234h    RET     ; return to caller.p1 ENDP</FONT></PRE><FONT FACE="Fixedsys"><TABLE BORDER=1 NOSHADE><TR> <TD>C</TD> <TD>Z</TD> <TD>S</TD> <TD>O</TD> <TD>P</TD> <TD>A</TD> </TR><TR> <TD COLSPAN=6>unchanged</TD> </TR></TABLE></FONT>			<A NAME="CBW">&nbsp;</A></TD></TR><TR><TD><FONT FACE="Fixedsys">CBW</FONT></TD><TD>No operands</TD><TD>Convert byte into word. <BR><BR>Algorithm:<BR><BR><FONT FACE="Fixedsys">if high bit of AL = 1 then:<UL><LI>AH = 255 (0FFh)</LI></UL><BR>else<UL><LI>AH = 0</LI></UL></FONT><BR>Example:<PRE><FONT FACE="Fixedsys">MOV AX, 0   ; AH = 0, AL = 0MOV AL, -5  ; AX = 000FBh (251)CBW         ; AX = 0FFFBh (-5)RET</FONT></PRE><FONT FACE="Fixedsys"><TABLE BORDER=1 NOSHADE><TR> <TD>C</TD> <TD>Z</TD> <TD>S</TD> <TD>O</TD> <TD>P</TD> <TD>A</TD> </TR><TR> <TD COLSPAN=6>unchanged</TD> </TR></TABLE></FONT>			<A NAME="CLC">&nbsp;</A></TD></TR><TR><TD><FONT FACE="Fixedsys">CLC</FONT></TD><TD>No operands</TD><TD>Clear Carry flag. <BR><BR>Algorithm:<BR><BR><FONT FACE="Fixedsys">CF = 0</FONT><BR><BR><FONT FACE="Fixedsys"><TABLE BORDER=1 NOSHADE><TR> <TD>C</TD> </TR><TR> <TD>0</TD> </TR></TABLE></FONT>			<A NAME="CLD">&nbsp;</A></TD></TR><TR><TD><FONT FACE="Fixedsys">CLD</FONT></TD><TD>No operands</TD><TD>Clear Direction flag. SI and DI will be incremented by chaininstructions: CMPSB, CMPSW, LODSB, LODSW, MOVSB, MOVSW, STOSB, STOSW. <BR><BR>Algorithm:<BR><BR><FONT FACE="Fixedsys">DF = 0</FONT><BR><BR><FONT FACE="Fixedsys"><TABLE BORDER=1 NOSHADE><TR> <TD>D</TD> </TR><TR> <TD>0</TD> </TR></TABLE></FONT>			<A NAME="CLI">&nbsp;</A></TD></TR><TR><TD><FONT FACE="Fixedsys">CLI</FONT></TD><TD>No operands</TD><TD>Clear Interrupt enable flag. This disables hardware interrupts. <BR><BR>Algorithm:<BR><BR><FONT FACE="Fixedsys">IF = 0</FONT><BR><BR><FONT FACE="Fixedsys"><TABLE BORDER=1 NOSHADE><TR> <TD>I</TD> </TR><TR> <TD>0</TD> </TR></TABLE></FONT>			<A NAME="CMC">&nbsp;</A></TD></TR><TR><TD><FONT FACE="Fixedsys">CMC</FONT></TD><TD>No operands</TD><TD>Complement Carry flag. Inverts value of CF. <BR><BR>Algorithm:<BR><BR><FONT FACE="Fixedsys">if CF = 1 then CF = 0<BR>if CF = 0 then CF = 1<BR></FONT><BR><BR><FONT FACE="Fixedsys"><TABLE BORDER=1 NOSHADE><TR> <TD>C</TD> </TR><TR> <TD>r</TD> </TR></TABLE></FONT>			<A NAME="CMP">&nbsp;</A></TD></TR>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -