8086常用指令列表
8086指令表

8086指令表表2-2算术运算指令表2-4 串操作指令表2-5程序转移指令表2-7串操作指令中寄存器和标志位的⽤途1.设BL=0FFH,执⾏指令“SAR BL , 1”后,BL中的内容是(0FFH)。
2.设SP=1300H,AX=200H,执⾏指令“POP AX”后,SP寄存器的内容为(1302H)。
3.⼗进制数的-1的8位⼆进制补码,⽤⼗六进制数表⽰是(D)A.01HB.8FHC.0FEHD.0FFHMOV⽤法总结⾮法操作:1.两个操作数都是存储器操作数2.src是⽴即数,dest是段寄存器3.两个操作数都是段寄存器MOV指令⽤法的举例:MOV AX , CX ;段寄存器⾄通⽤寄存器MOV AL , 125 ;⽴即数⾄寄存器MOV MEM , 15 ;⽴即数⾄存储器,直接寻址MOV SI , BX ;寄存器⾄寄存器MOV DS , AX ;通⽤寄存器⾄段寄存器(CS不⾏)MOV [BX] , 50H ;⽴即数⾄存储器,寄存器间接寻址MOV MEM , AX ;寄存器⾄存储器,直接寻址MOV MEM , DS ;段寄存器⾄存储器,直接寻址MOV ISP[BX] , CX ;寄存器⾄存储器,基址寻址MOV AX , DISP[SI] ;存储器⾄寄存器,变址寻址MOV DS , MEM ;存储器⾄段寄存器,直接寻址MOV AX , DISP[BX] [SI] ;存储器⾄寄存器,基址变址寻址标志位1.CF:进位标志位。
当进⾏加法或减法运算时,最⾼位发⽣进位或借位,CF=1;否则,CF=0。
2.PF:奇偶标志位。
当运算结果的最低有效字节中“1”的个数为偶数时,PF=1;为奇数时,CF=0。
3.AF:辅助进位位。
在减法或加法操作中,低4位向⾼4位有进位、借位发⽣时,AF=1;否则,AF=0。
4.ZF:零标志位。
ZF=1表⽰运算结果为零;否则ZF=0。
5.SF:符号标志位。
SF=1表⽰运算结果的最⾼位为1(即为负数);否则SF=0。
8086汇编指令大全.

不允许寄存器或存储单元到除CS外的段寄存器
2入栈(出栈指令PUSH (POP
注意:
PUSH操作数不能是“立即数” POP操作数不能是段寄存器
CS
不影响标志位
先进后出
单操作符
3交换指令XCHG
注意:
只允许寄存器与存储单元之间的交换
不影响标志位
4换码指令XLAT
5地址传送指令LEA :偏移地址
ZF=0
SF符号标志位
OF溢出标志位
DF方向标志位
IF中断允许位IF=1时响应外部中断
TF跟踪标志位
操作数:[目的操作数(OPD ,源操作数(OPS ] ;立即操作数,寄存器操作数,存储器操作数。寻址方式:
1寄存器寻址例:INC AX ; MOV AX , BX
2寄存器间接寻址(寄存器只能是BX , DI , SI , BP ; [PA=(BX、DI、SI +DS》4或BP+SS》4]
6数据段指针送寄存器LDS :低地址的字送指定的通用寄存器(SI、高地址的字
送DS
7附加段指针送寄存器指令LES :与LDS相似,低地址的字送通用寄存器(DI、高
地址送ES
上三指令不影响标志位
8标志寄存器传送指令
LAHF :标志寄存器低八位送
AH
SAHF :AH送标志寄存器低八位
PUSHF :标志寄存器压入堆栈
标志寄存器:9个有效位,分6个状态寄存器和3个控制寄存器
CF当执行一个加法(减法使最高位产生进位(借位时CF=1否则
CF=0
PF指令执行的结果低8位有偶数个一时, CF=1否则
CF=0
AF当执行一个加法(减法使运算结果低4位向高4位有进位(借位时AF=1否则
8086指令

8086指令1.数据传送指令
(1)通用传送指令
(2)累加器专用传送指令
(3)地址传送指令
2.算术运算指令
(2)减法指令
(5)符号扩展指令
(6)十进制调整指令
3.逻辑运算和移位指令(1)逻辑运算指令
(2)移位指令
注:OPR不能为立即数和段寄存器,若CNT大于1,应先将CNT存入CL寄存器中,移位指令中CNT写为CL即可。
4.串操作指令
(1)重复前缀指令
(2)串传送指令
(3)串比较指令
5.控制转移指令
(1)无条件转移指令
(2)条件转移指令
①简单条件转移指令(根据某一标志位的值决定是否有转移,测试的标志位有S、Z、C、P、O 5个,每个标志位可能取“0”和“1”,共10条)
②无符号数比较条件转移指令
③有符号数比较条件转移指令
④测试CX的值为0则转移的指令
(3)子程序调用和返回指令
(4)循环控制指令
(5)中断指令
6.处理机控制指令
(2)其他处理机控制指令
7.伪指令
(1)数据定义伪指令
(2)分析运算符
(3)属性操作符
(4)符号定义指令
(5)地址计数器与对准伪操作
(6)宏与过程(子程序)的定义和调用。
8086汇编指令

HLT 处理器暂停, 直到出现中断或复位信号才继续. O MN|ea.O
WAIT 当芯片引线TEST为高电平时使CPU进入等待状态. &ET PYf %#
ESC 转换到外处理器. Kl+4 A} Uo
LOCK 封锁总线. %'[ pucEF
NOP 空操作. bn"z&g
POPD 32位标志出栈. @A6 iY
二、算术运算指令 J 299 mgB
ADD 加法. (RI)<zaK ;
ADC 带进位加法. ~+ {*KPiD
INC 加 1. oO;L l? ~
AAA 加法的ASCII码调整. At@0G\^
DAA 加法的十进制调整. '| g sm O
STC 置进位标志位. y O?52YO
CLC 清进位标志位. *Ja,3Q q
CMC 进位标志取反. J~rjI 24
STD 置方向标志位. .2 ST Bh.;
CLD 清方向标志位. G X>T~i\f8
STI 置中断允许位. t M{U6 k
CLI 清中断允许位. z`rW2UO#a`
JO 溢出转移. PW -s F
JP/JPE 奇偶性为偶数时转移. ,,V uv n
JS 符号位为 "1" 时转移. E J Ta ~
3>循环控制指令(短转移) aDX 4 }`u
LOOP CX不为零时循环. I, ?!N zB
LOOPE/LOOPZ CX不为零且标志Z=1时循环. ; 5!8LmZ0#
XADD 先交换再累加.( 结果在第一个操作数里 ) PK +sGV
8086常用指令表

8086/8088常用助记符指令类型助记符目的源功能注释数据传送MOV X X 把数据从源操作数传送到目的操作数1.两个操作数不能同时为内存操作数,也不能同时为立即数,目的操作数不能为立即数2两个操作数的类型须一致3立即数不能直接传入段寄存器4CS,IP不能作目的操作数5段寄存器之间不能直接传送PUSH X把指定的寄存器/内存单元的内容压入堆栈1.按字操作,CS能入栈内存不能直接寻址.P-2→SP,再写入栈顶POP X从栈顶弹出一字到指定的寄存器/内存单元1.同上2.先弹出一字,再SP-2→SP XCHG 寄寄/内两操作数互换内容不能用立即数和段寄存器XCHG 寄指定寄存器同累加器互换内容IN AC 端口号从指定端口送数到AL端口号为立即数,地址为8位端口号在DX中,地址为16位OUT 端口号 AL从AL送数到指定端口LEA 寄内存LDS 寄内存LES 寄内存把内存偏址送指定寄存器把内存低2字节送寄存器,高2字节送DS(ES)只能用通用寄存器,不能用段寄存器LAHF把标寄低8位送AHSAHF把AH送标寄低8位PUSHF标寄入栈POPF栈顶弹出进标寄算术运算ADD X X加法(和送目的操作数)加减1.2.同MOV3.段寄存器不能作操作数4.调正在AL中进行,并必需紧跟在运算之后执行.5.比较运算同减法,结果不存,而仅影响标志寄存器6.乘除法的目的操作数隐含是ACAL*乘数→AX, AX*乘数→DX AX,AX/除数→AL, 余数在AH中DXAX/除数→AX, 余数在DX中7.加1减1指令把操作数当无符号数,其他加减指令是否为有符号数要由程序设计需要设定ADC X X带进位加法INC X 指定的寄/内的内容加1AAA分离BCD码调正(AL)DAA组合BCD码调正(AL)SUB X X减法SBB X X带借位减法DEC X指定的寄/内的内容减1NEG X指定的寄/内的内容求补CMP X X 比较AAS分离BCD码调正(AL)DAS组合BCD码调正(AL)MUL 寄/内不带符号乘法IMUL 寄/内带符号整数乘法AAM 分离BCD码调正(AL)DIV 寄/内不带符号除法IDIV 寄/内带符号整数除法AAD非组合BCD码调正CBW扩展AL中的符号位到AHCWD扩展AX中的符号位到DX类型助记符目的源功能注释逻辑运算NOT X 对字或字节按位取反 1.2.3同上4.按位操作5.AND1不变(保持),AND0置0OR1置1,OR0不变(保持)自身与或,结果不变(保持),影响标志位, 自身XOR常用于清零XOR 1取反,XOR 0不变AND X X对字或字节按位与操作OR X X 对字或字节按位或操作XOR X X对字或字节按位异或操作TEST X X同AND,但结果仅影响标寄而不存目的操作数移位和循环移位SHL 寄/内 1/CL按位左移 CF←M←0 1.循环或移位的次数为1或CL中的数2.SHL一次,原数乘2SHR一次,原数除23.目的操作数不能是立既数SAL 寄/内 1/CL按位左移 CF←M←0SHR 寄/内 1/CL逻辑右移 0→M→CFSAR 寄/内 1/CL算术右移→M→CFROL 寄/内 1/CL循环左移 CF← ←M ←ROR 寄/内 1/CL循环右移 CF← →M →RCL 寄/内 1/CL带进位循环左移←CF←M←RCR 寄/内 1/CL带进位循环右移→CF→M→重复前缀REP重复后面字串指令,直到CX=0一般与字串指令联合使用REPE/REPZ当相等/为零时重复REPNE/REPNZ当不相等/不为零时重复MOVSB/MOVSW字符串传送 1.源串偏址在SI中,目的串偏址在DI中.2.每次自动修改SI,DI 内容3.装入和存储是对AX(AL)操作CMPSB/CMPSW字符串比较SCASB/SCASW字符串扫描LODSB/LODSW字符串装入STOSB/STOSW字符串存储转移JMP X无条件转移到指定内存地址操作数前可带NEAR或FAR前缀条件转移(无符号数)JA/JNBE X高于/不低于,不等于由比较和减法指令的结果JA/JNBE 表示二者等价JAE/JNB X大于等于/不低于JB/JNAE X低于/不高于,不等于TBE/JNA X低于等于/不高于条件转移(带符号数)JG/JNLE X大于/不小于等于JGE/JNL X大于等于/不小于JL/JNGE X小于/不大于不等于JLE/JNG X小于等于/不大于条件转移JE/JZ X等于/为零JNE/JNZ X不等于/不为零条件转移JC/JNC X有进位CF=1/无进位CF=0由影响标志位的操作结果JC/JNC表示二者是两个不同用法JO/JNO X有溢出OF=1/无溢出OF=0JP/JPE X奇偶性为偶PF=1JNP/JPO X奇偶性为奇PF=0JS/JNS X符号位为1/符号位为0FR15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0OF DF IF TF SF ZF AF PF CF 溢出方向符号零半进位奇偶进位类型助记符目的源功能注释LOOP X[CX]-1→[CX],[CX]≠0转移到X由CX决定循环次数循环LOOPZ/LOOPE X [CX]-1→[CX],[CX]≠0且ZF=1转移到X为零/相等时循环LOOPNZ/LOOPNE X[CX]-1→[CX],[CX]≠0且ZF=0转移到X非零/不相等时循环JCXZ X [CX]=0转移到X调用返回CALL 过程名调用指定地址开始的子程序对标寄无影响注意用堆栈保护断点RET子程返回RET XRETF标志操作CLC CF=0 (进位)STC CF=1CMC CF取反CLD DF=0 (方向)STD DF=1CLI IF=0 (中断)STI IF=1HLT暂停ESC交权INT 21H DOS功能调用AH=1键盘输入到AL,AH=2显示DL内容,AH=9显示DX为偏移量以$结尾的内存字串NOP空操作3个时钟伪指令功能特征符号 EQU 符号/表达式把右边的值赋予左边的符号1.不产生目标代码,不分配内存单元2.在同一源程序中同一符号不能用EQU重定义,可用=重定义符号=符号/表达式变量名 DB 表达式1,表达式2…. DWDD 定义字节(或字、双字)1.要求汇编分配内存单元,并把表达式1,表达式2…等存入2.为变量名分配这些内存单元的首字节地址段名SEGMENT [定位] [组合]['类别名'] :段名 ENDS 定义逻辑段定位隐含PARA,表示能被16整除ASSUME 段寄名:段名,段寄名:段名,….告诉汇编已定义的段与段寄的关系不产生目标代码,不分配内存单元,不为段寄存器存放段基值过程名 PROC [NEAR/FAR]:RET过程名 ENDP构造子程序最后语句RET不能少ORG 表达式定义下一个数据或指令的偏移量$表示偏移量的现行值宏名 MACRO 形参1,形参2,….ENDM宏定义宏名实参1,实参2,….宏调用一.指令由名字,操作码、操作数(地址)组成。
8086常用指令

JMP DWORD PTR OPR:执行的操作为(IP)<-(EA);(CS)<-(EA+2)
JMP指令不影响条件码。
四、标志寄存器传送指令
LAHF:Load AH with Flags
SAHF:Store AH into Flags
PUSHF/PUSHFD:标志位进栈
POPF/POPFD:标志位出栈
五、类型转换指令
CBW:字节转为字
CWD:字转为双字
CDQ:双字转4字
BSWAP:字节交换
REP指令:格式为:REP <串处理指令>,如REP INS等。执行规则是和循环类似,当CX=0时退出重复。由于这些串处理指令都只一次处理一个单位的数据,因此一般都需要与REP指令结合起来实现批量的数据传送。
结合REP指令的串处理指令用法实例: 若mess1,mess2是data段中指定的两个字符串,其中mess1在data中,为源串;mess2在extra中,为目的串
十四、条件转移指令
对单个条件标志比较,并由结果转移
JZ(JE):当结果为0或相等则跳转。相反:JNZ(JNE);
JS:当结果为负则跳转。相反:JNS;
JO:当溢出则跳转。相反:JNO;
JP(JPE):当奇偶位为1则跳转。相反:JNP(JPO);
JB(JNAE):当低于或CF=1则转移。相反:JNB(JAE),不低于则转移;
lea di,mess2;赋予目的变址DI
mov cx,17;指定重复次数
CLD;方向标志置零(从左向右扫描)
8086指令大全

80X86 汇编指令符号大全+、-、*、/∶算术运算符。
&∶宏处理操作符。
宏扩展时不识别符号和字符串中的形式参数,如果在形式参数前面加上一个& 记号,宏汇编程序就能够用实在参数代替这个形式参数了。
$∶地址计数器的值——记录正在被汇编程序翻译的语句地址。
每个段均分配一个计数器,段内定义的所有标号和变量的偏移地址就是当前汇编地址计数器的值。
?∶操作数。
在数据定义语句中,操作数用?,其作用是分配并保留存储空间,但不存入确定的数据。
=∶等号伪指令——符号定义。
对符号进行定义和赋值,功能与 EQU相似,但允许(重复)再定义。
:∶修改属性运算符(操作符)——段操作符。
用来临时给变量、标号或地址表达式指定一个段属性(不用缺省的段寄存器),自动生成一个“跨段前缀字节”。
注意,段寄存器CS和ES不能被跨越,堆栈操作时也不能跨越SS。
;∶注释符号。
%∶特殊宏操作符,用来将其后的表达式(通常是符号常数,不能是变量名和寄存器名)转换成它所代表的数值,并将此数值的ASCII码嵌入到宏扩展中。
( )∶1.运算符——用来改变运算符的优先级别。
2.教材符号,表示括号内存储单元(或寄存器)的内容。
< >∶宏调用时用来将带间隔符(如空格,逗号等)的字符串(作为实参)括起来。
[ ]∶1.运算符。
方括号括起来的数是数组变量的下标或地址表达式。
带方括号的地址表达式必须遵循下列原则,①只有BX、BP、SI、DI这四个寄存器可在方括号内出现;②BX或BP可单独出现在各方括号中,也可以与常数、SI或DI一起出现在方括号内,但不允许BX和BP出现在同一个方括号内;③SI和DI可以单独出现在各方括号内,也可以与常数、BP或BX一起出现在方括号内,但不允许SI和DI出现在同一个方括号内;④一个方括号内包含多个寄存器时,它们只能作加法运算;⑤若方括号内包含基址指针BP,则隐含使用堆栈段寄存器SS提供段基址,否则均隐含使用数据段寄存器DS提供段基址。
8086汇编指令集

机设08-4班8086汇编指令集数据传送类(14条)MOV PUSH POP XCHG XLAT LEA LDS LES LAHF SAHF POPF IN OUT PUSHF算术运算类(20条)ADD ADC INC SUB SBB DEC NEG CMP MU L IMUL DIV IDIV CBW CWD DAA DAS AA A AAS ASM AAD逻辑运算类(13条)AND OR NOT XOR TEST SHL SAL SHR SAR ROL ROR RCL RCR控制转移类(26条)JMP JC/JB JNC/JNB JP/JNP JS/JNS JZ/JNZ J O/JNO JCXZJBE/JNBE JL/JNL JLE/JNLE LOOP/LOOPE LO OPNZ CALL RET INT INTO IRET处理机控制类(12条)CLC CMC STC CLD STD CLI STI( NOP HCT WAIT ESC LOCK )串操作类指令(14条)REP MOVSB REP MOVSW REP LOOSB REP LOOSWREP STOSB REP STOSW REPZ CMPSB REPZ CMPSWREP SCASB REPZ SCASW REPZCMPSB REPNZ CMPSWREPNZ SCASB REPNZ SCASW 数据传递类指令1. 通用数据传递类(1)数据传递指令MOV(书P69)使用MOV指令注意以下几点:a) MOV指令不允许在两个存储单元之间直接传递数据b) MOV指令不允许在两个段寄存器之间直接传递数据c) MOV指令不允许用立即数为段寄存器赋值d) MOV指令不影响标志位(2)堆栈操作指令(书P70)a) PUSH入栈指令功能:将寄存器、段寄存器或存储器中的一个字数据压入7堆栈中。
b) POP出栈指令功能:将堆栈栈顶的内容弹入寄存器、段寄存器或存储器中。
8086常用指令集

8086指令集寄存器:累加器:AX 变址寄存器:SI 代码段寄存器:CS 指令指针:IP基址寄存器:BX 变址寄存器:DI 数据段寄存器:DS 微处理器状态字:PSW 计数寄存器:CX 堆栈寄存器:SP 附加段寄存器:ES数据寄存器:DX 基址指针:BP 堆栈段寄存器:SS属性操作符:符号及含义:SEG:取出段地址OPR:一个操作数REGn:一个n位寄存器OFFSET:取出偏移地址SRC:源操作数MEM:一个存储单元TYPE:取出其类型DST:目的操作数CNT:计数值LENGTH:取出变量重复次数REG:一个寄存器LABEL:标号或过程名SIZE:取出变量的大小SEG:段地址IDATA:立即数数据寻址方式:立即寻址,寄存器寻址,存储器寻址(5种),隐含寻址一:立即寻址:MOV AX ,12A2H ;二:寄存器寻址:MOV DS,AX ; MOV V AR ,BX ;三:存储器寻址:操作数保存在存储单元中(5种)直接寻址:偏移地址直接给出, 1.MOV AX,V AR; 2. MOV DL,V AR2+5;3. MOV CX,[1200H]4. MOV V AR,2500 ;寄存器间接寻址:有效地址存放在寄存器中,直接寻址:1.MOV AX,[ SI ] ; 2.MOV [BX],DX ;寄存器相对寻址:有效地址为一个基址寄存器或变址寄存器的内容怀一个8位或16位的位移量这和. 1.MOV BX,[ SO+5 ] ; 2.MOV CX,V AR[BX]; 3.MOV AL,V AR[DI-5]基址变址寄存器:有效地址为一个基址寄存器和一个变址寄存器之和,1.MOV DX,[BX][SI]2.MOV AX,[BP][SI]基地变址且相对寻址:基址寄存器内容,一个变址寄存器内容,一个位移量,三者之和。
1.MOV AX,[BX+5][SI];2.MOV V AR[BP][DI],AX;数据传送指令:通用传送类指令:MOV 格式: MOV DST,SRC;获取有效地址指令:LEA 格式:LEA REG16, MEM;获取地址指针指令:LDS,LES 格式:LDS REG16, MEM(取高16位送入DS,低16送入REG16中;) 格式; LES REG16, MEM(高16位送入ES,低16送入REG16中)标志传送指令:LAHF,SAHF 格式:LAHF ;PSW寄存器中低8位传送到寄存器AH中格式:SAHF ; 将寄存器AH中低8位传送到PSW寄存器中的低8位数据交换指令:XCHG 格式:XCHG DST,SRC :两个操作数之间数据的交换字节转换指令:XLAT 格式:XLAT :堆栈操作指令:PUSH,POP,PUSHF,POPF算术运算类指令:加减法指令:加法指令:ADD,ADC : 格式:ADD DST,SRC ;将SRC+DST的结果存入DSTADC DST,SRC;将SRC+DST+CF的结果存入DST 减法指令:SUB,SBB: 格式:SUB DST,SRC;相似上方,取负指令:NEG 格式:NEG DST; 0-DST的结果存在DST.比较指令:CMP 格式:CMP DST,SRC; DST-SRC的结果设置PSW的状态标志位。
8086指令系统一览表

RCR op1, 1 带进位位的循环右移 RCR op1, CL
reg mem reg mem
串 MOVSB 操 作 MOVSW 类
((DI)) ← ((SI)) (SI) ← (SI)±1, (DI) ← (DI)±1 ((DI)) ← ((SI)) (SI) ← (SI)±2, (DI) ← (DI)±2
SAR op1, 1 算术右移 SAR op1, CL
ROL op1, 1 循环左移 ROL op1, CL
ROR op1, 1 循环右移 ROR op1, CL
reg mem mem, reg reg, mem reg, reg reg, imm mem, imm acc, imm reg, mem reg, reg reg, imm mem, imm acc, imm reg mem reg mem
9+22/rep 不重复:15 1 重复:
9+15/rep 1 不重复:15 重复:
9+15/rep
2
1
2
1
REPNE/REP (CX)=0 或(ZF)=1 退出重复,否则
NZ
(CX)←(CX)-1 并执行其后的串指令
ቤተ መጻሕፍቲ ባይዱ
string_instruc
控 JMP SHORT 无条件转移 制 op1 转 JMP NEAR 移 PTR op1 类 JMP FAR
reg mem
PTR op1
JMP WORD
PTR op1
JMP DWORD
PTR op1 JZ/JE op1 JNZ/JNE op1 JS op1
ZF=1 则转移 ZF=0 则转移 SF=1 则转移
JNS op1
8086指令全集

XCHG 目标,源 目标,
目标地址传送 装入 寄存器 装入DS寄存器 装入ES寄存器 装入 寄存器 低字节装入AH寄存器 将FLAGS低字节装入 寄存器 低字节装入 标志位传送 内容装入FLAGS低字节 将AH内容装入 内容装入 低字节 将FLAGS内容压入堆栈 内容压入堆栈 从堆栈弹出FLAGS内容 内容 从堆栈弹出 I/O数据传送 数据传送 输入字节或字 输出字节或字
X X X X X X X X X X X X X X X X X X -
重复 无条件重复 前辍 当相等/为零时重复
当不等/不为零时重复
REP REPE/REPZ REPNE/REPNZ
3.2.5 处理器控制指令
类 别 指令 名称
清除进位标志 置1进位标志 进位标志
助记符 O D I
CLC STC CMC CLD STD CLI STI WAIT ESC LOCK HLT NOP
指令类型 字压入堆栈
通用数据传送
指令功能 字节或字传送 字弹出堆栈 字节或字交换 代码转换 装入有效地址
指令书写格式 MOV PUSH POP XLAT LEA LDS LES LAHF SAHF PUSHF POPF IN 累加器, 累加器,端口 OUT 端口,累加器 端口, 目标, 目标,源 目标, 目标,源 目标, 目标,源 目标, 目标,源 源 目标
指令书写格式
状态标志位
O S Z A P C X X X X X X X X X X U U U U U X U U X X X X X X X X U U U U U X U X X X X X X X X X X X U U U U U X U X X X X X X X X X X X U U U U X X X X U X X X X X X X X U U U U U X U X X X X X X X — X X X X U U X X X X U U
8086常用指令表

8086常用指令表FR一.指令由名字,操作码、操作数(地址)组成。
操作数有:立即数(各进制的数或可求确定值的表达式)、寄存器操作数(操作数在寄存器中)、存储器操作数(操作数在内存中),I/O端口数四种,寻找指令中操作数所在的地址的方法叫寻址方式:1.立即数寻址,操作数是一个立即数,直接包含在指令中.(不能作目的操作数)2.直接寻址,操作数的内存偏址直接包含在指令中(低字节在前,高字节在后), 一般以DS为基址.否则以指定段寄存器及冒号:为前缀.(双操作数指令中,两个操作数不能同为内存操作数)3.寄存器寻址,操作数在指令所指定的CPU内部寄存器中4.寄存器间接寻址,操作数的内存偏址包含在指令所指定的寄存器中(SI,DI,BX,BP),SI,DI,BX 以DS为基址,BP可以SS为基址.5.变址寻址(寄存器相对寻址) 操作数的内存偏址由在寄存器的内容加指令中的位移量形成, 寄存器和段寄存器的规定同上6.基址变址寻址, 操作数的内存偏址是基址寄存器BX或BP的内容加变址寄存器SI或DI 的内容之和,(或还可加上指令中指出的偏移量),以BX为基址时段存是DS,而BP可为SS.7.串操作数寻址,是隐含的:源操作数地址:DS+SI, 目的操作数地址:ES+DI,8.端口寻址:(IN或OUT指令)有两种:直接端口寻址, 端口地址为8位二进制数;间接端口寻址,端口地址在DX中(可为16位数).9.隐含寻址:操作数地址由指令隐含确定.二.指令中的汇编特有的操作符1.D UP 定义重复数据2.E Q 相等NE不等LT小于LE小于等于CT大于CE大于等于3.S EG 变量名/标号名返回变量或标号的段基值4.O FFSET 变量名/标号名返回变量或标号的偏移量5.T YPE 变量名/标号名返回变量或标号的类型属性6.L ENGTH 变量名返回变量元素个数7.S IZE 变量名返回变量数组占总字节数8.类型PTR 地址表达式,设定内存操作数类型(BYTE,WORD,DWORD)。
8086汇编语言指令表(按字母顺序)

CLI ;置IF=0,CPU禁止响应外部中断
STI ;置IF=1,使CPU允许向应外部中断
功能: 完成对标志位的置位、复位等操作.
说明: 例如串操作中的程序,经常用CLD指令清方向标志使DF=0,在串操作指令执行时,按增量的方式修改吕指针.
CLD
处理器控制指令-标志位操作指令
格式:
3. 在8088/8086指令系统中,专门提供了一组根据带符号数比较大小后,实现条件转移的指令.
CMPS
字符串比较指令
格式: CMPS OPRD1,OPRD2
CMPSB
CMPSW
功能: 由SI寻址的源串中数据与由DI寻址的目的串中数据进行比较,比较结果送标志位,而不改变操作数本身.
同时SI,DI将自动调整.
CMC
处理器控制指令-标志位操作指令
格式:
CLC ;置CF=0
STC ;置CF=1
CMC ;置CF=(Not CF)进位标志求反
CLD ;置DF=0
STD ;置DF=1
CLI ;置IF=0,CPU禁止响应外部中断
STI ;置IF=1,使CPU允许向应外部中断
功能: 完成对标志位的置位、复位等操作.
说明: 例如串操作中的程序,经常用CLD指令清方向标志使DF=0,在串操作指令执行时,按增量的方式修改吕指针.
说明:
1. 实际上是两个未组合的十进制数字节相乘,一个0~9的数与另一个0~9的数相乘其积最大为81.为了得到正确的结果,应进行如下调整:
乘积: (AH)<--(AL)/10
(AL)<--(AL)MOD10
2. 本指令应跟在MUL指令后使用,乘积的两位十进制结果,高位放在AH中,低位放在AL中.AH内容是MUL指令的结果被10除的商,即(AL)/10,而最后的AL内容是乘积被10整除的余数(即个位数).
8086常用指令集

8086常⽤指令集⽬录从功能上包括六⼤类:数据传送算术运算逻辑运算和移位串操作程序控制处理器控制⼀、数据传输指令注意点:两操作数字长必须相同;两操作数不允许同时为存储器操作数两操作数不允许同时为段寄存器;在源操作数是⽴即数时,⽬标操作数不能是段寄存器;IP和CS不作为⽬标操作数,FLAGS⼀般也不作为操作数在指令中出现。
①通⽤数据传输指令1、传送指令MOVMOV ⽬的操作数,源操作数注意:⽬的操作数和源操作数不能是IP寄存器、类型必须相同,不可以同时为段寄存器不允许在两个存储单元中直接传送数据⽬的操作数不允许是⽴即数⽴即数不允许直接送⼊段寄存器2、交换指令XCHG格式:XCHG REG,MEM/REG注意:操作数不能为⽴即数、段寄存器两操作数必须有⼀个是寄存器操作数,不能同时为存储单元。
②堆栈操作指令堆栈操作的原则先进后出以字节为单位指令的操作数必须是16位操作数可以是寄存器或存储器两单元,但不能是⽴即数;不能从栈顶弹出⼀个字给CS;1、进栈指令PUSHPUSH 源操作数2、出栈指令POPPOP ⽬的操作数③累加器(即AX或AL)专⽤传输指令指令寻址⽅式根据端⼝地址码的长度,指令具有两种不同的端⼝地址表现形式。
直接寻址端⼝地址为8位时,指令中直接给出8位端⼝地址;寻址256个端⼝。
间接寻址端⼝地址为16位时,指令中的端⼝地址必须由DX指定;可寻址64K个端⼝。
acc(AL/AX)PORT(端⼝地址)1、输⼊指令ININ acc,PORT2、输出指令OUTOUT PORT,acc3、查表指令XLATXLAT说明:⽤BX的内容代表表格⾸地址,AL内容为表内位移量,BX+AL得到要查找元素的偏移地址操作:将BX+AL所指单元的内容送AL注意:执⾏该指令前需先执⾏:MOV BX,换码表的偏移⾸地址MOV AL,被转换码④⽬标地址传输指令取近地址指令:LEA取远地址指令:LDS、LESLDS和LES均⽤于将⼀个32位的远地址指针写⼊到⽬标寄存器。
8086汇编指令大全

8086汇编指令大全标志寄存器: 9个有效位,分6个状态寄存器和3个控制寄存器CF 当执行一个加法(减法)使最高位产生进位(借位)时CF=1 否则CF=0PF 指令执行的结果低8位有偶数个一时,CF=1 否则CF=0AF 当执行一个加法(减法)使运算结果低4位向高4位有进位(借位)时AF=1 否则 AF+0ZF 当前运算结果为零,ZF=1 否则ZF=0SF 符号标志位OF 溢出标志位DF 方向标志位IF 中断允许位 IF=1时响应外部中断TF 跟踪标志位操作数:[目的操作数(OPD),源操作数(OPS)] ;立即操作数,寄存器操作数,存储器操作数。
寻址方式:1) 寄存器寻址例: INC AX; MOV AX,BX2) 寄存器间接寻址(寄存器只能是BX,DI,SI,BP);[PA=(BX、DI、SI)+DS》4)或BP+SS》4]3) 寄存器相对寻址4) 基址变址寻址5) 相对基址变址寻址6) 直接寻址7) 立即数寻址i. 立即数寻址立即数寻址不能用在单操作数指令中ii. 在双操作数中,立即数寻址方式不能用于目的操作数字段指令系统:1) 数据传送指令 mov注意:不允许在两个存储单元之间直接传送数据不允许在两个段寄存器之间传送数据不允许用立即数直接为段寄存器赋值不影响标志位不允许寄存器或存储单元到除CS外的段寄存器2) 入栈(出栈)指令PUSH(POP)注意:PUSH操作数不能是“立即数”POP操作数不能是段寄存器CS 不影响标志位先进后出单操作符3) 交换指令XCHG注意:只允许寄存器与存储单元之间的交换不影响标志位4) 换码指令 XLAT5) 地址传送指令LEA(load effective address):偏移地址()6) 数据段指针送寄存器LDS :低地址的字送指定的通用寄存器(SI)、高地址的字送DS7) 附加段指针送寄存器指令LES :与LDS相似,低地址的字送通用寄存器(DI)、高地址送ES上三指令不影响标志位8) 标志寄存器传送指令LAHF :标志寄存器低八位送AHSAHF :AH送标志寄存器低八位PUSHF:标志寄存器压入堆栈POPF :栈顶内容送标志寄存器9) 加法指令 ADD目的操作数只能是寄存器或存储单元对CF,OF,SF,PF,ZF,AF有影响10) 加1指令 INC对OF,SF,PF,ZF,AF有影响11) 带位加法指令 ADC在进行单精度运算时用ADD指令,在高精度低位运算时用ADD、高位用ADCOPD=OPD+OPS+CF12) 减法指令 SUB对CF,OF,SF,PF,ZF,AF有影响13) 带借位减法指令 SBBOPD=OPD—OPS—CF对CF,OF,SF,PF,ZF,AF有影响对CF,OF,SF,PF,ZF,AF有影响14) 减1指令 DEC15) 比较指令 CMP16) 求补指令 NEG17) 无符号乘法指令 MUL字节操作:AX=AL*OPS字操作:DX,AX=AX*OPS18) 有符号乘法指令 IMUL19) 无符号除法指令 DIV字节的操作:AL=AX/(OPS)的商AH=AX/(OPS)的余数字的操作:20) 有符号除法 IDIV21) 字节转换为字指令 CBW把AL中的符号位扩展到AH中,如果AL的最高位为0,则AH=00H,如果最高位为1,则AH=FFH22) 字转换为双字指令 CWD23) 压缩的BCD码调整指令DAA 加法的十进制调整指令DAS 减法的十进制调整指令24) 非压缩的BCD码调整指令AAA 加法的ASCII调整指令AAS 减法的ASCII调整指令AAM 乘法的ASCII调整指令AAD 除法的ASCII调整指令25) 逻辑与运算指令ADDORNOTTEST(OPD和OPS的内容不变)26) 移位指令逻辑左移与算术左移SHL、SAL(低位补0)算术右移 SAR(高位不变、CF为最后移入的值)逻辑右移 SHR(高位补0、CF为最后移入的值)27) 循环移位左移 ROL (CF为最后移入的值)右移 ROR (CF为最后移入的值)带进位循环左移 RCL(CF+OPD 一起左循环)带进位循环右移 RCR(OPD+CF 一起右循环)28) 无条件转移指令下JMPJMP SHORT OPD(IP=IP+8位位移量)JMP NEAR PTR OPD(IP=IP+16位位移量)上二条指令目的地址是IP=OPD+IPJMP WORD PTR OPD(IP=EA)JMP FAR PTR OPD(IP=OPD的段内偏移地址 CS=OPD段地址)JMP DWORD PTR OPD(IP=EA CS=EA+2)29) 条件转移指令JZ(JE)结果为0则转移(ZF=1)JNZ(JNE)结果不为0则转移(ZF=0)JS 结果为负则转移(SF=1)JNS 结果为正则转移(SF=0)JO 溢出则转移(OF=1)JNO 不溢出则转移(OF=0)JP(JPE)奇偶位为1则转移(PF=1)JNP(JPO)奇偶位不为1则转移(PF=0)JC(JNAE,JB)低于且不等于或进位位为1则转移(CF=1)JNC(JNE,JNB)高于或等于或进位位为0则转移(CF=0)30)。
8086汇编指令大全

SCAS串扫描.把AL或AX的内容与目标串作比较,比较结果反映在标志位.
LODS装入串.把源串中的元素(字或字节)逐一装入AL或AX中.(LODSB传送字符.LODSW传送字.LODSD传送双字.)
STOS保存串.是LODS的逆过程.
JC有进位时转移.
JNC无进位时转移.
JNO不溢出时转移.
JNP/JPO奇偶性为奇数时转移.
JNS符号位为"0"时转移.
JO溢出转移.
JP/JPE奇偶性为偶数时转移.
JS符号位为"1"时转移.
3>循环控制指令(短转移)
LOOPCX不为零时循环.
LOOPE/LOOPZCX不为零且标志Z=1时循环.
CWDE字转换为双字.(把AX中的字符号扩展到EAX中去)
CDQ双字扩展.(把EAX中的字的符号扩展到EDX中去)
三、逻辑运算指令
AND与运算.
OR或运算.
XOR异或运算.
NOT取反.
TEST测试.(两操作数作与运算,仅修改标志位,不回送结果).
SHL逻辑左移.
例:LGSDI,string;把段地址:偏移地址存到GS:DI.LSS传送目标指针,把指针内容装入SS.
例:LSSDI,string;把段地址:偏移地址存到SS:DI.
4.标志传送指令.
LAHF标志寄存器传送,把标志装入AH.
SAHF标志寄存器传送,把AH内容装入标志寄存器.
四、串指令
DS:SI源串段寄存器:源串变址.
ES:DI目标串段寄存器:目标串变址.
CX重复次数计数器.
8086指令集

8086指令集一、数据传送指令1.通用数据传送指令MOV(Move)传送PUSH(Push onto the stack)进栈POP(Pop from the stack)出栈XCHG(Exchange)交换.MOV指令格式为: MOV DST,SRC执行的操作:(DST)<-(SRC).PUSH进栈指令格式为:PUSH SRC执行的操作:(SP)<-(SP)-2((SP)+1,(SP))<-(SRC).POP出栈指令格式为:POP DST执行的操作:(DST)<-((SP+1),(SP))(SP)<-(SP)+2.XCHG 交换指令格式为:XCHG OPR1,OPR2执行的操作:(OPR1)<-->(OPR2)2.累加器专用传送指令IN(Input) 输入OUT(Output) 输出XLAT(Translate) 换码这组指令只限于使用累加器AX或AL传送信息..IN 输入指令长格式为: IN AL,PORT(字节)IN AX,PORT(字)执行的操作: (AL)<-(PORT)(字节)(AX)<-(PORT+1,PORT)(字)短格式为: IN AL,DX(字节)IN AX,DX(字)执行的操作: AL<-((DX))(字节)AX<-((DX)+1,DX)(字).OUT 输出指令长格式为: OUT PORT,AL(字节)OUT PORT,AX(字)执行的操作: (PORT)<-(AL)(字节)(PORT+1,PORT)<-(AX)(字)短格式为: OUT DX,AL(字节)OUT DX,AX(字)执行的操作: ((DX))<-(AL)(字节)((DX)+1,(DX))<-AX(字)在IBM-PC机里,外部设备最多可有65536个I/O端口,端口(即外设的端口地址)为0000~FFFFH.其中前256个端口(0~FFH)可以直接在指令中指定,这就是长格式中的PORT,此时机器指令用二个字节表示,第二个字节就是端口号.所以用长格式时可以在指定中直接指定端口号,但只限于前256个端口.当端口号>=256时,只能使用短格式,此时,必须先把端口号放到DX寄存器中(端口号可以从0000到0FFFFH),然后再用IN或OUT指令来传送信息..XLAT 换码指令格式为: XLAT OPR或: XLAT执行的操作:(AL)<-((BX)+(AL)) 3.有效地址送寄存器指令LEA(Load effective address)有效地址送寄存器LDS(Load DS with Pointer)指针送寄存器和DS LES(Load ES with Pointer)指针送寄存器和ES.LEA 有效地址送寄存器格式为: LEA REG,SRC执行的操作:(REG)<-SRC指令把源操作数的有效地址送到指定的寄存器中..LDS 指针送寄存器和DS指令格式为: LDS REG,SRC执行的操作:(REG)<-(SRC)(DS)<-(SRC+2)把源操作数指定的4个相继字节送到由指令指定的寄存器及DS寄存器中.该指令常指定SI寄存器..LES 指针送寄存器和ES指令格式为: LES REG,SRC执行的操作: (REG)<-(SRC)(ES)<-(SRC+2)把源操作数指定的4个相继字节送到由指令指定的寄存器及ES寄存器中.该指令常指定DI寄存器.4.标志寄存器传送指令LAHF(Load AH with flags)标志送AHSAHF(store AH into flags)AH送标志寄存器PUSHF(push the flags) 标志进栈POPF(pop the flags) 标志出栈.LAHF 标志送AH格式为: LAHF执行的操作:(AH)<-(PWS的低字节).SAHF AH送标志寄存器格式为: SAHF执行的操作:(PWS的低字节)<-(AH).PUSHF 标志进栈格式为: PUSHF执行的操作:(SP)<-(SP)-2((SP)+1,(SP))<-(PSW).POPF 标志出栈格式为: POPF执行的操作:(PWS)<-((SP)+1,(SP))(SP)<-(SP+2)二、算术指令1.加法指令ADD(add)加法ADC(add with carry)带进位加法INC(increment)加1.ADD 加法指令格式: ADD DST,SRC执行的操作:(DST)<-(SRC)+(DST).ADC 带进位加法指令格式: ADC DST,SRC执行的操作:(DST)<-(SRC)+(DST)+CF.ADD 加1指令格式: INC OPR执行的操作:(OPR)<-(OPR)+12.减法指令SUB(subtract)减法SBB(subtract with borrow)带借位减法DEC(Decrement)减1NEG(Negate)求补CMP(Compare)比较.SUB 减法指令格式: SUB DST,SRC执行的操作:(DST)<-(DST)-(SRC).SBB 带借位减法指令格式: SBB DST,SRC执行的操作:(DST)<-(DST)-(SRC)-CF.DEC 减1指令格式: DEC OPR执行的操作:(OPR)<-(OPR)-1.NEG 求补指令格式: NEG OPR执行的操作:(OPR)<- -(OPR).CMP 比较指令格式: CMP OPR1,OPR2执行的操作:(OPR1)-(OPR2)该指令与SUB指令一样执行减法操作,但不保存结果,只是根据结果设置条件标志西半球.3.乘法指令MUL(Unsigned Multiple)无符号数乘法IMUL(Signed Multiple)带符号数乘法.MUL 无符号数乘法指令格式: MUL SRC执行的操作:字节操作数:(AX)<-(AL)*(SRC)字操作数:(DX,AX)<-(AX)*(SRC).IMUL 带符号数乘法指令格式: IMUL SRC执行的操作:与MUL相同,但必须是带符号数,而MUL 是无符号数.4.除法指令DIV(Unsigned divide)无符号数除法IDIV(Signed divide)带符号数除法CBW(Convert byte to word)字节转换为字CWD(Contert word to double word)字转换为双字.DIV 无符号数除法指令格式: DIV SRC执行的操作:字节操作:(AL)<-(AX)/(SRC)的商(AH)<-(AX)/(SRC)的余数字操作: (AX)<-(DX,AX)/(SRC)的商(AX)<-(DX,AX)/(SRC)的余数.IDIV 带符号数除法指令格式: DIV SRC执行的操作:与DIV相同,但操作数必须是带符号数,商和余数也均为带符号数,且余数的符号与被除数的符号相同..CBW 字节转换为字指令格式: CBW执行的操作:AL的内容符号扩展到AH.即如果(AL)的最高有效位为0,则(AH)=00;如(AL)的最高有效位为1,则(AH)=0FFH.CWD 字转换为双字指令格式: CWD执行的操作:AX的内容符号扩展到DX.即如(AX)的最高有效位为0,则(DX)=0;否则(DX)=0FFFFH.这两条指令都不影响条件码.三、逻辑指令1.逻辑运算指令AND(and) 逻辑与OR(or) 逻辑或NOT(not) 逻辑非XOR(exclusive or)异或TEST(test) 测试.AND 逻辑与指令格式: AND DST,SRC执行的操作:(DST)<-(DST)^(SRC).OR 逻辑或指令格式: OR DST,SRC执行的操作:(DST)<-(DST)V(SRC).NOT 逻辑非指令格式: NOT OPR执行的操作:(OPR)<-(OPR).XOR 异或指令格式: XOR DST,SRC执行的操作:(DST)<-(DST)V(SRC).TEST 测试指令格式: TEST OPR1,OPR2执行的操作:(DST)^(SRC)两个操作数相与的结果不保存,只根据其特征置条件码2.移位指令SHL(shift logical left) 逻辑左移SAL(shift arithmetic left) 算术左移SHR(shift logical right) 逻辑右移SAR(shift arithmetic right) 算术右移ROL(Rotate left) 循环左移ROR(Rotate right) 循环右移RCL(Rotate left through carry) 带进位循环左移RCR(Rotate right through carry) 带进位循环右移格式: SHL OPR,CNT(其余的类似)其中OPR可以是除立即数以外的任何寻址方式.移位次数由CNT决定,CNT可以是1或CL.循环移位指令可以改变操作数中所有位的位置;移位指令则常常用来做乘以2除以2操作.其中算术移位指令适用于带符号数运算,SAL用来乘2,SAR用来除以2;而逻辑移位指令则用来无符号数运算,SHL用来乘2,SHR用来除以2.四、串处理指令1.与REP相配合工作的MOVS,STOS和LODS指令.REP重复串操作直到(CX)=0为上格式: REP string primitive其中String Primitive可为MOVS,LODS或STOS指令执行的操作:1)如(CX)=0则退出REP,否则往下执行.2)(CX)<-(CX)-13)执行其中的串操作4)重复1)~3).MOVS 串传送指令格式:可有三种MOVS DST,SRCMOVSB(字节)MOVSW(字)其中第二、三种格式明确地注明是传送字节或字,第一种格式则应在操作数中表明是字还是字节操作,例如:MOVS ES:BYTE PTR[DI],DS:[SI] 执行的操作:1)((DI))<-((SI))2)字节操作:(SI)<-(SI)+(或-)1,(DI)<-(DI)+(或-)1 当方向标志DF=0时用+,当方向标志DF=1时用- 3)字操作:(SI)<-(SI)+(或-)2,(DI)<-(DI)+(或-)2 当方向标志DF=0时用+,当方向标志DF=1时用- 该指令不影响条件码..CLD(Clear direction flag)该指令使DF=0,在执行串操作指令时可使地址自动增量;.STD(Set direction flag)该指令使DF=1,在执行串操作指令时可使地址自动减量..STOS 存入串指令格式: STOS DSTSTOSB(字节)STOSW(字)执行的操作:字节操作:((DI))<-(AL),(DI)<-(DI)+-1字操作: ((DI))<-(AX),(DI)<-(DI)+-2该指令把AL或AX的内容存入由(DI)指定的附加段的某单元中,并根据DF的值及数据类型修改DI的内容,当它与REP联用时,可把AL或AX的内容存入一个长度为(CX)的缓冲区中..LODS 从串取指令格式: LODS SRCLODSBLODSW执行的操作:字节操作:(AL)<-((SI)),(SI)<-(SI)+-1字操作: (AX)<-((SI)),(SI)<-(SI)+-2该指令把由(SI)指定的数据段中某单元的内容送到AL或AX中,并根据方向标志及数据类型修改SI的内容.指令允许使用段跨越前缀来指定非数据段的存储区.该指令也不影响条件码.一般说来,该指令不和REP联用.有时缓冲区中的一串字符需要逐次取出来测试时,可使用本指令.2.与REPE/REPZ和REPNZ/REPNE联合工作的CMPS和SCAS指令.REPE/REPZ 当相等/为零时重复串操作格式: REPE(或REPZ) String Primitive 其中String Primitive可为CMPS或SCAS指令.执行的操作:1)如(CX)=0或ZF=0(即某次比较的结果两个操作数不等)时退出,否则往下执行2)(CX)<-(CX)-13)执行其后的串指令4)重复1)~3).REPNE/REPNZ 当不相等/不为零时重复串操作格式: REPNE(或REPNZ) String Primitive 其中String Primitive可为CMPS或SCAS指令执行的操作:除退出条件(CX=0)或ZF=1外,其他操作与REPE 完全相同..CMPS 串比较指令格式: CMP SRC,DSTCMPSBCMPSW执行的操作:1)((SI))-((DI))2)字节操作:(SI)<-(SI)+-1,(DI)<-(DI)+-1字操作: (SI)<-(SI)+-2,(DI)<-(DI)+-2指令把由(SI)指向的数据段中的一个字(或字节)与由(DI)指向的附加段中的一个字(或字节)相减,但不保存结果,只根据结果设置条件码,指令的其它特性和MOVS指令的规定相同..SCAS 串扫描指令格式: SCAS DSTSCASBSCASW执行的操作:字节操作:(AL)-((DI)),(DI)<-(DI)+-1字操作: (AL)-((DI)),(DI)<-(DI)+-2该指令把AL(或AX)的内容与由(DI)指定的在附加段中的一个字节(或字)进行比较,并不保存结果,只根据结果置条件码.指令的其他特性和MOVS的规定相同.五、控制转移指令1.无条件转移指令.JMP(jmp) 跳转指令1)段内直接短转移格式:JMP SHORT OPR执行的操作:(IP)<-(IP)+8位位移量2)段内直接近转移格式:JMP NEAR PTR OPR执行的操作:(IP)<-(IP)+16位位移量3)段内间接转移格式:JMP WORD PTR OPR执行的操作:(IP)<-(EA)4)段间直接(远)转移格式:JMP FAR PTR OPR执行的操作:(IP)<-OPR的段内偏移地址(CS)<-OPR所在段的段地址5)段间间接转移格式:JMP DWORD PTR OPR执行的操作:(IP)<-(EA)(CS)<-(EA+2)2.条件转移指令1)根据单个条件标志的设置情况转移.JZ(或JE)(Jump if zero,or equal) 结果为零(或相等)则转移格式:JE(或JZ) OPR测试条件:ZF=1.JNZ(或JNE)(Jump if not zero,or not equal) 结果不为零(或不相等)则转移格式:JNZ(或JNE) OPR测试条件:ZF=0.JS(Jump if sign) 结果为负则转移格式: JS OPR测试条件:SF=1.JNS(Jump if not sign) 结果为正则转移格式:JNS OPR测试条件:SF=0.JO(Jump if overflow) 溢出则转移格式: JO OPR测试条件:OF=1.JNO(Jump if not overflow) 不溢出则转移格式: JNO OPR测试条件:OF=0.JP(或JPE)(Jump if parity,or parity even) 奇偶位为1则转移格式: JP OPR测试条件:PF=1.JNP(或JPO)(Jump if not parity,or parity odd) 奇偶位为0则转移格式: JNP(或JPO) OPR测试条件:PF=0.JB(或JNAE,JC)(Jump if below,or not above or equal,or carry) 低于,或者不高于或等于,或进位位为1则转移格式:JB(或JNAE,JC) OPR测试条件:CF=1.JNB(或JAE,JNC)(Jump if not below,or above or equal,or not carry) 不低于,或者高于或者等于,或进位位为0则转移格式:JNB(或JAE,JNC) OPR测试条件:CF=02)比较两个无符号数,并根据比较的结果转移.JB(或JNAE,JC)格式:同上.JNB(或JAE,JNC)格式:同上.JBE(或JNA)(Jump if below or equal,or not above) 低于或等于,或不高于则转移格式:JBE(或JNA) OPR测试条件:CFVZF=1.JNBE(或JA)(Jump if not below or equal,or above) 不低于或等于,或者高于则转移格式:JNBE(或JA) OPR测试条件:CFVZF=03)比较两个带符号数,并根据比较的结果转移.JL(或LNGE)(Jump if less,or not greater or equal) 小于,或者不大于或者等于则转移格式:JL(或JNGE) OPR测试条件:SFVOF=1.JNL(或JGE)(Jump if not less,or greater or equal)不小于,或者大于或者等于则转移格式:JNL(或JGE) OPR测试条件:SFVOF=0.JLE(或JNG)(Jump if less or equal,or not greater) 小于或等于,或者不大于则转移格式:JLE(或JNG) OPR 测试条件:(SFVOF)VZF=1.JNLE(或JG)(Jump if not less or equal,or greater) 不小于或等于,或者大于则转移格式:JNLE(或JG) OPR测试条件:(SFVOF)VZF=04)测试CX的值为0则转移指令.JCXZ(Jump if CX register is zero) CX寄存器的内容为零则转移格式:JCXZ OPR测试条件:(CX)=0注:条件转移全为8位短跳!3.循环指令.LOOP 循环指令格式: LOOP OPR测试条件:(CX)<>0.LOOPZ/LOOPE 当为零或相等时循环指令格式: LOOPZ(或LOOPE) OPR测试条件:(CX)<>0且ZF=1.LOOPNZ/LOOPNE 当不为零或不相等时循环指令格式: LOOPNZ(或LOOPNE) OPR测试条件:(CX)<>0且ZF=0这三条指令的步骤是:1)(CX)<-(CX)-12)检查是否满足测试条件,如满足则(IP)<-(IP)+D8的符号扩充.4.子程序.CALL调用指令.RET返回指令5.中断.INT指令格式: INT TYPE或 INT执行的操作:(SP)<-(SP)-2((SP)+1,(SP))<-(PSW)(SP)<-(SP)-2((SP)+1,(SP))<-(CS)(SP)<-(SP)-2((SP)+1,(SP))<-(IP)(IP)<-(TYPE*4)(CS)<-(TYPE*4+2).INTO 若溢出则中断执行的操作:若OF=1则:(SP)<-(SP)-2((SP)+1,(SP))<-(PSW)(SP)<-(SP)-2((SP)+1,(SP))<-(CS)(SP)<-(SP)-2((SP)+1,(SP))<-(IP)(IP)<-(10H)(CS)<-(12H).IRET 从中断返回指令格式: IRET执行的操作:(IP)<-((SP)+1,(SP))(SP)<-(SP)+2(CS)<-((SP)+1,(SP))(SP)<-(SP)+2(PSW)<-((SP)+1,(SP))(SP)<-(SP)+2六、处理机控制指令1.标志处理指令.CLC进位位置0指令(Clear carry)CF<-0.CMC进位位求反指令(Complement carry)CF<-CF .STC进位位置1指令(Set carry)CF<-1.CLD方向标志置0指令(Clear direction)DF<-0 .STD方向标志置1指令(Set direction)DF<-1.CLI中断标志置0指令(Clear interrupt)IF<-0 .STI中断标志置1指令(Set interrupt)IF<-02.其他处理机控制指令NOP(No Opreation) 无操作HLT(Halt) 停机WAIT(Wait) 等待ESC(Escape) 换码LOCK(Lock) 封锁这些指令可以控制处理机状态.这们都不影响条件码..NOP 无操作指令该指令不执行任何操作,其机器码占有一个字节,在调试程序时往往用这条指令占有一定的存储单元,以便在正式运行时用其他指令取代..HLT停机指令该指令可使机器暂停工作,使处理机处于停机状态以便等待一次外部中断到来,中断结束后可继续执行下面的程序..WAIT等待指令该指令使处理机处于空转状态,它也可以用来等待外部中断的发生,但中断结束后仍返回WAIT指令继续德行..ESC换码指令格式ESC mem其中mem指出一个存储单元,ESC指令把该存储单元的内容送到数据总线去.当然ESC指令不允许使用立即数和寄存器寻址方式.这条指令在使用协处理机(Coprocessor)执行某些操作时,可从存储器指得指令或操作数.协处理机(如8087)则是为了提高速度而可以选配的硬件..LOCK封锁指令该指令是一种前缀,它可与其他指令联合,用来维持总线的锁存信号直到与其联合的指令执行完为止.当CPU与其他处理机协同工作时,该指令可避免破坏有用信。
8086指令系统一览表资料

reg, mem
16+EA
2 ~ 4
LAHF
(AH)←(FR低字节)
4
1
SAHF
(FR低字节)←(AH)
4
1
PUSHF
(SP)←(SP)-2
((SP)+1, (SP))←(FR低字节)
10
1
POPF
(FR低字节)←((SP)+1, (SP))
(SP)←(SP)+2
8
1
算
术
运
算
mem, reg
reg, mem
reg, reg
reg, imm
mem, imm
acc, imm
16+EA
9+EA
3
4
17+EA
4
2 ~ 4
2 ~ 4
2
3 ~ 4
3 ~ 6
2 ~ 3
OR dst, src
(dst)←(dst)∨(src)
mem, reg
reg, mem
reg, reg
OUT DX, acc
(port)←(acc)
((DX))←(acc)
10
8
2
1
XLAT
11
1
LEA reg, src
(reg)←src
reg, mem
2+EA
2 ~ 4
LDS reg, src
(reg)←src
(DS)←(src+2)
reg, mem
16+EA
2 ~ 4
LES reg, src
(reg)←src
附录
8086汇编指令汇总

8086汇编指令汇总一、基本指令集1.MOV:用于将一个值从一个位置复制到另一个位置。
2.ADD:将两个操作数相加,并将结果存储在第一个操作数中。
3.SUB:将第二个操作数从第一个操作数中减去,并将结果存储在第一个操作数中。
4.INC:将指定的寄存器或内存位置的值加一5.DEC:将指定的寄存器或内存位置的值减一6.MUL:将两个操作数相乘,并将结果存储在累积寄存器中。
7.DIV:将累积寄存器的值除以指定的操作数,并将商存储在累积寄存器中,余数存储在另一个寄存器中。
二、数据传送指令1.MOVSB:从指定内存位置复制一个字节到另一个位置。
2.MOVSW:从指定内存位置复制一个字到另一个位置。
3.MOVSBW:从指定内存位置复制一个字节到另一个位置,并将其扩展为字。
4.LODSB:从指定内存位置加载一个字节到累积寄存器中。
5.LODSW:从指定内存位置加载一个字到累积寄存器中。
6.STOSB:将累积寄存器中的值存储到指定内存位置。
7.STOSW:将累积寄存器中的值存储到指定内存位置。
8.XCHG:交换两个操作数的值。
三、算术与逻辑指令1.AND:对两个操作数执行逻辑与操作,并将结果存储在第一个操作数中。
2.OR:对两个操作数执行逻辑或操作,并将结果存储在第一个操作数中。
3.XOR:对两个操作数执行逻辑异或操作,并将结果存储在第一个操作数中。
4.NOT:对指定的操作数执行逻辑非操作。
5.SHR:将指定操作数的位向右移动指定的位数。
6.SHL:将指定操作数的位向左移动指定的位数。
7.CMP:比较两个操作数的值,并设置相应的条件码。
四、控制转移指令五、字符串操作指令1.REP/REPE/REPZ:用于重复执行一些指令,并且在条件满足时继续执行,直到满足特定的条件。
2.MOVSB/MOVSW:从一个内存位置复制一个字节或字到另一个位置。
3.CMPSB/CMPSW:将两个内存位置的值进行比较。
4.SCASB/SCASW:在累积寄存器中查找指定的字节或字,并设置相应的条件码。