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

📄 8086_instruction_set.html

📁 嵌入式C++开发环境 模拟器 可以帮助你调试开发环境 提高工作效率
💻 HTML
📖 第 1 页 / 共 5 页
字号:
<TR><TD><FONT FACE="Fixedsys">CMP</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>Compare.<BR><BR>Algorithm:<BR><BR><FONT FACE="Fixedsys">operand1 - operand2<BR><BR>result is not stored anywhere, flags are set (OF, SF, ZF, AF, PF, CF) accordingto result.</FONT><BR><BR>Example:<PRE><FONT FACE="Fixedsys">MOV AL, 5MOV BL, 5CMP AL, BL  ; AL = 5, ZF = 1 (so equal!)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>r</TD> <TD>r</TD> <TD>r</TD> <TD>r</TD> <TD>r</TD> <TD>r</TD> </TR></TABLE></FONT>			<A NAME="CMPSB">&nbsp;</A></TD></TR><TR><TD><FONT FACE="Fixedsys">CMPSB</FONT></TD><TD>No operands</TD><TD>Compare bytes: <NOBR>ES:[DI] from DS:[SI].</NOBR> <BR><BR>Algorithm:<BR><BR><FONT FACE="Fixedsys"><UL><LI>DS:[SI] - ES:[DI]<BR></LI><LI>set flags according to result:<BR> OF, SF, ZF, AF, PF, CF<BR></LI><LI>if DF = 0 then	<UL>	<LI>SI = SI + 1</LI>	<LI>DI = DI + 1</LI>	</UL>	else	<UL>	<LI>SI = SI - 1</LI>	<LI>DI = DI - 1</LI>	</UL></LI></UL></FONT>Example:<BR>see <B><A HREF="../Samples/cmpsb.asm">cmpsb.asm</A></B> in Samples.<BR><BR><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="CMPSW">&nbsp;</A></TD></TR><TR><TD><FONT FACE="Fixedsys">CMPSW</FONT></TD><TD>No operands</TD><TD>Compare words: <NOBR>ES:[DI] from DS:[SI].</NOBR> <BR><BR>Algorithm:<BR><BR><FONT FACE="Fixedsys"><UL><LI>DS:[SI] - ES:[DI]<BR></LI><LI>set flags according to result:<BR> OF, SF, ZF, AF, PF, CF<BR></LI><LI>if DF = 0 then	<UL>	<LI>SI = SI + 2</LI>	<LI>DI = DI + 2</LI>	</UL>	else	<UL>	<LI>SI = SI - 2</LI>	<LI>DI = DI - 2</LI>	</UL></LI></UL></FONT>Example:<BR>see <B><A HREF="../Samples/cmpsw.asm">cmpsw.asm</A></B> in Samples.<BR><BR><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="CWD">&nbsp;</A></TD></TR><TR><TD><FONT FACE="Fixedsys">CWD</FONT></TD><TD>No operands</TD><TD>Convert Word to Double word. <BR><BR>Algorithm:<BR><BR><FONT FACE="Fixedsys">if high bit of AX = 1 then:<UL><LI>DX = 65535 (0FFFFh)</LI></UL><BR>else<UL><LI>DX = 0</LI></UL></FONT><BR>Example:<PRE><FONT FACE="Fixedsys">MOV DX, 0   ; DX = 0MOV AX, 0   ; AX = 0MOV AX, -5  ; DX AX = 00000h:0FFFBhCWD         ; DX AX = 0FFFFh:0FFFBhRET</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="DAA">&nbsp;</A></TD></TR><TR><TD><FONT FACE="Fixedsys">DAA</FONT></TD><TD>No operands</TD><TD>Decimal adjust After Addition.<BR>Corrects the result of addition of two packed 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>AF = 1</LI></UL>if AL > 9Fh or CF = 1 then:<UL><LI>AL = AL + 60h</LI><LI>CF = 1</LI></UL></FONT><BR>Example:<PRE><FONT FACE="Fixedsys">MOV AL, 0Fh  ; AL = 0Fh (15)DAA          ; AL = 15hRET</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="DAS">&nbsp;</A></TD></TR><TR><TD><FONT FACE="Fixedsys">DAS</FONT></TD><TD>No operands</TD><TD>Decimal adjust After Subtraction.<BR>Corrects the result of subtraction of two packed 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>AF = 1</LI></UL>if AL > 9Fh or CF = 1 then:<UL><LI>AL = AL - 60h</LI><LI>CF = 1</LI></UL></FONT><BR>Example:<PRE><FONT FACE="Fixedsys">MOV AL, 0FFh  ; AL = 0FFh (-1)DAS           ; AL = 99h, CF = 1RET</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="DEC">&nbsp;</A></TD></TR><TR><TD><FONT FACE="Fixedsys">DEC</FONT></TD><TD><FONT FACE="Fixedsys">	<NOBR>	REG<BR>	memory<BR>	</NOBR></FONT></TD><TD>Decrement.<BR><BR>Algorithm:<BR><BR><FONT FACE="Fixedsys">operand = operand - 1<BR><BR></FONT><BR>Example:<PRE><FONT FACE="Fixedsys">MOV AL, 255  ; AL = 0FFh (255 or -1)DEC AL       ; AL = 0FEh (254 or -2)RET</FONT></PRE><FONT FACE="Fixedsys"><TABLE BORDER=1 NOSHADE><TR> <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> </TR></TABLE>CF - unchanged!</FONT>			<A NAME="DIV">&nbsp;</A></TD></TR><TR><TD><FONT FACE="Fixedsys">DIV</FONT></TD><TD><FONT FACE="Fixedsys">	<NOBR>	REG<BR>	memory<BR>	</NOBR></FONT></TD><TD>Unsigned divide.<BR><BR>Algorithm:<BR><BR> <BLOCKQUOTE>	 when operand is a <B>byte</B>:<BR>	 <FONT FACE="Fixedsys">AL = AX / operand<BR>	 AH = remainder (modulus)	 </FONT> </BLOCKQUOTE> <BLOCKQUOTE>	when operand is a <B>word</B>:<BR>	<FONT FACE="Fixedsys">AX = (DX AX) / operand<BR>	DX = remainder (modulus)	</FONT> </BLOCKQUOTE> Example:<PRE><FONT FACE="Fixedsys">MOV AX, 203   ; AX = 00CBhMOV BL, 4DIV BL        ; AL = 50 (32h), AH = 3RET</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>?</TD> <TD>?</TD> <TD>?</TD> <TD>?</TD> <TD>?</TD> </TR></TABLE></FONT> 			<A NAME="HLT">&nbsp;</A></TD></TR><TR><TD><FONT FACE="Fixedsys">HLT</FONT></TD><TD>No operands</TD><TD>Halt the System.<BR><BR> Example:<PRE><FONT FACE="Fixedsys">MOV AX, 5HLT</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="IDIV">&nbsp;</A></TD></TR><TR><TD><FONT FACE="Fixedsys">IDIV</FONT></TD><TD><FONT FACE="Fixedsys">	<NOBR>	REG<BR>	memory<BR>	</NOBR></FONT></TD><TD>Signed divide.<BR><BR>Algorithm:<BR><BR> <BLOCKQUOTE>	 when operand is a <B>byte</B>:<BR>	 <FONT FACE="Fixedsys">AL = AX / operand<BR>	 AH = remainder (modulus)	 </FONT> </BLOCKQUOTE> <BLOCKQUOTE>	when operand is a <B>word</B>:<BR>	<FONT FACE="Fixedsys">AX = (DX AX) / operand<BR>	DX = remainder (modulus)	</FONT> </BLOCKQUOTE> Example:<PRE><FONT FACE="Fixedsys">MOV AX, -203 ; AX = 0FF35hMOV BL, 4IDIV BL      ; AL = -50 (0CEh), AH = -3 (0FDh)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>?</TD> <TD>?</TD> <TD>?</TD> <TD>?</TD> <TD>?</TD> </TR></TABLE></FONT> 			<A NAME="IMUL">&nbsp;</A></TD></TR><TR><TD><FONT FACE="Fixedsys">IMUL</FONT></TD><TD><FONT FACE="Fixedsys">	<NOBR>	REG<BR>	memory<BR>	</NOBR></FONT></TD><TD>Signed multiply.<BR><BR>Algorithm:<BR><BR> <BLOCKQUOTE>	 when operand is a <B>byte</B>:<BR>	 <FONT FACE="Fixedsys">AX = AL * operand</FONT>. </BLOCKQUOTE> <BLOCKQUOTE>	when operand is a <B>word</B>:<BR>	<FONT FACE="Fixedsys">(DX AX) = AX * operand</FONT>. </BLOCKQUOTE>  Example:<PRE><FONT FACE="Fixedsys">MOV AL, -2MOV BL, -4IMUL BL      ; AX = 8RET</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>r</TD> <TD>?</TD> <TD>?</TD> </TR></TABLE>CF=OF=0 when result fits into operand of IMUL.</FONT> 			<A NAME="IN">&nbsp;</A></TD></TR><TR><TD><FONT FACE="Fixedsys">IN</FONT></TD><TD><FONT FACE="Fixedsys">	<NOBR>	AL, im.byte<BR>	AL, DX<BR>	AX, im.byte<BR>	AX, DX	</NOBR></FONT></TD><TD>Input from port into <B>AL</B> or <B>AX</B>.<BR>Second operand is a port number. If required to accessport number over 255 - <B>DX</B> register should be used.<BR>Example:<PRE><FONT FACE="Fixedsys">IN AX, 4  ; get status of traffic lights.IN AL, 7  ; get status of stepper-motor.</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="INC">&nbsp;</A></TD></TR><TR><TD><FONT FACE="Fixedsys">INC</FONT></TD><TD><FONT FACE="Fixedsys">	<NOBR>	REG<BR>	memory<BR>	</NOBR></FONT></TD><TD>Increment.<BR><BR>Algorithm:<BR><BR><FONT FACE="Fixedsys">operand = operand + 1<BR></FONT><BR>Example:<PRE><FONT FACE="Fixedsys">MOV AL, 4INC AL       ; AL = 5RET</FONT></PRE><FONT FACE="Fixedsys"><TABLE BORDER=1 NOSHADE><TR> <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> </TR></TABLE>CF - unchanged!</FONT>			<A NAME="INT">&nbsp;</A></TD></TR><TR><TD><FONT FACE="Fixedsys">INT</FONT></TD><TD><FONT FACE="Fixedsys">	<NOBR>immediate byte</NOBR></FONT></TD><TD>Interrupt numbered by immediate byte (0..255).<BR><BR>Algorithm:<BR><BR><FONT FACE="Fixedsys"><UL>	Push to stack:	<UL>	<LI>flags register</LI>	<LI>CS</LI>	<LI>IP</LI>	</UL>	<LI>IF = 0</LI>	<LI>Transfer control to interrupt procedure</LI></UL></FONT><BR>Example:<PRE><FONT FACE="Fixedsys">MOV AH, 0Eh  ; teletype.MOV AL, 'A'INT 10h      ; BIOS interrupt.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> <TD>I</TD> </TR><TR> <TD COLSPAN=6>unchanged</TD> <TD>0</TD></TR></TABLE></FONT>			<A NAME="INTO">&nbsp;</A></TD></TR><TR><TD><FONT FACE="Fixedsys">INTO</FONT></TD><TD>No operands</TD><TD>Interrupt 4 if Overflow flag is 1.<BR><BR>Algorithm:<BR><BR><FONT FACE="Fixedsys">if OF = 1 then INT 4<BR></FONT><BR>Example:<PRE><FONT FACE="Fixedsys">; -5 - 127 = -132 (not in -128..127); the result of SUB is wrong (124),; so OF = 1 is set:MOV AL, -5SUB AL, 127   ; AL = 7Ch (124)INTO          ; process error.RET</FONT></PRE>			<A NAME="IRET">&nbsp;</A></TD></TR><TR><TD><FONT FACE="Fixedsys">IRET</FONT></TD><TD>No operands</TD><TD>Interrupt Return.<BR><BR>Algorithm:<BR><BR><FONT FACE="Fixedsys"><UL>	Pop from stack:	<UL>	<LI>IP</LI>	<LI>CS</LI>	<LI>flags register</LI>	</UL></UL></FONT><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><CENTER>popped</CENTER></TD> </TR></TABLE></FONT>			<A NAME="JA">&nbsp;</A></TD></TR><TR><TD><FONT FACE="Fixedsys">JA</FONT></TD><TD><FONT FACE="Fixedsys">	<NOBR>label</NOBR></FONT></TD><TD>Short Jump if first operand is Above second operand (as set by CMP instruction).Unsigned.<BR><BR>Algorithm:<BR><BR><FONT FACE="Fixedsys"><UL>	if (CF = 0) and (ZF = 0) then jump</UL></FONT>Example:<PRE><FONT FACE="Fixedsys">   include 'emu8086.inc'   #make_COM#   ORG 100h   MOV AL, 250   CMP AL, 5   JA label1   PRINT 'AL is not above 5'   JMP exitlabel1:   PRINT 'AL is above 5'exit:   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="JAE">&nbsp;</A></TD></TR><TR><TD><FONT FACE="Fixedsys">JAE</FONT></TD><TD><FONT FACE="Fixedsys">	<NOBR>label</NOBR></FONT></TD><TD>Short Jump if first operand is Above or Equal to second operand (as set by CMP instruction).Unsigned.<BR><BR>Algorithm:<BR><BR><FONT FACE="Fixedsys"><UL>	if CF = 0 then jump</UL></FONT>Example:<PRE><FONT FACE="Fixedsys">   include 'emu8086.inc'   #make_COM#   ORG 100h   MOV AL, 5   CMP AL, 5   JAE label1   PRINT 'AL is not above or equal to 5'   JMP exitlabel1:   PRINT 'AL is above or equal to 5'exit:   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="JB">&nbsp;</A></TD></TR><TR><TD><FONT FACE="Fixedsys">JB</FONT></TD><TD><FONT FACE="Fixedsys">	<NOBR>label</NOBR></FONT></TD><TD>Short Jump if first operand is Below second operand (as set by CMP instruction).Unsigned.<BR><BR>Algorithm:<BR><BR><FONT FACE="Fixedsys"><UL>	if CF = 1 then jump</UL></FONT>Example:<PRE><FONT FACE="Fixedsys">   include 'emu8086.inc'   #make_COM#   ORG 100h   MOV AL, 1   CMP AL, 5

⌨️ 快捷键说明

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