1.数据传送指令(MOV)
MOV OP1 OP2
其中 OP1为目的操作数,可以为通用寄存器,段寄存器,存储器
OP2为源操作数,可以为通用寄存器,存储器,立即数
MOV指令的功能是把OP2的内容传送到OP1中,OP1和OP2可为字节,字和双字,但两者的数据位数必须等长.
2.堆栈操作指令(PUSH/POP)
PUSH OP1
压栈指令,将OP1压入堆栈,同时(SP-2)送SP
POP OP1
出栈指令,将OP1弹出堆栈,同时(SP+2)送SP
3.标志传送指令(LAHF/SAHF)
LAHF:为标志寄存器读指令,用于将FLAGS寄存器的低字节读出后传送到AH寄存器的指定位.
SAHF:标志寄存器写指令,它正好与LAHF指令的操作相反,用于将AH寄存器的内容写入到FLAGS寄存器的低字节中
4.地址传送指令
4.1:装入有效地址指令(LEA)
LEA OP1,OP2
将OP2的有效(偏移)地址送给OP1
LEA SI,FIRST ;SI=FIRST
LEA SI,DATA[BX] ;SI = DATA+BX
4.2:装入全地址指针指令(LDS/LES/LSS)
LDS/LES/LSS OP1,OP2
将一个32地址装入一个段寄存器和一个通用寄存器中
5.输入输出指令(IN/OUT)
5.1:输入指令(IN)
IN OP1,OP2
将I/O端口的内容输入到AL或AX累加器中,其中OP1为AL或AX寄存器,OP2为端口地址
5.2:输出指令(OUT)
OUT OP1,OP2
将AL或AX累加器的内容通过I/O端口输出,其中OP1为端口地址,OP2为AL或AX寄存器
6.查表转换指令(XLAT)
XLAT指令是字节查表转换指令,它可以根据表中元素的下标,查出表中相应元素的内容.在使用该指令以前,应先建立一个字节表格,并将表的首地址送给BX,表中元素的无符号下标送AL寄存器,即执行XLAT指令后,就是完成[BX+AL]->AL
7.交换指令(XCHG)
XCHG OP1,OP2
将操作数OP1与OP2的内容互相交换
8.加法指令
8.1:加法指令(ADD)
ADD OP1,OP2
将OP1与OP2相加,结果放在OP1中
8.2:带进位加法指令(ADC)
ADC OP1,OP2
将OP1,OP2和进位标志位CF相加,结果存放在OP1中
8.3:加1指令(INC)
INC OP1
对OP1指定的操作数加1,结果再返回此操作数
8.4:BCD码(十进制数)加法调整指令(AAA/DAA)
AAA
AAA为未压缩BCD码的加法调整指令,用于对两个未压缩BCD码数相加后存放于AL中的和进行调整,以获得正确的未压缩BCD结果数.在程序中紧跟在ADD指令之后
DAA
DAA为压缩BCD码的加法调整指令,用于对两个压缩BCD码数相加后的结果(同样存放在AL中)进行调整,以获得正确的压缩BCD码结果.在程序中紧跟在加法指令ADD,ADC之后
9.减法指令
9.1 减法指令(SUB)
SUB OP1,OP2
将OP1减去OP2的结果存放在OP1中
9.2 带借位减法指令(SBB)
SBB OP1,OP2
用OP1减去OP2,再减去借位标志CF,结果存于OP1中
9.3 减1指令(DEC)
DEC OP1
对OP1指定的操作数减1,结果送回OP1
9.4 十进制数(BCD)减法调整指令(AAS/DAS)
AAS
未压缩BCD码的减法调整指令,与AAA类似,用于对两个未压缩BCD码数相减后存放于AL中的结果进行调整,以获得正确的未压缩BCD结果数
DAS
压缩BCD码的减法调整指令,与DAA指令类似,用于对两个压缩BCD码数相减后的差(结果同样存放在AL中)进行调整,以获得正确的压缩BCD码结果
9.5 整数取负指令(NEG)
NEG OP1
对操作数取负,即用0减去OP1,其结果将使正数变负数或负数变正数,但绝对值不变
9.6 比较指令(CMP)
CMP OP1 OP2
和SUB指令类似,将OP1减去OP2,但不将结果送回OP1,只是使结果影响标志位.
10.乘法指令
10.1 无符号数乘法指令(MUL)
MUL OP1
MUL指令用于完成无符号整数乘法,被乘数隐含在A累加器(AL,AX)中,操作数OP1为乘数.字节操作时乘积返回到AX,字操作时乘积返回DX:AX.
10.2 带符号数乘法指令(IMUL)
IMUL OP1
IMUL OP1,OP2
用于完成符号数的乘法运算,在单操作数格式下,被乘数存放在累加器(AL,AX)中,乘数存放在由OP1指定的寄存器或存储器中.字节运算时乘积返回AX,字运算时乘积返回到DX:AX.在双操作数格式下,被乘数存放在由OP1指定的寄存器中,乘数由OP2指定,可存放在寄存器或存储器中,也可为立即数,返回的积存放在OP1指定的寄存器中.
10.3 BCD(十进制数)乘法调整指令(AAM)
AAM
指令为未压缩BCD码的乘法调整指令,用于对两个未压缩BCD码数相乘后存放于AX中的乘积(高位在AH中,低位在AL中)进行调整,以获得正确的结果.
11.除法指令
11.1 无符号除法指令
DIV OP1
OP1是除数,被除数由累加器A隐含决定,OP1为字节数据时使用AX,OP1为字数据时使用DX:AX。商根据数据宽度分别返回到AL,AX中,余数则相应存入AH,DX中
11.2 带符号除法指令
IDIV OP1
除数由OP1指定,被除数由累加器A隐含决定,OP1为字节数据时使用AX,OP1为字数据时使用AX,OP1为字数据时使用DX:AX。商根据数据宽度分别返回到AL,AX中,余数则相应存入AH,DX。
11.3 BCD(十进制数)除法调整指令(AAD)
AAD
AAD指令用于调整除法运算前AX中的被除数内容(将它由未压缩BCD码数调整为二进制数),以使除法所得的商(放在AL中)和余数(放在AH中)都为有效的未压缩BCD数。
11.4 符号位扩展指令(CBW/CWD)
CBW
CWD
CBW,CWD指令用于将原操作数的宽度加倍,所以也叫数据宽度变换指令。CBW指令将AL中的8位有符号数带符号扩展为16位放入AX中。AH中各位取与AL中数的符号位相同的值,即对负数进行1位扩展,正数进行0扩展。CWD指令将AX中的16位有符号数带符号扩展成32位,扩展后的高16位存放在DX中,各位值与原AX中符号位相同。
12 逻辑指令
12.1 逻辑与指令(AND)
AND OP1,OP2
将目的操作数OP1和源操作数OP2按位进行逻辑“与”运算,并将结果送回目的操作数OP1.
12.2 逻辑或指令(OR)
OR OP1,OP2
OR指令用于将目的操作数OP1和源操作数OP2按位进行逻辑“或”运算,并将结果送回目的操作数OP1.
12.3 逻辑非指令(NOT)
NOT OP1
NOT指令的功能是使8位,16位或32位寄存器或存储器中的操作数各位都求反(0变1,1变0)
12.4 逻辑异或指令(XOR)
XOR OP1,OP2
XOR指令用于将目的操作数OP1和源操作数OP2按位进行辑逻“异或”运算,并将结果送回目的操作数OP1.
12.5 测试指令
TEST OP1,OP2
将目的操作数OP1和源操作数OP2按位进行逻辑“与”运算,结果反映在状态标志位上。
13 移位指令
13.1 算术/逻辑左移指令(SAL/SHL)
SAL/SHL OP1,OP2
SAL是算术左移;SHL是逻辑左移指令.OP1每左移一位,在最低有效位补0,把最高有效位移进CF.OP2为移位次数(1或CL,CL的最大值是31)
13.2 算术/逻辑右移指令(SAR/SHR)
SAR/SHR OP1,OP2
SAR是算术右移指令,用于对有符号数右移;SHR是逻辑右移指令,用于对无符号数右移.
13.3 循环移位指令(ROL/ROR/RCL/RCR)
ROL/ROR/RCL/RCR OP1,OP2
ROL是循环左移指令;ROR是循环右移指令;RCL和RCR则分别是带进位的循环左移指令和循环右移指令.
14 串操作指令
14.1 串传送指令(MOVS/MOVSB/MOVSW)
MOVSB ;传送字符串
MOVSW ;传送字串
MOVS OP1,OP2 ;OP1为ES:[DI],OP2为DS:[SI]
DS:[SI]指定的源串中的一字节或字复制到ES:[DI]指定的目的串中,然后根据方向标志DF的值自动修改地址指针SI和DI
14.2 串装入指令(LODS/LODSB/LODSW/LODSD)
LODSB ;装入字符串
LODSW ;装入字串
LODS OP1 ;装入字节串或字串,具体取决于OP1长度
将DS:[SI]指定的源串中的一字节或字传送到累加器AL或AX中,同时修改源串指针SI
14.3 串存储指令(STOS/STOSB/STOSW/STOSD)
STOSB ;存字节串
STOSW ;存字串
STOS OP1 ;存字节串或字串,具体取决于OP1长度
把累加器AL或AX的内容传送到由ES:[DI]指定的字节或字串中去,然后根据方向标志DF的值自动修改地址指令DI
14.4 串比较指令(CMPS/CMPSB/CMPSW/CMPSD)
CMPSB ;比较字节串
CMPSW ;比较字串
CMP OP1,OP2 ;比较字节串或字串,具体取决于OP1和OP2的长度
将DS:[SI]指定的源串中的内容与ES:[DI]指定的目的串中的元素进行比较,并根据其结果置标志位,但不改变这两个存储单元中的内容,同时自动修改源串指针和目的串指针.
14.5 串搜索指令(SCAS/SCASB/BCASW/SCASD)
SCASW ;扫描字节串
SCASW ;扫描字串
SCAS OP1 ;扫描字节串和字串,具体取决于OP1长度
将一个字符串中搜索特定的关键字.字符串的起始地址只能放在ES:[DI]中,不允许段超越.待搜索的关键字必须放在累加器AL或AX中.它完成的操作是将累加器(AL或AX)的内容减去ES:[DI]指定的目的元素,并根据其结果置标志,同时自动修改目的串指针DI,但不改变累加器和目的串元素的内容.
14.6 重复前缀指令(REP)
REP
重复其后的字符串操作指令,重复的次数由CX来决定.重复前缀指令的执行过程为:判断CX是否为0,若为0则结束重复操作,执行该串操作指令的下一条指令;否则,对CX减1,继续执行其后的字符串操作指令,直到CX等于0为止.
14.7 相等重复前缀指令(REPE/REPZ)
REPE/REPX
重复其后的字符串操作指令,相等重复前缀指令的执行过程为判断CX!=0且ZF=1.如果条件不成立,则结束重复操作,执行程序中的下一条指令;否则,不等重复前缀指令.
14.8 不等重复前缀指令(REPNE/REPNZ)
REPNE/REPNZ
重复其后的字符串操作指令,重复的次数由CX来决定,判断CX!=0且ZF=0.如果条件不成立,则结束重复操作,执行程序中的下一条指令;否则,CX=CX-1(不影响有关标志位),并执行其后的字符串操作指令,在该指令执行完后,再转到第一步判断条件.
15 控制转移指令
15.1 无条件转移指令(JMP)
JMP OP1
从程序当前执行的地方无条件转移到另一个地方执行.这种转移可以是一个短转移(偏移量在[-128,127]范围内),或近转移(偏移量在[-32k,32k]范围内),或远转移(在不同的代码段之间转移).
15.2 条件转移指令(Jcc)
Jcc OP1
根据CPU的标志状态组成的条件cc,决定程序的执行方向.若条件cc成立,则控制程序转移到OP1(标号)所给出的转移目标地址;若条件cc不成立,则程序将顺序执行.
15.3 循环控制指令(LOOP/LOOPcc/LODPE/LOOPNE)
LOOP lable
LOOPE/LOOPZ lable
LOOPNE/LOOPNZ lable
以CX寄存器作为计数器,指令的操作实现将CX的内容减1,若结果不等0,则转到指令中指定的短标号处;否则,顺序执行下一条指令.
16 调用和返回指令
16.1 过程调用/返回指令(CALL/RET)
CALL OP1 lable/proc
CALL指令用于调用一个目标地址为OP1的子程序(或过程).其具体操作是先将下条指令的地址(即断点)保存在堆栈中,然后控制程序转移到OP1指定的存储单元.段内调用时,将当前的IP压栈,将目标地址送给IP;跨段调用时,当前的CS和IP压栈,将目标地址的段基址和偏移量送给CS和IP.
RET [imm]
返回指令RET用于从被调用的子程序返回调用程序.RET指令通过弹栈操作恢复调用前的IP值和CS值.如果调用程序向被调用子程序通过堆栈方式传递参数,可直接使用无操作数的RET形式;否则应采用带操作数的RET形式.
RET imm
返回时堆栈指针SP先自动加上imm值(以便丢弃已使用过的传递参数),再据此弹出返回地址至CS和IP,imm值应为参数个数的2倍.
16.2 中断指令(INT/INT0/IRET)
INT imm8
INT0
IRET
INT imm8为软中断指令,用于产生一个由8位立即数指定中断号的软中断.INT0为溢出中断指令,它实际上是软中断指令INT的特例,其中断号隐含为4,所以INT0与INT4等价,它只有当OF置1时才产生中断.IRET为中断返回指令,用于从中断服务程序返回源程序,它执行的操作是从堆栈中弹出原入栈保护的IP,CS和标志寄存器值,并重新开始被中断程序的执行.
17 处理器控制指令
17.1 标志操作指令
CLC 清进位标志
CTC 置进位标志
CMC 进位标志取反
CLD 清方向标志
STD 置方向标志
CLI 清中断允许标志
STI 置中断允许标志
17.2 处理器暂停指令(HLT)
使程序停止执行,处理器进入暂停状态
17.3 处理器等待指令(WAIT)
使处理器处于等待状态,直到出现外部中断为止.
17.4 总线封锁前缀指令(LOCK)
单字节的指令前缀,用于产生有效的LOCK总线信号,锁住由一条指令指定的存储器区域,使之在指令执行期间一直受到保护,而防止其他主控器的访问.这在采用共享的多处理机系统中是十分有用的.
17.5 空操作指令(NOP)
完成一次空操作.它只影响(E)IP寄存器,对标志位无影响.
分享到:
相关推荐
8086指令系统是微处理器程序设计的基础,掌握它对于深入理解微型计算机的工作原理至关重要。8086指令系统包含了一系列的指令,用于数据处理、传输、控制流以及状态管理等,每种指令都有其特定的功能和应用场景。下面...
### 8086指令系统4:控制指令的深度解析 #### 控制指令概述与分类 8086指令系统中的控制指令主要分为两大类:一类是用于控制程序执行流程的指令,另一类是用于控制处理器状态的指令。前者通过改变CS:IP寄存器的值...
8086指令系统是微处理器8086的核心组成部分,它是基于16位架构的。8086指令系统包含多种寻址方式和指令,是理解和编写针对8086处理器汇编语言程序的基础。 1. **寻址方式**: - **立即寻址**:操作数直接在指令中...
### 8086指令系统详解 #### 数据传送类指令 **MOV** 指令是8086指令集中最基础的数据传送指令,用于在寄存器与寄存器、寄存器与存储器之间进行数据的移动。具体格式如: - `MOV dst, src`,将`src`中的数据复制到`...
8088/8086指令系统是Intel公司设计的一种16位微处理器的指令集,它是IBM PC及其兼容机的基础。这个指令系统包含了多种类型的指令,用于控制CPU执行各种计算、数据处理和控制任务。 一、指令格式与寻址方式 8086/...
8086指令系统是微机原理中的核心内容,它定义了CPU如何执行各种操作。在8088/8086处理器中,指令由两部分组成:操作码和操作数。操作码指示要执行的操作,如数据传输、算术运算、逻辑运算或控制流程的改变。操作数则...
8086指令系统是基于Intel 8086微处理器的一种指令集,它是x86架构的基础。8086指令系统包含了多种类型的指令,包括通用传送类、算术运算类、逻辑运算类、串操作指令、控制转移类、处理器控制指令以及输入输出指令。...
计算机教学课件8086指令系统 本资源是关于8086指令系统的教学课件,旨在帮助学生全面理解每条指令的功能和应用,以便编写汇编语言程序。课件中涵盖了数据传送类指令、算术运算类指令等多个方面。 数据传送类指令是...
8086指令系统是英特尔公司开发的一种16位微处理器的指令集,它是IBM PC及其兼容机的基础,对理解计算机硬件和操作系统的工作原理至关重要。8086指令系统包括了众多基本和复杂的操作指令,涵盖了数据处理、控制流程、...
8086指令系统初步
8086指令系统是微处理器80x86系列的核心组成部分,它是16位的处理器,其指令集是后续型号如80286、80386等的基础,并且在这些基础上进行了扩展。8086的指令系统可以分为六大类别,包括数据传送类、算术运算类、逻辑...
8086指令系统是Intel 80x86系列微处理器的核心组成部分,它定义了计算机可以执行的所有基本指令。16位的8086指令集为后续的处理器如80286、80386等奠定了基础。在理解和使用8086指令系统时,我们需要熟悉其主要组成...
### 8086指令系统2 - 算术逻辑运算和移位指令的使用 #### 一、算术逻辑运算和移位指令概述 在8086微处理器架构中,算术逻辑运算和移位指令是非常重要的组成部分,它们主要用于处理数据的基本数学运算和逻辑操作。...
8086指令系统从功能上可以分为六大数据传送类指令,如MOV、PUSH、POP、XCHG、LEA等。这些指令用于数据在寄存器、内存和I/O端口之间的传输。 在汇编语言层面,x86汇编语言是一种针对x86架构处理器的低级编程语言。在...
微机原理8086指令系统学习教案 本资源是关于微机原理8086指令系统的学习教案,主要介绍了8086指令系统的基本概念、分类、传送指令、算术运算指令、逻辑运算和移位指令、串操作指令、控制转移指令、处理器控制指令等...
8086指令系统汇总所有指令汇总,最全文档!
8086指令系统是基于8088/8086微处理器的汇编语言编程的基础,适合初学者逐步学习。以下是对标题和描述中涉及的知识点的详细解释: 1. 8088/8086CPU内含16个寄存器,其中AX、BX、CX、DX、SP、BP、SI、DI是通用寄存器...