1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,8086,8088,的指令系统中包含,133,条基本指令,可以分为以下六个功能组。,(1),数据传送指令;,(2),算术运算指令;,(3),逻辑运算和移位指令;,(4),串操作指令;,(5),程序控制指令;,(6),处理器控制指令。,3.3 8086,指令系统,8086,数据传送指令有如下四类:,(1),通用传送指令;,(2),累加器专用传送指令;,(3),地址传送指令;,(4),标志传送指令。,3.3.1,数据传送指令,寄存器,存储器,I/O,端口,1,通用传送指令,(,General Purpose T
2、ransfer,),格式:,MOV DST,,,SRC,功能:把一个字节或字的源操作数送到目标操作数所,在的单元。,传送的是,字节,还是,字,取决于指令中,涉及的寄存器是,8,位还是,16,位。,具体来说可实现:,MOV mem/reg1,,,mem/reg2,指令中两操作数中至少有一个为寄存器,例,:MOVCL,,,DL,MOVAX,,,BX,MOVSI,,,CX,MOVCL,,,BX+5,MOV,reg,,,data ;,立即数送寄存器,MOV,mem,,,data ;,立即数送存储单元,MOV acc,,,mem,;,存储单元送累加器,MOV,mem,,,acc ;,累加器送存储单元,M
3、OV,segreg,,,mem/reg,;,存储单元,/,寄存器送,段寄存器,MOV,mem/reg,,,segreg,;,段寄存器送存储单,元,/,寄存器,MOV,指令使用规则:,IP,不能作目的寄存器,不允许,memmem,不允许,segregsegreg,立即数不允许作为目的操作数,不允许,segreg,立即数,源操作数与目的操作数类型要一致,几个不能传送的解决办法:,用,AX,作桥梁,存储器,存储器:,MOV AX,,,MEM1,MOV MEM2,,,AX,段寄存器,段寄存器:,MOV AX,,,DS,MOV ES,,,AX,段寄存器,立即数:,MOV AX,,,DATA,MOV DS
4、AX,2,、堆栈操作指令,什么是堆栈?,按,“,后进先出,(LIFO),”,方式工作的存储区域。堆栈以,字,为单位进行压入弹出操作。,规定由,SS,指示堆栈段的,段基址,,堆栈指针,SP,始终指向堆,栈,的,顶,部,,SP,的初值规定了所用堆栈区的大小。堆栈的最高地址叫栈底。,SP,SS,堆栈段,进栈方向,退栈方向,栈底,栈顶,压栈指令,PUSH,src,;,src,为,16,位操作数,例:,PUSHAX,;将,AX,内容压栈,执行操作:(,SP,),1,高字节,AH,(,SP,),2,低字节,AL,(,SP,)(,SP,),2,设(,AX,),=1020H,,,执行示意图如下图所示,低
5、地址,存储区,(,SS,段),执行前,(AX)=1020H,(,SP),存储区,(,SS,段),进栈方向,执行后,20,H,10,H,(AL),(AH),PUSH AX,指令执行示意图,(SP),-,2,(,SP),高地址,低地址,高地址,(,SP),-,1,向下生长,向低地址方向生长;,双字节操作,高对高,低对低;,“栈顶总满”,栈顶已经堆有数据。,8088/8086,的堆栈操作特点,压栈指令的格式为:,PUSH,reg,PUSH,mem/reg,PUSH,segreg,例如:,PUSH AX,PUSH BX,PUSH DS,注意进栈方向是,高地址,向,低地址,发展。,弹出指令,POP,de
6、st,例:,POPBX,;,将栈顶内容弹至,BX,执行操作:(,BL,)(,SP,),(,BH,)(,SP,),+1,(,SP,)(,SP,),+2,POP BX,的执行示意图如下图所示,低地址,存储区,(,SS,段),出栈方向,执行前,20,H,10,H,POP BX,指令执行示意图,(,SP),存储区,(,SS,段),执行后,(BX)=1020H,(SP),(SP)+1,(SP)+2,BX,20H,10H,高地址,低地址,高地址,堆栈指令使用时应注意几点:,堆栈操作总是按,字(双字节),进行,不能从栈顶弹出一个字给,CS,堆栈指针为,SS:SP,,,SP,永远指向栈顶,SP,自动进行增减量
7、2,,,+2,),3,地址传送指令,8086,指令系统中,有,3,条专用于传送地址的指令:,LEA,、,LDS,和,LES,。,(1),有效地址传送指令,格式:,LEA REG,,,SRC,功能:将源操作数的有效地址送到指定寄存器中。,其中,目标操作数,REG,是一个,16,位的通用寄存器。,说明:,REG,不能是段寄存器。,这条指令不影响标志位。,例:,LEABX,,,SI+10H,设:(,SI,),=1000H,则执行该指令后,(,BX,),=1010H,取地址指针指令,格式:,LDS REG,,,SCR,;,指针送寄存器和,DS,指令,LES REG,,,SCR,LDS,指令将源操
8、作数,SCR,指定的,4,个连续字节,前两字节作为偏移量,传送到,REG,中;后两字节作为段地址,传送到,DS,中。,LES,与,LDS,相似,但将段地址送到,ES,中。,例如,,LDS BX,,,1230H,将地址为,1230H,和,1231H,的内存单元中的,16,位数据作为偏移量,送入,BX,寄存器;将地址为,1232H,和,1233H,的内存单元中的,16,位数据作为段值,送入,DS,寄存器。,说明:,LDS,和,LES,指令中的,REG,不允许是段寄存器。,LDS,和,LES,指令均指令不影响标志位。,4.,标志传送指令,共有四条:,LAHF,、,SAHF,、,PUSHF,和,POP
9、F,(1),读取标志指令,LAHF,LAHF,把标志寄存器低,8,位中的,5,个标志位传送到,AH,中的指定位,如下图所示,:,OF,DF,IF,TF,SF,ZF,AF,PF,CF,AH,LAHF,指令的功能,FLAG,(2),设置标志指令,SAHF,SAHF,的功能与,LAHF,的功能正好相反,用图来示意,只要将上图中,5,个箭头方向反一下即可。,OF,DF,IF,TF,SF,ZF,AF,PF,CF,AH,SAHF,指令的功能,FLAG,执行的操作,:(SP)-1,标志寄存器高,8,位,(SP)-2,标志寄存器低,8,位,(SP),(SP)-2,(4),从栈顶弹出标志寄存器指令,POPF,执
10、行的操作,:,标志寄存器,低,8,位,(SP),标志寄存器,高,8,位,(SP)+1,(SP),(SP)+2,PUSHF,和,POPF,指令用于保护和恢复标志寄存器内容。,(,3),把标志寄存器推入栈顶指令,PUSHF,5.,数据交换指令,格式:,XCHG DST,,,SRC,功能:使源操作数与目的操作数相互交换。,说明:交换指令,XCHG,可以实现字节交换,也,可以实现字交换。,注意,:,两操作数中必须有一个在寄存器中;,操作数不能为段寄存器和立即数;,源和目地操作数类型要一致。,例,:,XCHG AL,,,BL,XCHG 2530H,,,CX,例如:,XCHG BX,,,BP+SI,假设该
11、指令执行前:(,BX,),=1234H,,(,BP,),=0100H,,,(,SI,),=0020H,,(,SS,),=1F00H,,(,1F120H,),=0000H,,,即源操作数物理地址,=1F00H,:,0100H+0020H,=1F00H,:,0120H=1F120H,交换前源操作数为,0000H,目标操作数为,1234H,;,则指令执行后,(,BX,),=0000H,,(,1F120H,),=1234H,6.,换码指令,(Translate),格式:,XLAT,功能:设,BX,指向一张,256,个字节的表的起点,,AL,为表的索引值,本指令执行后,AL,中即为查表所得到的信息,,X
12、LAT,经常用来把一种代码翻译成另一个代码。,30,31,32,.,39,41,42,.,45,46,.,42000H+,0,42000H+,11,0,1,2,9,A,B,E,F,十六进制数,ASCII,码表,存储器,例如:内存数据段有一张,16,进制数的,ASCII,码表,设首地址为,2000H,,如欲查出表中第,11,个代码(代码序号从,0,开始)即十六进制数,B,的,ASCII,码。,ASCII,表在,DS,段中,并假设,(DS)=4000H,。,则可用如下几条指令实现,:,MOV BX,,,2000H,;(,BX,),表首地址,MOV AL,,,0BH,;(,AL,),序号,XALT,
13、查表转换,执行后得到:(,AL,),=42H=,B,注意:转换表长度最大为,256,个表项,(,字节,),。,7,输入输出指令,(1),输入指令,格式:,IN AL,PORT,功能:把来自端口,PORT,的一个字节送入,AL,寄存器中,格式:,IN AX,PORT,功能:把来自,PORT,和,PORT+1,两个端口的数据构,成一个字送入,AX,寄存器中,IN AL,DX,IN AX,DX,(,2,)输出指令,格式:,OUT PORT,AL,功能:把,AL,寄存器中的一个字节送入端口,PORT,格式:,OUT PORT,AX,功能:把,AX,寄存器中的一个字送入,PORT,和,PORT+1,两个端口,OUT DX,AL,OUT DX,AX,数据传送指令中,除,SAHF,和,POPF,这两条指令外,其余所有指令均不影响标志位。,






