📅  最后修改于: 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-用于从中断服务返回到主程序