📜  微处理器-8086指令集

📅  最后修改于: 2020-12-13 15:29:46             🧑  作者: Mango


8086微处理器支持8种类型的指令-

  • 数据传输说明
  • 算术指令
  • 位操作说明
  • 字符串指令
  • 程序执行转移指令(分支和循环指令)
  • 处理器控制指令
  • 迭代控制指令
  • 中断指令

现在让我们详细讨论这些指令集。

数据传输说明

这些指令用于将数据从源操作数传输到目标操作数。以下是该组下的说明列表-

单词转移指令

  • MOV-用于将字节或字从提供的源复制到提供的目的地。

  • PPUSH-用于在堆栈顶部放置一个单词。

  • POP-用于将单词从堆栈顶部移至提供的位置。

  • PUSHA-用于将所有寄存器放入堆栈。

  • POPA-用于将字从堆栈传送到所有寄存器。

  • XCHG-用于交换来自两个位置的数据。

  • XLAT-用于使用存储器中的表转换AL中的字节。

输入和输出端口传输说明

  • IN-用于从提供的端口向累加器读取字节或字。

  • OUT-用于从累加器向提供的端口发送字节或字。

地址转移说明

  • LEA-用于将操作数的地址加载到提供的寄存器中。

  • LDS-用于从存储器加载DS寄存器和其他提供的寄存器

  • LES-用于从存储器加载ES寄存器和其他提供的寄存器。

传送标志寄存器的说明

  • LAHF-用于将标志寄存器的低字节加载到AH。

  • SAHF-用于将AH寄存器存储到标志寄存器的低字节。

  • PUSHF-用于在堆栈顶部复制标志寄存器。

  • POPF-用于将堆栈顶部的一个字复制到标志寄存器。

算术指令

这些指令用于执行算术运算,例如加法,减法,乘法,除法等。

以下是该组下的说明列表-

进行添加的说明

  • ADD-用于将提供的字节添加到字节/字添加到字。

  • ADC-用于加进位。

  • INC-用于将提供的字节/字增加1。

  • AAA-用于在添加后调整ASCII。

  • DAA-用于调整加/减运算后的小数。

减法指令

  • SUB-用于从字中减去字节/字中的字节。

  • SBB-用于执行借位相减。

  • DEC-用于将提供的字节/字减1。

  • NPG-用于否定提供的字节/字的每个位并添加1/2的补码。

  • CMP-用于比较2个提供的字节/字。

  • AAS-用于在减法后调整ASCII码。

  • DAS-用于在减法后调整小数。

执行乘法的指令

  • MUL-用于将无符号字节逐字节/逐字相乘。

  • IMUL-用于将带符号的字节逐字节/逐字相乘。

  • AAM-用于在乘法后调整ASCII码。

进行除法的指示

  • DIV-用于按字节划分无符号字或按字划分无符号双字。

  • IDIV-用于按字节划分有符号的单词或按单词划分有符号的双单词。

  • AAD-用于在除法后调整ASCII码。

  • CBW-用于用低位字节的符号位副本填充单词的高位字节。

  • CWD-用于用低位字的符号位填充双字的高位字。

位操作说明

这些指令用于执行涉及数据位的操作,即逻辑,移位等操作。

以下是该组下的说明列表-

执行逻辑操作的指令

  • NOT-用于反转字节或字的每一位。

  • -用于与其它字节/字的对应位将每一位在一个字节/字。

  • -用于将一个字节/字中的每个位与另一个字节/字中的对应位相乘。

  • XOR-用于对一个字节/字中的每个位与另一个字节/字中的对应位执行或运算。

  • TEST-用于添加操作数以更新标志,而不会影响操作数。

进行换档操作的说明

  • SHL / SAL-用于将字节/字的位向左移动,并在LSB中放入零(S)。

  • SHR-用于将一个字节/字的位向右移,并在MSB中置零。

  • SAR-用于将一个字节/字的位向右移,并将旧的MSB复制到新的MSB中。

旋转操作说明

  • ROL-用于将字节/字的位向左旋转,即MSB到LSB和进位标志[CF]。

  • ROR-用于将字节/字的位向右旋转,即LSB到MSB和进位标志[CF]。

  • RCR-用于将字节/字的位向右旋转,即LSB到CF和CF到MSB。

  • RCL-用于向左旋转字节/字的位,即MSB到CF和CF到LSB。

字符串指令

字符串是一组字节/字,并且它们的内存始终按顺序分配。

以下是该组下的说明列表-

  • REP-用于重复给定指令,直到CX≠0。

  • REPE / REPZ-用于重复给定指令,直到CX = 0或零标志ZF = 1。

  • REPNE / REPNZ-用于重复给定指令,直到CX = 0或零标志ZF = 1。

  • MOVS / MOVSB / MOVSW-用于将字节/字从一个字符串到另一个字符串。

  • COMS / COMPSB / COMPSW-用于比较两个字符串字节/字。

  • INS / INSB / INSW-用作从I / O端口到提供的内存位置的输入字符串/ byte / word。

  • OUTS / OUTSB / OUTSW-用作从提供的内存位置到I / O端口的输出字符串/ byte / word。

  • SCAS / SCASB / SCASW-用于扫描字符串,并将其字节与AL中的字节比较,或将字符串word与AX中的单词进行比较。

  • LODS / LODSB / LODSW-用于将字符串字节存储到AL中或将字符串字存储到AX中。

程序执行转移指令(分支和循环指令)

这些指令用于在执行期间转移/分支指令。它包括以下说明-

在执行过程中无条件转移指令的指令-

  • 调用-用于调用过程并将其返回地址保存到堆栈中。

  • RET-用于从过程返回到主程序。

  • JMP-用于跳转到提供的地址以继续下一条指令。

在某些条件下执行期间转移指令的指令-

  • JA / JNBE-如果高于/不低于/等于指令,则用于跳转。

  • JAE / JNB-如果上方/下方指令满足,则用于跳转。

  • JBE / JNA-如果满足以下/等于/不高于指令,则用于跳转。

  • JC-如果进位标志CF = 1,则用于跳转

  • JE / JZ-等于/零标志ZF = 1时跳转

  • JG / JNLE-如果大于/不小于/等于指令,则用于跳转。

  • JGE / JNL-如果大于/等于/不小于指令满足,则用于跳转。

  • JL / JNGE-如果小于/不大于/等于指令,则用于跳转。

  • JLE / JNG-如果小于/等于/不大于指令,则用于跳转。

  • JNC-如果没有进位标志(CF = 0),则用于跳转

  • JNE / JNZ-如果不相等/零标志ZF = 0,则用于跳转

  • JNO-如果没有溢出标志OF = 0则跳转

  • JNP / JPO-如果不是奇偶校验/奇校验PF = 0,则用于跳转

  • JNS-如果没有符号SF = 0,则用于跳转

  • JO-如果溢出标志OF = 1,则跳转

  • JP / JPE-奇偶校验,PF = 1时用于跳转

  • JS-用于在标志标志SF = 1时跳转

处理器控制指令

这些指令用于通过设置/重置标志值来控制处理器动作。

以下是该组下的说明-

  • STC-用于将进位标志CF设置为1

  • CLC-用于将进位标志CF清除/重置为0

  • CMC-用于将补码置于进位标志CF的状态。

  • STD-用于将方向标记DF设置为1

  • CLD-用于将方向标志DF清除/重置为0

  • STI-用于将中断允许标志设置为1,即使能INTR输入。

  • CLI-用于将中断允许标志清除为0,即禁用INTR输入。

迭代控制指令

这些指令用于执行给定指令多次。以下是该组下的说明列表-

  • LOOP-用于循环一组指令,直到条件满足为止,即CX = 0

  • LOOPE / LOOPZ-用于循环一组指令,直到满足ZF = 1&CX = 0

  • LOOPNE / LOOPNZ-用于循环一组指令,直到满足ZF = 0&CX = 0

  • JCXZ-如果CX = 0则用于跳转到提供的地址

中断指令

这些指令用于在程序执行期间调用中断。

  • INT-用于在执行和指定服务调用期间中断程序。

  • INTO-如果OF = 1,则用于在执行期间中断程序

  • IRET-用于从中断服务返回到主程序