8086汇编语言基础学习(二)—— 汇编指令
<h1 style="text-align: center"><span style="color: rgba(0, 0, 0, 1)">8086汇编语言基础学习(二)—— 汇编指令</span></h1><h2><span style="font-size: 18pt; color: rgba(0, 0, 0, 1)">数据传输指令:</span></h2>
<h3><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">1. MOV 指令</span></h3>
<ul>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">描述:赋值指令</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">格式:MOV DST,SRT</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">功能:<span style="color: rgba(255, 102, 0, 1)">双操作数</span>,将SRT 赋值给DST</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">注意:</span></li>
<ul>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">DST,SRT不能同时为mem,<span style="background-color: rgba(204, 255, 255, 1)">对于所有的双操作数皆是如此</span>。</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">不允许对CS赋值</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">其中一个是段寄存器时,另一个就必须是数据寄存器</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">将立即数送入mem时,要指定操作数的类型,例 BYTE PTR,WORD PTR,DWORD PTR</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">不影响PSW</span></li>
</ul>
</ul>
<h3><span style="font-size: 18.6667px; color: rgba(0, 0, 0, 1)">2. PUSH 指令</span></h3>
<ul>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">描述:进栈指令</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">格式:PUSH SRC</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">功能:<span style="color: rgba(255, 102, 0, 1)">单操作数</span>,将SRC压入堆栈</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">注意:</span></li>
<ul>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">只能对“字”进行操作</span></li>
</ul>
</ul>
<h3><span style="font-size: 18.6667px; color: rgba(0, 0, 0, 1)">3. POP 指令</span></h3>
<ul>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">描述:出栈指令</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">格式:POP DST</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">功能:<span style="color: rgba(255, 102, 0, 1)">单操作数</span>,将栈顶元素弹出给DST</span></li>
</ul>
<h3><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">4. XCHG 指令</span></h3>
<ul>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">描述:数据交换指令</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">格式:XCHG DST,SRT</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">功能:<span style="color: rgba(255, 102, 0, 1)">双操作数</span>,交换DST,SRT的值</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">注意:</span></li>
<ul>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">DST,SRT 不能均为mem</span></li>
</ul>
</ul>
<h3><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">5. IN 指令</span></h3>
<ul>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">描述:端口输入指令</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">格式:IN DST,SRT</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">功能:<span style="color: rgba(255, 102, 0, 1)">双操作数</span>,从端口SRT中读出一个字或字节到DST中</span></li>
</ul>
<h3><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">6. OUT 指令</span></h3>
<ul>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">描述:端口输出指令</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">格式:OUT DST,SRT</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">功能:<span style="color: rgba(255, 102, 0, 1)">双操作数</span>,向端口DST输出DST中的数据</span></li>
</ul>
<h3><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">7. XLAT 指令</span></h3>
<ul>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">描述:查表转换指令</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">格式:XLAT</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">功能:<span style="color: rgba(255, 102, 0, 1)">零操作数!</span>将DS : [ BX+AL ] 为地址的一个字节的内容传给AL</span></li>
</ul>
<h3><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">8. LEA 指令</span></h3>
<ul>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">描述:传输偏移地址指令</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">格式:LEA REG,MEM</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">功能:<span style="color: rgba(255, 102, 0, 1)">双操作数</span>,将MEM的偏移地址传给REG,这里的操作数类型是固定不变的!</span></li>
</ul>
<h3><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">9. LDS 指令</span></h3>
<ul>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">描述:传送偏移地址及首地址指令</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">格式:LDS REG,MEM</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">功能:<span style="color: rgba(255, 102, 0, 1)">双操作</span>数,将MEM的偏移地址(低位)传给REG,并将MEM的段首地址(高位)传给DS</span></li>
</ul>
<h3><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">10. LES 指令</span></h3>
<ul>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">描述:和LDS指令功能相似</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">格式:LES REG,MEM</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">功能:<span style="color: rgba(255, 102, 0, 1)">双操作数</span>,将MEM的偏移地址(低位)传给REG,并将MEM的段首地址(高位)传给ES</span></li>
</ul>
<h3><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">11. PUSHF 指令</span></h3>
<ul>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">描述:标志寄存器进栈</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">格式:PUSHF</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">功能:<span style="color: rgba(255, 102, 0, 1)">零操作数</span>,将PSW程序状态字压入堆栈</span></li>
</ul>
<h3><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">12. POPF 指令</span></h3>
<ul>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">描述:标志寄存器出栈</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">格式:POPF</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">功能:<span style="color: rgba(255, 102, 0, 1)">零操作数</span>,将栈顶元素弹出给FR</span></li>
</ul>
<h3><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">13. LAHF 指令</span></h3>
<ul>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">描述:标志送AH,Load AH,FR</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">格式:LAHF</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">功能:<span style="color: rgba(255, 102, 0, 1)">零操作数</span>,将FR的低八位赋值给AH</span></li>
</ul>
<h3><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">14. SAH 指令</span></h3>
<ul>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">猫叔:AH送标志,SET FR,AH</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">格式:SAH</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">功能:<span style="color: rgba(255, 102, 0, 1)">零操作数</span>,将AH赋值给FR的低八位</span></li>
</ul>
<h2> </h2>
<h2><span style="font-size: 18pt; color: rgba(0, 0, 0, 1)">算术运算指令:</span></h2>
<h3><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">1. INC 指令</span></h3>
<ul>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">描述:自加1</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">格式:INC DST</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">功能:<span style="color: rgba(255, 102, 0, 1)">单操作数</span>,DST = DST + 1</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">注意:<span style="background-color: rgba(204, 255, 255, 1)">影响ZF,PF,SF,OF,AF</span></span></li>
</ul>
<h3><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">2. ADD 指令</span></h3>
<ul>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">描述:不带进位的加法</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">格式:ADD DST,SRC</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">功能:<span style="color: rgba(255, 102, 0, 1)">双操作数</span>,DST = DST + SRC</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">注意:<span style="background-color: rgba(204, 255, 255, 1)">影响ZF,PF,SF,CF,OF,AF</span></span></li>
</ul>
<h3><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">3. ADC 指令</span></h3>
<ul>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">描述:带进位的加法</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">格式:ADC DST,SRC</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">功能:<span style="color: rgba(255, 102, 0, 1)">双操作数</span>,DST = DST + SRC + CF</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">注意:<span style="background-color: rgba(204, 255, 255, 1)">影响ZF,PF,SF,CF,OF,AF</span></span></li>
</ul>
<h3><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">4. DEC 指令</span></h3>
<ul>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">描述:自减1</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">格式:DEC DST</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">功能:<span style="color: rgba(255, 102, 0, 1)">单操作数</span>,DST = DST - 1</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">注意:<span style="background-color: rgba(204, 255, 255, 1)">影响ZF,PF,SF,OF,AF</span></span></li>
</ul>
<h3><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">5. SUB 指令</span></h3>
<ul>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">描述 :不带借位的减法</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">格式:SUB DST,SRC</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">功能:<span style="color: rgba(255, 102, 0, 1)">双操作数</span>,DST = DST - SRC</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">注意:<span style="background-color: rgba(204, 255, 255, 1)">影响ZF,PF,SF,CF,OF,AF</span></span></li>
</ul>
<h3><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">6. SBB 指令</span></h3>
<ul>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">描述:带借位的减法</span></li>
<li><span style="font-size: 18.6667px; color: rgba(0, 0, 0, 1)">格式:SBB DST,SRC</span></li>
<li><span style="font-size: 18.6667px; color: rgba(0, 0, 0, 1)">功能:<span style="color: rgba(255, 102, 0, 1)">双操作数</span>,DST = DST - SRC - CF</span></li>
<li><span style="font-size: 18.6667px; color: rgba(0, 0, 0, 1)">注意:<span style="background-color: rgba(204, 255, 255, 1)">影响ZF,PF,SF,CF,OF,AF</span></span></li>
</ul>
<h3><span style="font-size: 18.6667px; color: rgba(0, 0, 0, 1)">7. NEG 指令</span></h3>
<ul>
<li><span style="font-size: 18.6667px; color: rgba(0, 0, 0, 1)">描述:求某个数的补码</span></li>
<li><span style="font-size: 18.6667px; color: rgba(0, 0, 0, 1)">格式:NEG DST</span></li>
<li><span style="font-size: 18.6667px; color: rgba(0, 0, 0, 1)">功能:<span style="color: rgba(255, 102, 0, 1)">单操作数</span>,将DST求补,各位数取反然后加一,也可以理解为零减去DST(不带借位)</span></li>
<li><span style="font-size: 18.6667px; color: rgba(0, 0, 0, 1)">注意:<span style="background-color: rgba(204, 255, 255, 1)">影响ZF,PF,SF,CF,OF,AF</span></span></li>
</ul>
<h3><span style="font-size: 18.6667px; color: rgba(0, 0, 0, 1)">8. CMP 指令</span></h3>
<ul>
<li><span style="font-size: 18.6667px; color: rgba(0, 0, 0, 1)">描述:比较两个数的大小</span></li>
<li><span style="font-size: 18.6667px; color: rgba(0, 0, 0, 1)">格式:CMP DST,SRC</span></li>
<li><span style="font-size: 18.6667px; color: rgba(0, 0, 0, 1)">功能:<span style="color: rgba(255, 102, 0, 1)">双操作数</span>,比较DST,SRC的大小,结果通过FR展示,实际上进行的是DST - SRC的操作,但是不保存结果</span></li>
<li><span style="font-size: 18.6667px; color: rgba(0, 0, 0, 1)">注意:<span style="background-color: rgba(204, 255, 255, 1)">影响ZF,PF,SF,CF,OF,AF</span></span></li>
</ul>
<h3><span style="font-size: 18.6667px; color: rgba(0, 0, 0, 1)">9. MUL 指令</span></h3>
<ul>
<li><span style="font-size: 18.6667px; color: rgba(0, 0, 0, 1)">描述:无符号数乘法</span></li>
<li><span style="font-size: 18.6667px; color: rgba(0, 0, 0, 1)">格式:MUL SRC</span></li>
<li><span style="color: rgba(0, 0, 0, 1)"><span style="font-size: 18.6667px">功能:<span style="color: rgba(255, 102, 0, 1)">单操作数</span></span></span></li>
<ul>
<li><span style="font-size: 18.6667px">对字节操作:AX = ( AL ) * SRC</span></li>
<li><span style="font-size: 18.6667px">对字操作:( DX,AX ) = AX * SRC</span></li>
<li><span style="font-size: 18.6667px">对双字操作:( EDX,EAX ) = ( EDX ) * SRC</span></li>
</ul>
<li><span style="font-size: 18.6667px">注意:</span></li>
<ul>
<li><span style="font-size: 18.6667px; color: rgba(0, 0, 0, 1)">隐含了AX为一个默认的操作数</span></li>
<li><span style="font-size: 18.6667px; background-color: rgba(204, 255, 255, 1); color: rgba(0, 0, 0, 1)">若乘积的高半部分不为零时,则将CF,OF置为 ‘1’,否则置为 ‘0’ 。无符号数的乘法AF,PF,SF,ZF没有定义,因为没有符号</span></li>
</ul>
</ul>
<h3><span style="font-size: 18.6667px; color: rgba(0, 0, 0, 1)">10. IMUL 指令</span></h3>
<ul>
<li><span style="font-size: 18.6667px; color: rgba(0, 0, 0, 1)">描述:有符号数乘法</span></li>
<li><span style="font-size: 18.6667px; color: rgba(0, 0, 0, 1)">格式:IMUL SRC</span></li>
<li><span style="font-size: 18.6667px; color: rgba(0, 0, 0, 1)">功能:<span style="color: rgba(255, 102, 0, 1)">单操作数</span></span>
<ul>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">对字节操作:AX = ( AL ) * SRC</span></li>
<li><span style="font-size: 14pt">对字操作:( DX,AX ) = AX * SRC</span></li>
<li><span style="font-size: 14pt">对双字操作:( EDX,EAX ) = ( EDX ) * SRC</span></li>
</ul>
</li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">注意:</span>
<ul>
<li><span style="font-size: 14pt">隐含了AX为一个默认的操作数</span></li>
<li><span style="font-size: 14pt; background-color: rgba(204, 255, 255, 1)">若乘积的高半部分不为零时,则将CF,OF置为 ‘1’,否则置为 ‘0’ 。无符号数的乘法AF,PF,SF,ZF没有定义,因为没有符号</span></li>
</ul>
</li>
</ul>
<h3><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">11. DIV 指令</span></h3>
<ul>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">描述:无符号数除法</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">格式:DIV SRC</span></li>
<li><span style="color: rgba(0, 0, 0, 1)"><span style="font-size: 14pt">功能:<span style="color: rgba(255, 102, 0, 1)">单操作数</span></span></span></li>
<ul>
<li><span style="font-size: 14pt">对字节操作:AH = AX / SRC的余数,AL = AX / SRC 的商</span></li>
<li><span style="font-size: 14pt">对字操作:DX = ( DX,AX ) / SRC的余数,AX = ( DX,AX ) / SRC 的商</span></li>
<li><span style="font-size: 14pt">对双字操作:EDX = ( EDX,EAX ) / SRC 的余数,EAX = ( EDX,EAX ) / SRC 的商</span></li>
</ul>
<li><span style="font-size: 18.6667px">注意:<span style="background-color: rgba(204, 255, 255, 1)">对于除法而言没有有效的标志位</span></span></li>
</ul>
<h3><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">12. IDIV 指令</span></h3>
<ul>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">描述:有符号数除法</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">格式:IDIV SRC</span></li>
<li><span style="color: rgba(0, 0, 0, 1)"><span style="font-size: 14pt">功能:<span style="color: rgba(255, 102, 0, 1)">单操作数</span></span></span>
<ul>
<li><span style="font-size: 14pt">对字节操作:AH = AX / SRC的余数,AL = AX / SRC 的商</span></li>
<li><span style="font-size: 14pt">对字操作:DX = ( DX,AX ) / SRC的余数,AX = ( DX,AX ) / SRC 的商</span></li>
<li><span style="font-size: 14pt">对双字操作:EDX = ( EDX,EAX ) / SRC 的余数,EAX = ( EDX,EAX ) / SRC 的商</span></li>
</ul>
</li>
<li><span style="font-size: 14pt">注意:对于除法而言没有有效的标志位,但是可以产生溢出</span></li>
</ul>
<h3><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">13. CBW 指令</span></h3>
<ul>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">描述:字节扩展为字,有符号扩展</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">格式:CBW</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">功能:<span style="color: rgba(255, 102, 0, 1)">零操作数</span>,将AL保持原值(有符号数)扩展到AX</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">注意:</span>
<ul>
<li><span style="font-size: 14pt">这里隐含的是将AL作为操作数</span></li>
<li><span style="font-size: 14pt">因为扩展的默认位有符号数,这里是将符号位向高半部扩展</span></li>
</ul>
</li>
</ul>
<h3><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">14. CWD 指令</span></h3>
<ul>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">描述:字扩展位双字,有符号扩展</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">格式:CWD</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">功能:<span style="color: rgba(255, 102, 0, 1)">零操作数</span>,将AX的保持原值(有符号数)扩展到 ( DX,AX )</span></li>
<li><span style="font-size: 18.6667px; color: rgba(0, 0, 0, 1)">注意:</span>
<ul>
<li><span style="font-size: 18.6667px">这里隐含的是将AX作为操作数</span></li>
<li><span style="font-size: 18.6667px">因为扩展默认位有符号数,这里是将符号位向高半部扩展</span></li>
</ul>
</li>
</ul>
<h2> </h2>
<h2><span style="font-size: 18pt; color: rgba(0, 0, 0, 1)">逻辑运算指令:</span></h2>
<h3><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">1.AND 指令</span></h3>
<ul>
<li><span style="font-size: 18.6667px; color: rgba(0, 0, 0, 1)">描述:按位“与”逻辑运算</span></li>
<li><span style="font-size: 18.6667px; color: rgba(0, 0, 0, 1)">格式: AND DST,SRC</span></li>
<li><span style="font-size: 18.6667px; color: rgba(0, 0, 0, 1)">功能:<span style="color: rgba(255, 102, 0, 1)">双操作数</span>,DST = DST and SRC</span></li>
<li><span style="font-size: 18.6667px; color: rgba(0, 0, 0, 1)">注意:<span style="background-color: rgba(204, 255, 255, 1)">OF = 0,CF = 0,AF不定,SF,ZF,PF根据逻辑运算的结果而定</span></span></li>
</ul>
<h3><span style="font-size: 18.6667px; color: rgba(0, 0, 0, 1)">2. OR 指令</span></h3>
<ul>
<li><span style="font-size: 18.6667px; color: rgba(0, 0, 0, 1)">描述:按位“或”逻辑运算</span></li>
<li><span style="font-size: 18.6667px; color: rgba(0, 0, 0, 1)">格式:OR DST,SRC</span></li>
<li><span style="font-size: 18.6667px; color: rgba(0, 0, 0, 1)">功能:<span style="color: rgba(255, 102, 0, 1)">双操作数</span>,DST = DST or SRC</span></li>
<li><span style="font-size: 18.6667px; color: rgba(0, 0, 0, 1)">注意:<span style="font-size: 14pt; background-color: rgba(204, 255, 255, 1)">OF = 0,CF = 0,AF不定,SF,ZF,PF根据逻辑运算的结果而定</span></span></li>
</ul>
<h3><span style="font-size: 18.6667px; color: rgba(0, 0, 0, 1)"><span style="font-size: 14pt">3. NOT 指令</span></span></h3>
<ul>
<li><span style="font-size: 18.6667px; color: rgba(0, 0, 0, 1)"><span style="font-size: 14pt">描述:按位:“非”逻辑运算</span></span></li>
<li><span style="font-size: 18.6667px; color: rgba(0, 0, 0, 1)"><span style="font-size: 14pt">格式:NOT DST</span></span></li>
<li><span style="font-size: 18.6667px; color: rgba(0, 0, 0, 1)"><span style="font-size: 14pt">功能:<span style="color: rgba(255, 102, 0, 1)">单操作数</span>,DST = not DST</span></span></li>
<li><span style="font-size: 18.6667px; color: rgba(0, 0, 0, 1)"><span style="font-size: 14pt">注意:影响标志位无</span></span></li>
</ul>
<h3><span style="font-size: 18.6667px; color: rgba(0, 0, 0, 1)"><span style="font-size: 14pt">4. TEST 指令</span></span></h3>
<ul>
<li><span style="font-size: 18.6667px; color: rgba(0, 0, 0, 1)"><span style="font-size: 14pt">描述:用于测试某一二进制位的值</span></span></li>
<li><span style="font-size: 18.6667px; color: rgba(0, 0, 0, 1)"><span style="font-size: 14pt">格式:TEST DST,SRC</span></span></li>
<li><span style="font-size: 18.6667px; color: rgba(0, 0, 0, 1)"><span style="font-size: 14pt">功能:<span style="color: rgba(255, 102, 0, 1)">双操作数</span>,实际上是对DST,SRC进行“与”逻辑运算,但是不保留运算结果,测试结果在PSW中可以看出</span></span></li>
<li><span style="font-size: 18.6667px; color: rgba(0, 0, 0, 1)"><span style="font-size: 14pt">注意:<span style="background-color: rgba(204, 255, 255, 1)">OF = 0,CF = 0,AF不定,SF,ZF,PF根据逻辑运算的结果而定</span></span></span></li>
</ul>
<h3><span style="font-size: 18.6667px; color: rgba(0, 0, 0, 1)"><span style="font-size: 14pt">5. XOR 指令</span></span></h3>
<ul>
<li><span style="font-size: 18.6667px"><span style="font-size: 14pt">描述:按位“异或”逻辑运算</span></span></li>
<li><span style="font-size: 18.6667px"><span style="font-size: 14pt">格式:XOR DST,SRC</span></span></li>
<li><span style="font-size: 18.6667px"><span style="font-size: 14pt">功能:<span style="color: rgba(255, 102, 0, 1)">双操作数</span>,DST = DST ⊕ SRC</span></span></li>
<li><span style="font-size: 18.6667px"><span style="font-size: 14pt">注意:<span style="background-color: rgba(204, 255, 255, 1)">OF = 0,CF = 0,AF不定,SF,ZF,PF根据逻辑运算的结果而定</span></span></span></li>
</ul>
<h3><span style="font-size: 18.6667px"><span style="font-size: 14pt">6. SHL 指令、SAL 指令</span></span></h3>
<ul>
<li><span style="font-size: 18.6667px"><span style="font-size: 14pt">描述:逻辑左移,算术左移</span></span></li>
<li><span style="font-size: 18.6667px"><span style="font-size: 14pt">格式:SHL DST,1 或 CL(SAL DST,1 或 CL)</span></span></li>
<li><span style="font-size: 18.6667px"><span style="font-size: 14pt">功能:<span style="color: rgba(255, 102, 0, 1)">双操作数</span>,将DST的内容左移1位或CL位,并将结果保存在DST中</span></span></li>
<li><span style="font-size: 18.6667px"><span style="font-size: 14pt">注意:</span></span>
<ul>
<li><span style="font-size: 18.6667px"><span style="font-size: 14pt">左移后低位(右端)补上响应位数的0,左移没有符号问题,所以逻辑左移和算术左移在结果上是一样的</span></span></li>
<li><span style="font-size: 18.6667px; background-color: rgba(204, 255, 255, 1)"><span style="font-size: 14pt">CF中始终存放最后被移出的数,AF不定,SF,ZF,PF依据结果而定,OF只在一位左移时有意义</span></span></li>
</ul>
</li>
</ul>
<h3><span style="font-size: 18.6667px"><span style="font-size: 14pt">7. SHR 指令</span></span></h3>
<ul>
<li><span style="font-size: 18.6667px"><span style="font-size: 14pt">描述:逻辑右移</span></span></li>
<li><span style="font-size: 18.6667px"><span style="font-size: 14pt">格式:SHR DST,1 或 CL</span></span></li>
<li><span style="font-size: 18.6667px"><span style="font-size: 14pt">功能:<span style="color: rgba(255, 102, 0, 1)">双操作数</span>,将DST逻辑右移1或CL位的结果保存在DST中</span></span></li>
<li><span style="font-size: 18.6667px"><span style="font-size: 14pt">注意:</span></span>
<ul>
<li><span style="font-size: 18.6667px"><span style="font-size: 14pt">逻辑右移在最高位上直接补0</span></span></li>
<li><span style="font-size: 18.6667px; background-color: rgba(204, 255, 255, 1)"><span style="font-size: 14pt">CF始终保存最后被移出的值,AF不定,SF,ZF,PF依据结果而定,OF只在一位右移时有意义</span></span></li>
</ul>
</li>
</ul>
<h3><span style="font-size: 18.6667px"><span style="font-size: 14pt">8. SAR 指令</span></span></h3>
<ul>
<li><span style="font-size: 18.6667px"><span style="font-size: 14pt">描述:算术右移</span></span></li>
<li><span style="font-size: 18.6667px"><span style="font-size: 14pt">格式:SAR DST,1 或 CL</span></span></li>
<li><span style="font-size: 18.6667px"><span style="font-size: 14pt">功能:<span style="color: rgba(255, 102, 0, 1)">双操作数</span>,将DST算术右移1或CL位的结果保存在DST中</span></span></li>
<li><span style="font-size: 18.6667px"><span style="font-size: 14pt">注意:</span></span>
<ul>
<li><span style="font-size: 18.6667px"><span style="font-size: 14pt">算术右移在最高位补的是符号位,也就是右移前最高位的值</span></span></li>
<li><span style="font-size: 18.6667px; background-color: rgba(204, 255, 255, 1)"><span style="font-size: 14pt">CF始终保存最后被移出的值,AF不定,SF,ZF,PF依据结果而定,OF只在一位右移时有意义</span></span></li>
</ul>
</li>
</ul>
<h3><span style="font-size: 18.6667px"><span style="font-size: 14pt">9. ROL 指令</span></span></h3>
<ul>
<li><span style="font-size: 18.6667px"><span style="font-size: 14pt">描述:循环左移</span></span></li>
<li><span style="font-size: 18.6667px"><span style="font-size: 14pt">格式:ROL DST,1 或 CL</span></span></li>
<li><span style="font-size: 18.6667px"><span style="font-size: 14pt">功能:<span style="color: rgba(255, 102, 0, 1)">双操作数</span>,循环左移,即最高位移向最低位</span></span></li>
<li><span style="font-size: 18.6667px"><span style="font-size: 14pt">注意:<span style="background-color: rgba(204, 255, 255, 1)">最高位移向最低为的同时也会赋值给CF</span></span></span></li>
</ul>
<h3><span style="font-size: 18.6667px"><span style="font-size: 14pt">10. ROR 指令</span></span></h3>
<ul>
<li><span style="font-size: 18.6667px"><span style="font-size: 14pt">描述:循环右移</span></span></li>
<li><span style="font-size: 18.6667px"><span style="font-size: 14pt">格式:ROR DST,1 或 CL</span></span></li>
<li><span style="font-size: 18.6667px"><span style="font-size: 14pt">功能:<span style="color: rgba(255, 102, 0, 1)">双操作数</span>,循环右移,即最低位移向最高位</span></span></li>
<li><span style="font-size: 18.6667px"><span style="font-size: 14pt">注意:<span style="background-color: rgba(204, 255, 255, 1)">最低位移向最高位的同时也会赋值给CF</span></span></span></li>
</ul>
<h3><span style="font-size: 18.6667px"><span style="font-size: 14pt">11. RCL 指令</span></span></h3>
<ul>
<li><span style="font-size: 18.6667px"><span style="font-size: 14pt">描述:带进位的循环左移</span></span></li>
<li><span style="font-size: 18.6667px"><span style="font-size: 14pt">格式:RCL DST,1或 CL</span></span></li>
<li><span style="font-size: 18.6667px"><span style="font-size: 14pt">功能:<span style="color: rgba(255, 102, 0, 1)">双操作数</span>,带进位的循环左移,即对 DST + CF 进行循环左移</span></span></li>
<li><span style="font-size: 18.6667px"><span style="font-size: 14pt">注意:<span style="background-color: rgba(204, 255, 255, 1)">会改变CF的值</span></span></span></li>
</ul>
<h3><span style="font-size: 18.6667px"><span style="font-size: 14pt">12. RCR 指令</span></span></h3>
<ul>
<li><span style="font-size: 18.6667px"><span style="font-size: 14pt">描述:带进位的循环右移</span></span></li>
<li><span style="font-size: 18.6667px"><span style="font-size: 14pt">格式:RCR DST,1 或 CL</span></span></li>
<li><span style="font-size: 18.6667px"><span style="font-size: 14pt">功能:<span style="color: rgba(255, 102, 0, 1)">双操作数</span>,带进位的循环右移,即对 CF + DST 进行循环右移</span></span></li>
<li><span style="font-size: 18.6667px">注意:<span style="background-color: rgba(204, 255, 255, 1)">会改变CF的值</span></span></li>
</ul>
<p> </p>
<h2><span style="font-size: 18pt">串操作指令:</span></h2>
<p><span style="font-size: 18pt">注意:当方向标志位DF = 0时,DI目的变址寄存器,SI源变址寄存器 +,方向标志位DF = 1时,DI目的变址寄存器,SI源变址寄存器 -。</span></p>
<h3><span style="font-size: 18pt"><span style="font-size: 14pt">1. MOVS 指令</span></span></h3>
<ul>
<li><span style="font-size: 14pt">描述:串传输</span></li>
<li><span style="font-size: 14pt">格式:</span>
<ul>
<li><span style="font-size: 14pt">i. MOVSB(字节)</span></li>
<li><span style="font-size: 14pt">ii. MOVSW(字)</span></li>
<li><span style="font-size: 14pt">iii. MOVSD(双字)</span></li>
</ul>
</li>
<li><span style="font-size: 14pt">功能:<span style="color: rgba(255, 102, 0, 1)">零操作数</span>,[ ES:DI ] = [ DS:SI ],根据传输的类型,分别将SI,DI 改变1,2,4</span></li>
</ul>
<h3><span style="font-size: 14pt">2. CMPS 指令</span></h3>
<ul>
<li><span style="font-size: 14pt">描述:串比较</span></li>
<li><span style="font-size: 14pt">格式:</span>
<ul>
<li><span style="font-size: 14pt">i. CMPSB(字节)</span></li>
<li><span style="font-size: 14pt">ii. CMPSW(字)</span></li>
</ul>
</li>
<li><span style="font-size: 18.6667px">功能:<span style="color: rgba(255, 102, 0, 1)">零操作数</span>,[ ES:DI ] - [ DS:SI ],根据比较类型,分别将SI,DI改变1,2,4</span></li>
<li><span style="font-size: 18.6667px">注意:</span>
<ul>
<li><span style="font-size: 18.6667px">串中每一个元素的比较都会改变所有标志位的值,所以串的比较通常需要和条件分支连用才有意义,否则显示的就是串的最后一个的比较值</span></li>
<li><span style="font-size: 18.6667px">比较不会保存减法的值,但会改变标志位</span></li>
</ul>
</li>
</ul>
<h3><span style="font-size: 18.6667px">3. LODS 指令</span></h3>
<ul>
<li><span style="font-size: 18.6667px">描述:从源串中取数到 AX</span></li>
<li><span style="font-size: 18.6667px">格式:</span>
<ul>
<li><span style="font-size: 18.6667px">LODSB(字节)</span></li>
<li><span style="font-size: 18.6667px">LODSW(字)</span></li>
<li><span style="font-size: 18.6667px">LODSD(双字)</span></li>
</ul>
</li>
<li><span style="font-size: 18.6667px">功能:<span style="color: rgba(255, 102, 0, 1)">零操作数</span>:AL / AX / EAX = [ DS:SI ],根据取数的类型,分别将SI改变1,2,4</span></li>
</ul>
<h3><span style="font-size: 14pt">4. STOS 指令</span></h3>
<ul>
<li><span style="font-size: 14pt">描述:将AX中的值传输给目的串</span></li>
<li><span style="font-size: 14pt">格式:</span>
<ul>
<li><span style="font-size: 14pt">STOSB(字节)</span></li>
<li><span style="font-size: 14pt">STOSW(字)</span></li>
<li><span style="font-size: 14pt">STOSD(双字)</span></li>
</ul>
</li>
<li><span style="font-size: 14pt">功能:<span style="color: rgba(255, 102, 0, 1)">零操作数</span>:[ DS:DI ] = AL / AX / EAX ,根据取数的类型,分别将DI改变1,2,4</span></li>
</ul>
<h3><span style="font-size: 14pt">5. SCAS 指令</span></h3>
<ul>
<li><span style="font-size: 18.6667px">描述:在目的串中查找是否有AX中的内容</span></li>
<li><span style="font-size: 18.6667px">格式:</span>
<ul>
<li><span style="font-size: 18.6667px">SCASB(字节)</span></li>
<li><span style="font-size: 18.6667px">SCASW(字)</span></li>
<li><span style="font-size: 18.6667px">SCASD(双字)</span></li>
</ul>
</li>
<li><span style="font-size: 18.6667px">功能:<span style="color: rgba(255, 102, 0, 1)">零操作数</span>,实际上是用 AL / AX / EAX - [ DS:DI ] 对标志位的影响来判断查找结果,但是不保存减法的结果</span></li>
</ul>
<h3><span style="font-size: 18.6667px">6. 重复前缀指令</span></h3>
<ul>
<li><span style="font-size: 18.6667px">指令:</span>
<ul>
<li><span style="font-size: 18.6667px">a. REP 指令</span></li>
<li><span style="font-size: 18.6667px">b. REPZ / REPE 指令</span></li>
<li><span style="font-size: 18.6667px">c. REPNZ / REPNE 指令</span></li>
</ul>
</li>
<li><span style="font-size: 18.6667px">描述:a. 一般用于MOVS、STOS、LODS前,b. c.一般用于SCAS、CMPS前,用于控制串操作的循环进行</span></li>
<li><span style="font-size: 18.6667px">格式:加在传操作指令的前面</span></li>
<li><span style="font-size: 18.6667px">功能:</span>
<ul>
<li><span style="font-size: 18.6667px">a. 每进行一次串操作指令,( CX ) - 1,直到( CX ) = 0,重复执行才会结束</span></li>
<li><span style="font-size: 18.6667px">b. 每进行一次串操作指令,( CX ) - 1,直到( CX ) = 0 或 ZF = 0,重复执行才会结束,到不为零时停止</span></li>
<li><span style="font-size: 18.6667px">c. 每进行一次串操作指令,( CX ) - 1,直到( CX ) = 0 或 ZF = 1,重复执行才会结束,到为零时停止</span></li>
</ul>
</li>
</ul>
<p> </p>
<h2><span style="font-size: 18pt">无条件控制转移指令</span></h2>
<h3><span style="font-size: 14pt">1. JMP 指令</span></h3>
<ul>
<li><span style="font-size: 14pt">描述:无条件跳转指令</span></li>
<li><span style="font-size: 14pt">格式:JMP ADDRESS</span></li>
<li><span style="font-size: 14pt">功能:无条件跳转到ADDRESS的位置上继续执行</span></li>
</ul>
<h2> </h2>
<h2><span style="font-size: 18pt">条件控制转移指令</span></h2>
<p><span style="font-size: 18pt; background-color: rgba(255, 204, 153, 1)">条件控制转移指令在使用前,一定要有改变FR状态标志位的相关指令操作,FR是判断是否进行条件转移的标志</span></p>
<p><span style="font-size: 18pt">单控制位转移:</span></p>
<h3><span style="font-size: 14pt">1. JZ 指令</span></h3>
<ul>
<li><span style="font-size: 18.6667px">描述:标志条件为零时转移</span></li>
<li><span style="font-size: 18.6667px">格式:JZ ADDRESS</span></li>
<li><span style="font-size: 18.6667px">功能:ZF = 1时,跳转至ADDRESS继续执行,否则这条指令无效,继续顺序执行;<span style="background-color: rgba(204, 255, 204, 1)">ADDRESS通常是伪指令中的标号</span></span></li>
</ul>
<h3><span style="font-size: 18.6667px">2. JNZ 指令</span></h3>
<ul>
<li><span style="font-size: 18.6667px">描述:标志条件不为零时转移</span></li>
<li><span style="font-size: 18.6667px">格式:JNZ ADDRESS</span></li>
<li><span style="font-size: 18.6667px">功能:ZF = 0时,跳转至ADDRESS继续执行,否则这条指令无效,继续顺序执行</span></li>
</ul>
<h3><span style="font-size: 18.6667px">3. JC 指令</span></h3>
<ul>
<li><span style="font-size: 18.6667px">描述:有进借位时转移</span></li>
<li><span style="font-size: 18.6667px">格式:JC ADDRESS</span></li>
<li><span style="font-size: 18.6667px">功能:CF = 1时,跳转至ADDRESS继续执行,否则这条指令无效,继续顺序执行</span></li>
</ul>
<h3><span style="font-size: 18.6667px">4 JNC 指令</span></h3>
<ul>
<li><span style="font-size: 18.6667px">描述:无进借位时跳转</span></li>
<li><span style="font-size: 18.6667px">格式:JNC ADDRESS</span></li>
<li><span style="font-size: 18.6667px">功能:CF = 0时,跳转至ADDRESS继续执行,否则这条指令无效,继续顺序执行</span></li>
</ul>
<h3><span style="font-size: 18.6667px">5. JO 指令</span></h3>
<ul>
<li><span style="font-size: 18.6667px">描述:有溢出时跳转</span></li>
<li><span style="font-size: 18.6667px">格式:JO ADDRESS</span></li>
<li><span style="font-size: 18.6667px">功能:OF = 1时,跳转至ADDRESS继续执行,否则这条指令无效,继续顺序执行</span></li>
</ul>
<h3><span style="font-size: 18.6667px">6. JNO 指令</span></h3>
<ul>
<li><span style="font-size: 18.6667px">描述:没有溢出时跳转</span></li>
<li><span style="font-size: 18.6667px">格式:JNO ADDRESS</span></li>
<li><span style="font-size: 18.6667px">功能:OF = 0时,跳转至ADDRESS继续执行,否则这条指令无效,继续顺序执行</span></li>
</ul>
<h3><span style="font-size: 18.6667px">7. JS 指令</span></h3>
<ul>
<li><span style="font-size: 18.6667px">描述:为负数时跳转</span></li>
<li><span style="font-size: 18.6667px">格式:JS ADDRESS</span></li>
<li><span style="font-size: 18.6667px">功能:SF = 1时,跳转至ADDRESS继续执行,否则这条指令无效,继续顺序执行</span></li>
</ul>
<h3><span style="font-size: 18.6667px">8. JNS 指令</span></h3>
<ul>
<li><span style="font-size: 18.6667px">描述:不为负数时跳转</span></li>
<li><span style="font-size: 18.6667px">格式:JNS ADDRESS</span></li>
<li><span style="font-size: 18.6667px">功能:SF = 0时,跳转至ADDRESS继续执行,否则这条指令无效,继续顺序执行</span></li>
</ul>
<h3><span style="font-size: 18.6667px">9. JP 指令</span></h3>
<ul>
<li><span style="font-size: 18.6667px">描述:为偶数时跳转</span></li>
<li><span style="font-size: 18.6667px">格式:JP ADDRESS</span></li>
<li><span style="font-size: 18.6667px">功能:PF = 1时,跳转至ADDRESS继续执行,否则这条指令无效,继续顺序执行</span></li>
</ul>
<h3><span style="font-size: 18.6667px">10. JNP 指令</span></h3>
<ul>
<li><span style="font-size: 18.6667px">描述:不为偶数时跳转</span></li>
<li><span style="font-size: 18.6667px">格式:JNP ADDRESS</span></li>
<li><span style="font-size: 18.6667px">功能:PF = 0时,跳转至ADDRESS继续执行,否则这条指令无效,继续顺序执行</span></li>
</ul>
<p><span style="font-size: 18pt">双控制位转移:</span></p>
<p><span style="font-size: 18pt">常用于使用CMP指令之后,<span style="background-color: rgba(204, 255, 204, 1)">其中#N = 不等于,#A = 无符号数大于,#B = 无符号数小于,#E = 等于,#G = 有符号数大于,#L = 有符号数小于</span></span></p>
<h3><span style="font-size: 14pt">11. JA / JNBE 指令</span></h3>
<ul>
<li><span style="font-size: 14pt">描述:无符号数大于 或 不小于且不等于转移</span></li>
<li><span style="font-size: 14pt">格式:JA / JNBE ADDRESS</span></li>
<li><span style="font-size: 14pt">功能:CF = 0 且 ZF = 0,跳转至ADDRESS继续执行,否则这条指令无效,继续顺序执行</span></li>
</ul>
<h3><span style="font-size: 14pt">12. JG / JNLE 指令</span></h3>
<ul>
<li><span style="font-size: 14pt">描述:有符号数大于 或 不小于且不等于转移</span></li>
<li><span style="font-size: 14pt">格式:JG / JNLE ADDRESS</span></li>
<li><span style="font-size: 14pt">功能:CF = 0 且 ZF = 0,跳转至ADDRESS继续执行,否则这条指令无效,继续顺序执行</span></li>
</ul>
<h3><span style="font-size: 14pt">13. JAE / JNB 指令</span></h3>
<h3><span style="font-size: 14pt">14. JGE / JNL 指令</span></h3>
<h3><span style="font-size: 14pt">15. JB / JNAE 指令</span></h3>
<h3><span style="font-size: 14pt">16. JL / JNGE 指令</span></h3>
<h3><span style="font-size: 14pt">17. JBE / JNA 指令</span></h3>
<h3><span style="font-size: 14pt">18. JLE / JNG 指令</span></h3>
<h3><span style="font-size: 14pt">19. JCXZ指令</span></h3>
<ul>
<li><span style="font-size: 14pt">描述:当 CX = 0时跳转</span></li>
<li><span style="font-size: 14pt">格式:JCXZ ADDRESS</span></li>
<li><span style="font-size: 14pt">功能:当 CX = 0时,跳转至ADDRESS继续执行,否则这条指令无效,继续顺序执行</span></li>
</ul>
<h2> </h2>
<h2><span style="font-size: 18pt; color: rgba(0, 0, 0, 1)">循环指令:</span></h2>
<h3><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">1. LOOP指令</span></h3>
<ul>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">描述:根据标志位和CX的值决定是否要进行循环转移</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">格式:LOOP 标号</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">功能:当 CX - 1 ≠ 0 时,进行循环转移,否则,退出循环,顺序执行</span></li>
</ul>
<h3><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">2. LOOPE / LOOPZ 指令</span></h3>
<ul>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">描述:相等 / 为零循环转移</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">格式:LOOPE / LOOPZ 标号</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">功能:当 CX - 1 ≠ 0 且 ZF = 1时,进行循环转移,否则,退出循环,顺序执行</span></li>
</ul>
<h2> </h2>
<h2><span style="font-size: 18pt; color: rgba(0, 0, 0, 1)">子程序调用指令:</span></h2>
<h3><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">1. CALL 指令</span></h3>
<ul>
<li><span style="font-size: 18.6667px; color: rgba(0, 0, 0, 1)">描述:子程序调用</span></li>
<li><span style="font-size: 18.6667px; color: rgba(0, 0, 0, 1)">格式:</span>
<ul>
<li><span style="font-size: 18.6667px; color: rgba(0, 0, 0, 1)">i. CALL EX / ( NEAR PTR EX ) 短程调用</span></li>
<li><span style="font-size: 18.6667px; color: rgba(0, 0, 0, 1)">ii. CALL FAR PTR EX 长调用</span></li>
</ul>
</li>
<li><span style="font-size: 18.6667px; color: rgba(0, 0, 0, 1)">功能:</span>
<ul>
<li><span style="font-size: 18.6667px; color: rgba(0, 0, 0, 1)">i. 将IP(返回地址)保存,进栈,并无条件的转向子程序进行调用</span></li>
<li><span style="font-size: 18.6667px; color: rgba(0, 0, 0, 1)">ii. 将CS,IP保存,进栈,并无条件的转向子程序的运行调用</span></li>
</ul>
</li>
</ul>
<h3><span style="font-size: 18.6667px; color: rgba(0, 0, 0, 1)">2. RET 指令</span></h3>
<ul>
<li><span style="font-size: 18.6667px; color: rgba(0, 0, 0, 1)">描述:子程序调用返回</span></li>
<li><span style="font-size: 18.6667px; color: rgba(0, 0, 0, 1)">格式:RET num ( 一般为偶数 )</span></li>
<li><span style="font-size: 18.6667px; color: rgba(0, 0, 0, 1)">功能:</span>
<ul>
<li><span style="font-size: 18.6667px; color: rgba(0, 0, 0, 1)">把由CALL压入堆栈内容弹出给IP,然后执行这条指令</span></li>
<li><span style="font-size: 18.6667px; color: rgba(0, 0, 0, 1)">将SP向高字节移动num位,这样就可以把执行CALL指令前压入堆栈的参数弹出作废,避免一些过时参数占用栈空间</span></li>
</ul>
</li>
</ul>
<h2><span style="font-size: 18.6667px; color: rgba(0, 0, 0, 1)"><span style="font-size: 18pt">中断指令:</span></span></h2>
<h3><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">1. INT 指令</span></h3>
<ul>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">描述:中断处理</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">格式:INT n ( 中断程序的入口地址 )</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">功能:将FR压入堆栈,并将IF,TF赋0;将CS压入堆栈,并将(4*n + 2)赋值给CS;将IP压入堆栈,并将(4*n)赋值给IP</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">注意:<span style="background-color: rgba(204, 255, 255, 1)">影响标志位,IF = TF = 0</span></span></li>
</ul>
<h3><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">2. IRET 指令</span></h3>
<ul>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">描述:中断返回</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">格式:IRET</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">功能:分别将IP,CS,FR存在堆栈中的内容出栈</span></li>
<li><span style="font-size: 14pt; color: rgba(0, 0, 0, 1)">注意:<span style="background-color: rgba(204, 255, 255, 1)">这条指令可能会影响所有的标志位</span></span></li>
</ul>
<h2> </h2>
<h2><span style="font-size: 18pt">空操作指令:</span></h2>
<h3><span style="font-size: 14pt">NOP 指令</span></h3>
<h2> </h2>
<h2><span style="font-size: 18pt">标志修改指令:</span></h2>
<p><span style="font-size: 18pt">#CL = clean(置零),#ST = set(置一),#CM = complement(取反)</span></p>
<p><span style="font-size: 18pt">CF 进位标志,DF 方向标志,IF 中断允许标志</span></p>
<p><span style="font-size: 14pt">1. CLC 指令</span></p>
<p><span style="font-size: 14pt">2. STC 指令</span></p>
<p><span style="font-size: 14pt">3. CMC 指令</span></p>
<p><span style="font-size: 14pt">4. CLD 指令</span></p>
<p><span style="font-size: 14pt">5. STD 指令</span></p>
<p><span style="font-size: 14pt">6. CLI 指令</span></p>
<p><span style="font-size: 14pt">7. STI 指令</span></p>
<p> </p><br><br>
来源:https://www.cnblogs.com/Tatsukyou/p/17489413.html
頁:
[1]