8086指令系统

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6


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寄存器,对标志位无影响.

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

“8086指令系统” 的相关文章

怎么使用jQuery来隐藏ul中的li元素 - web开发

这篇“怎么使用jQuery来隐藏ul中的li元素”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么使用jQuery来隐藏ul中的li元素”文章吧。...

php php_mcrypt如何安装 - 编程语言

这篇文章主要讲解了“php php_mcrypt如何安装”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“php php_mcrypt如何安装”吧! 下载 mcrypt在开始安装之前,需要先下载...

struts2框架搭建的三个步骤

1.添加jar包,一般只要把apps\struts2-blank例子中的所有jar包都加进去就行了2.在web.xml中加上拦截器, <filter> <filter-name>struts2</filter-name> <f...

php上传带中文的图片报错如何解决 - 编程语言

这篇文章主要介绍“php上传带中文的图片报错如何解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“php上传带中文的图片报错如何解决”文章能帮助大家解决问题。 问题的表现当我们使用PHP进行文件上传...

UVa 10245 The Closest Pair Problem (计算几何&最近点对)

10245 - The Closest Pair ProblemTime limit: 3.000 secondshttp://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=113&am...

UVa 10881 Piotr's Ants (等价转化思想)

10881 - Piotr's AntsTime limit: 3.000 secondshttp://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=456&page=show_...