资源描述
1第四章 指令系统4.1 8086/8088指令系统概述指令系统概述4.2 8086指令系统指令系统2一、一、8086/8088指令系统的特点指令系统的特点1.指令系统的兼容性指令系统的兼容性2.指令格式的灵活性指令格式的灵活性3.寻址方式的多样性寻址方式的多样性4.可对多种类型的数据进行处理可对多种类型的数据进行处理5.可构成多处理机系统可构成多处理机系统3二、指令格式指令:指令:指令是指示计算机完成特定操作的命令指令是指示计算机完成特定操作的命令指令系统:指令系统:指令系统是计算机能够执行全部命令的集合,指令系统是计算机能够执行全部命令的集合,它取决于计算机的硬件设计。指令系统它取决于计算机的硬件设计。指令系统因机而异,没有通用性。因机而异,没有通用性。指令中应包含的信息:指令中应包含的信息:执行的运算执行的运算运算结果的去向运算结果的去向运算数据的来源运算数据的来源4指令格式:指令格式:指令格式:指令格式:操作码操作码操作数操作数,操作数操作数执行何种操作执行何种操作目的操作数目的操作数源操作数源操作数参加操作的数据参加操作的数据源操作数:源操作数:指令加工之前的数据指令加工之前的数据目的操作数:指令加工之后形成的数据目的操作数:指令加工之后形成的数据5 指令中的操作数表征方法指令中的操作数表征方法指令中的操作数表征方法指令中的操作数表征方法:表征参加操作的数据本身表征参加操作的数据本身立即数立即数表征数据存放的地址表征数据存放的地址 寄存器寄存器 存储器存储器6操作数类型操作数类型1、立即数操作数:、立即数操作数:表示参加操作的数据本身,可以是表示参加操作的数据本身,可以是8位或位或16位位例:例:MOVAX,1234H;AX1234HMOVBL,22H立即数无法作为目标操作数立即数无法作为目标操作数立即数可以是无符号或带符号数,其数值应在立即数可以是无符号或带符号数,其数值应在可取值范围内可取值范围内72、寄存器操作数:、寄存器操作数:表示参加运算的数存放在指令给出的寄存器中,可表示参加运算的数存放在指令给出的寄存器中,可以是以是16位或位或8位。位。例:例:MOVAX,BXMOVDL,CH83、存储器操作数:、存储器操作数:l例:例:MOVAX,1200HMOVAL,1200H22H11H1200H偏移地址偏移地址AHAL9例如:例如:MOVAL,BP该指令生成的机器码是该指令生成的机器码是8A4600H10三、寻址方式三、寻址方式计算机可以对存储器、寄存器中的数据进行各种操计算机可以对存储器、寄存器中的数据进行各种操作,如取数、存数、加运算、减运算等,这就需要找到作,如取数、存数、加运算、减运算等,这就需要找到数据的存放地址,再对其中的数据执行相应的操作,最数据的存放地址,再对其中的数据执行相应的操作,最后将运算结果送往指定的地址单元或寄存器。后将运算结果送往指定的地址单元或寄存器。指令的寻指令的寻址方式就是寻找指令操作数所在地址的方式址方式就是寻找指令操作数所在地址的方式,以确定数,以确定数据的来源和去处。熟练地掌握寻址方式对学习指令系统据的来源和去处。熟练地掌握寻址方式对学习指令系统和汇编语言程序设计具有重要作用。和汇编语言程序设计具有重要作用。下面介绍下面介绍8086/8088的几种寻址方式。的几种寻址方式。111.立即寻址立即寻址l指令操作数部分直接给出指令的操作数,它与指令操指令操作数部分直接给出指令的操作数,它与指令操作码相接,顺序存放在代码段中。立即数有作码相接,顺序存放在代码段中。立即数有8位和位和16位之分。位之分。例例1:MOVAH,36H;AH立即数立即数36HMOVCX,2A50H;CX立即数立即数2A50H12注意:注意:(1)立即寻址方式只能用于源操作数,主要用于给寄立即寻址方式只能用于源操作数,主要用于给寄存器赋值。存器赋值。(2)立即寻址方式不执行总线周期,执行速度快。立即寻址方式不执行总线周期,执行速度快。2.寄存器寻址寄存器寻址l操作数放在寄存器内,由指令直接给出某个寄存器操作数放在寄存器内,由指令直接给出某个寄存器的名字,以寄存器的内容作为操作数。的名字,以寄存器的内容作为操作数。l寄存器可以是寄存器可以是16位的位的AX、BX、CX、DX、SI、DI、SP、BP寄存器,也可以是寄存器,也可以是8位的位的AH、AL、BH、BL、CH、CL、DH、DL寄存器。寄存器。13例例2:MOVAX,CXDECAL注意:注意:(1)寄存器寻址方式的指令操作在寄存器寻址方式的指令操作在CPU内部执行,内部执行,不需要执行总线周期,执行速度快。不需要执行总线周期,执行速度快。(2)寄存器寻址方式既适用于指令的源操作数,也寄存器寻址方式既适用于指令的源操作数,也适用于目的操作数,并且可同时用于源操作数和目适用于目的操作数,并且可同时用于源操作数和目的操作数。的操作数。143.直接寻址直接寻址l操作数在存储器中,指令中直接给出操作数所在存储操作数在存储器中,指令中直接给出操作数所在存储单元的有效地址单元的有效地址EA,即段内偏移地址,表示操作数所即段内偏移地址,表示操作数所在存储单元距离段首址的字节数。有效地址是一个无在存储单元距离段首址的字节数。有效地址是一个无符号的符号的16位二进制数。位二进制数。例例3:MOVAH,2100H;将将DS段中段中2100H单元的内单元的内容送给容送给AHMOVAX,2100H;将将DS段中段中2100H单元的内单元的内容送给容送给AL;2101H单元的单元的内容送给内容送给AH。MOV1000H,AH;DS:1000H(AH)15DS=3000HMOVAX,2000H16注意:注意:(1)直接寻址方式的操作数所在存储单元的段地址直接寻址方式的操作数所在存储单元的段地址一般在数据段寄存器一般在数据段寄存器DS中。中。(2)如果操作数在其他段,则需要在指令中用段超如果操作数在其他段,则需要在指令中用段超越前缀指出相应的段寄存器名。越前缀指出相应的段寄存器名。例例4:MOVAH,ES 2000H将附加段寄存器将附加段寄存器ES的内容乘的内容乘16,再加上,再加上2000H作为操作数所在存储单元的地址,取作为操作数所在存储单元的地址,取出该存储单元的内容送到寄存器出该存储单元的内容送到寄存器AH中。中。174.寄存器间接寻址寄存器间接寻址l操作数在存储器中,指令中寄存器的内容作为操作操作数在存储器中,指令中寄存器的内容作为操作数所在存储单元的有效地址数所在存储单元的有效地址EA(偏移地址)。寄存偏移地址)。寄存器仅限于器仅限于BX、BP,SI、DI。l当使用当使用BX、SI、DI时,操作数所在存储单元的段地时,操作数所在存储单元的段地址存在数据段寄存器址存在数据段寄存器DS中中l当使用当使用BP时,操作数所在存储单元的段地址存在时,操作数所在存储单元的段地址存在堆栈段寄存器堆栈段寄存器SS中。中。SIDIBXBPEA=18MOVBX,SI19例例5:已知:已知:DS=2100H,DI=2000H指令:指令:MOVAX,DI解:解:物理地址物理地址=16DS+DI=162100H+2000H=23000H指令执行结果是将指令执行结果是将23000H和和23001H单元的内容送单元的内容送入寄存器入寄存器AX中。中。注意:注意:1.只有只有SI,DI,BX,BP可作为间址寄存器。可作为间址寄存器。2.若操作数所在存储单元不在数据段若操作数所在存储单元不在数据段DS中,需要在指中,需要在指令中用段超越前缀表明其所在段的段名。令中用段超越前缀表明其所在段的段名。205.基址寻址基址寻址l操作数在存储器内,指令中寄存器(操作数在存储器内,指令中寄存器(BX或或BP)的内容的内容与指令指定的位移量之和作为操作数所在存储单元的与指令指定的位移量之和作为操作数所在存储单元的有效地址有效地址EA(偏移地址)。偏移地址)。l使用使用BX时,段地址为时,段地址为DS的内容;的内容;使用使用BP时,段地址为时,段地址为SS的内容。的内容。BX8位或位或16位位BP位移量位移量EA=+21例例6:SS=2000H,BP=1000H,COUNT=2000H(16位偏移量位偏移量)指令:指令:MOVAX,COUNTBP解:物解:物理地址理地址=16SS+BP+16位偏移量位偏移量=20000H+1000H+2000H=23000H指令执行结果是将指令执行结果是将23000H和和23001H单元的内容送单元的内容送入寄存器入寄存器AX中。中。MOVBL,2BX或或MOVBL,BX+2;(DS:BX+2)BL226.变址寻址变址寻址l操作数在存储器内,指令将变址寄存器操作数在存储器内,指令将变址寄存器SI、DI内容与内容与指令指定的位移量之和作为操作数所在存储单元的有指令指定的位移量之和作为操作数所在存储单元的有效地址效地址EA(偏移地址)。段地址规定为偏移地址)。段地址规定为DS的内容。的内容。SI8位或位或16位位DI位移量位移量EA=+例例7:DS=3000H,SI=1000H,COUNT=2000H指令:指令:MOVAX,COUNTSI解:物理地址解:物理地址=16DS+SI+16位偏移量位偏移量=30000H+1000H+2000H=33000H指令执行结果是将指令执行结果是将33000H和和33001H单元的内容送入单元的内容送入寄存器寄存器AX中。中。23MOVAX,2DI;AX(DS:(DI)+2)MOVAX,DI+2;AX(DS:(DI)+2)MOVBX,COUNTSI247.基址基址加变址寻址加变址寻址l操作数在存储器内。指令将基址寄存器操作数在存储器内。指令将基址寄存器BX、BP与变与变址寄存器址寄存器SI、DI的内容之和再加上偏移量(的内容之和再加上偏移量(8位或位或16位),得到操作数所在存储单元的有效地址位),得到操作数所在存储单元的有效地址EA。l当使用当使用BX时,段寄存器为时,段寄存器为DS。当使用当使用BP时,段寄存器为时,段寄存器为SS。BXSI8位或位或16位位BPDI位移量位移量EA=+25例例8:已知:已知:DS=2000H,BX=1000H,SI=0500H,MK=1120H指令:指令:MOVAX,MKBXSI解:解:物理地址物理地址=20000H1000H0500H1120H=22620H指令执行结果是指令执行结果是将将22620H、22621H单元单元的内容送入寄存器的内容送入寄存器AX中。中。26MOVAX,BXSI278.字符串寻址字符串寻址l用于字符串操作指令。规定变址寄存器用于字符串操作指令。规定变址寄存器SI中的内容中的内容是源数据串的段内偏移地址,而变址寄存器是源数据串的段内偏移地址,而变址寄存器DI中的中的内容是目标数据串的段内偏移地址。内容是目标数据串的段内偏移地址。l源数据串的段地址规定是数据段源数据串的段地址规定是数据段DS,目标数据串目标数据串的段地址规定是附加段的段地址规定是附加段ES。指令执行后指令执行后SI和和DI的的内容自动增量(或减量),增(或减)值为内容自动增量(或减量),增(或减)值为1或或2。例例:MOVSB执行后:执行后:DISISISI1DIDI128 9.9.I/OI/O端口寻址端口寻址l寻找输入输出设备的端口地址,可分为直接端口寻寻找输入输出设备的端口地址,可分为直接端口寻址址和间接端口寻址。和间接端口寻址。直接端口寻址直接端口寻址:由指令直接给出:由指令直接给出I/O设备的端口地址。设备的端口地址。它规定端口地址为它规定端口地址为8位,能寻址位,能寻址256个端口个端口间接端口寻址间接端口寻址:由:由DX给出给出I/O设备的端口地址。由于设备的端口地址。由于DX是是16位,因此间接端口寻址能寻址多达位,因此间接端口寻址能寻址多达64K个端口。个端口。例:例:INAL,20H;将地址为;将地址为20H的外设内容读入的外设内容读入AL中中OUTDX,AL;AL中内容输出给以中内容输出给以DX的内容为地址的内容为地址的外设的外设2910、隐含寻址隐含寻址指令隐含了的一个或两个操作数的地址,即操作数指令隐含了的一个或两个操作数的地址,即操作数在默认的地址中。在默认的地址中。例:例:AAA;对对ALAL中的内容进行十进制加法调整,并中的内容进行十进制加法调整,并 把调整后的结果放入把调整后的结果放入AHAH和和ALAL中。这条指中。这条指令的隐含操作数是令的隐含操作数是AHAH和和ALAL。30例例:设设BX=0158H,DI=10A5H,位位移移量量=1B57H,DS=2100H,求求各各寻寻址址方方式式下的有效地址和物理地址。下的有效地址和物理地址。1)直接寻址直接寻址MOVAX,1B57H有效地址有效地址=1B57H物理地址物理地址=21000H+1B57H=22B57H2)寄存器间接寻址寄存器间接寻址MOVAX,BX有效地址有效地址=0158H物理地址物理地址=21000H+0158H=21158H3)基址寻址基址寻址MOVAX,BX+1B57H有效地址有效地址=0158H+1B57H=1CAFH物理地址物理地址=21000H+1CAFH=22CAFH4)变址寻址变址寻址MOVAX,DI+1B57HEA=10A5H+1B57H=2BFCH物理地址物理地址=21000H+2BFCH=23BFCH5)基址加变址寻址基址加变址寻址MOVAX,BX+DI+1B57HEA=0158H+10A5H+1B57H=2D54H物理地址物理地址=21000H+2D54H=23D54H314.2 8086的指令系统的指令系统指令系统包括九大类、指令系统包括九大类、133种基本指令,通过寻址种基本指令,通过寻址方式的变化与数据形式(字节、字型)的组合,可构方式的变化与数据形式(字节、字型)的组合,可构成上千条指令。指令系统按功能分为数据传送类、算成上千条指令。指令系统按功能分为数据传送类、算术运算类、逻辑运算与移位类、串操作类、控制转移术运算类、逻辑运算与移位类、串操作类、控制转移类、处理机控制、输入输出、中断等类、处理机控制、输入输出、中断等,本节将分别说本节将分别说明。明。324.2.1数据传送指令数据传送指令数据传送类指令实现数据传送类指令实现CPU内部寄存器之间、内部寄存器之间、CPU与存与存储器之间、储器之间、CPU与与I/O端口之间的数据传送。端口之间的数据传送。1.通用数据传送指令通用数据传送指令包括包括MOV、进栈、出栈指令、交换指令和换码指令。、进栈、出栈指令、交换指令和换码指令。(1)一般数据传送指令)一般数据传送指令MOV(8位位/16位)位)格式:格式:MOVOP目,目,OP源源功能:功能:OP源源OP目目要求:要求:OP目目可以是寄存器(除可以是寄存器(除CSCS外)、存储器外)、存储器OP源源可以是寄存器、存储器和立即数可以是寄存器、存储器和立即数3334例:例:MOVAL,BL;BL寄存器的内容送寄存器的内容送ALMOVSP,2AC0H;立即数立即数2AC0H送送SPMOVDI,AX;AX中的中的16位数送位数送DI和和DI+1单元单元 MOVSI,ES:BP;附加段中附加段中BP所指向的两个单所指向的两个单元的内容送元的内容送SI寄存器寄存器MOVWORDPTRSI,6070H35注意:注意:lMOV指令的两个操作数(源、目的)均可采用不同的指令的两个操作数(源、目的)均可采用不同的寻址方式。寻址方式。l源操作数和目的操作数的类型必须一致源操作数和目的操作数的类型必须一致l不允许把立即数作目的操作数,也不允许向段寄存器不允许把立即数作目的操作数,也不允许向段寄存器送立即数。送立即数。l不允许在段寄存器之间、存储器单元之间传送数据。不允许在段寄存器之间、存储器单元之间传送数据。lCS、IP寄存器不能用作目的操作数。寄存器不能用作目的操作数。MOVCS,AX l一般传送指令不影响标志位。一般传送指令不影响标志位。36例:判断下列指令正确与否:例:判断下列指令正确与否:MOVAL,BLMOVCX,BXMOVBX,DLMOVDX,34HMOVDS,1234HMOVES,AXMOVCS,BXMOVSI,CXMOVDI,SIMOV2000H,AX 类型不一致类型不一致类型不一致类型不一致类型不一致类型不一致立即数不能送段寄存器立即数不能送段寄存器类型不一致类型不一致立即数不能送段寄存器立即数不能送段寄存器类型不一致类型不一致立即数不能送段寄存器立即数不能送段寄存器CS不能作目的操作数不能作目的操作数类型不一致类型不一致立即数不能送段寄存器立即数不能送段寄存器CS不能作目的操作数不能作目的操作数类型不一致类型不一致立即数不能送段寄存器立即数不能送段寄存器CS不能作目的操作数不能作目的操作数不能同时为存储器操作数不能同时为存储器操作数类型不一致类型不一致立即数不能送段寄存器立即数不能送段寄存器CS不能作目的操作数不能作目的操作数不能同时为存储器操作数不能同时为存储器操作数目的不能为立即数目的不能为立即数37(2)堆栈操作指令堆栈操作指令堆栈:是按堆栈:是按“后进先出后进先出”原则工作的一段存储器区域。原则工作的一段存储器区域。堆栈寄存器堆栈寄存器SS段地址段地址堆栈指针堆栈指针SP始终当前栈顶所在的存储单元地址,始终当前栈顶所在的存储单元地址,即最新入栈数据所在的存储单元的地址。即最新入栈数据所在的存储单元的地址。l压栈操作:压栈操作:PUSHOP功能:把功能:把OP字数据压入栈中,结果字数据压入栈中,结果SP-2SP原则:高字节压在高地址,低字节压在低地址原则:高字节压在高地址,低字节压在低地址执行过程:执行过程:SPSP-1;SPOPHSPSP-1;SPOPL38例:例:PUSHAX(1)SP-1SP,压压AH(2)SP-1SP,压压ALSPSPSP-1SPAHALSPSP-139l出栈操作:出栈操作:POPOP功能:从栈中弹出数据功能:从栈中弹出数据OP,结果结果SP+2SP执行过程:执行过程:OPLSP;SPSP+1OPHSP;SPSP+1例:例:POPDX(1)弹出弹出ALDL,SP+1SP(2)弹出弹出AHDH,SP+1SPSPSPSP+1SPSP+1SPAHALDXDHDLALAH40例:已知:例:已知:AX=1122H,BX=3344H,SP=1010H执行指令:执行指令:PUSHAXPUSHBXPOP AXPOPBX执行后执行后AX,BX,SP的结果?的结果?解:执行结果为解:执行结果为AX=3344HBX=1122HSP=1010H41注意:注意:l堆栈操作总是按字进行的。堆栈操作总是按字进行的。l压入指令压入指令,SPSP-2-2,数据在栈顶。弹出指令正好相反。,数据在栈顶。弹出指令正好相反。l操作数可以是存储器、寄存器或段寄存器操作数(操作数可以是存储器、寄存器或段寄存器操作数(CS不能用于不能用于POP),不能是立即数。),不能是立即数。PUSH CS PUSH CS POP CS POP CS PUSH 1200H PUSH 1200H POP 2300H POP 2300H l这两条指令主要用来进行现场保护和恢复,以保证子这两条指令主要用来进行现场保护和恢复,以保证子程序调用或中断程序的正常返回。程序调用或中断程序的正常返回。42(3)数据交换指令(数据交换指令(8/16位)位)格式:格式:XCHGOP1,OP2功能:实现功能:实现OP1和和OP2内容的相互交换。内容的相互交换。操作数:通用寄存器或存储器,但不能均为内存操作数:通用寄存器或存储器,但不能均为内存单元。单元。注意:注意:段寄存器和段寄存器和IP不能作为交换指令的操作数。不能作为交换指令的操作数。例:例:XCHGAX,BXXCHGBH,BLXCHGAX,1122HXCHGDS,AXXCHGSI,BPXCHGSI,DI43(4)换码指令(查表指令、翻译指令)换码指令(查表指令、翻译指令)换码指令是一条完成字节翻译功能的指令。它可以使换码指令是一条完成字节翻译功能的指令。它可以使累加器中的一个值变换为内存表格中的某一个值,一般用累加器中的一个值变换为内存表格中的某一个值,一般用来实现编码制的转换。来实现编码制的转换。格式:格式:XLAT功能功能:BX+ALALEA说明:将说明:将BX和和AL内容相加作为有效地址内容相加作为有效地址EA,在一个表在一个表格中找出此单元中的内容格中找出此单元中的内容AL中。中。BX表格的首地址表格的首地址AL相对于表格首地址的位移量相对于表格首地址的位移量(要转换的代码)要转换的代码)44注意:注意:1.使用前,先建立被转换代码(字节型)的数据表。使用前,先建立被转换代码(字节型)的数据表。2.换码指令只能使用寄存器换码指令只能使用寄存器BX、AL,不影响标志位。不影响标志位。45例例:数数据据段段中中存存放放有有一一张张ASCIIASCII码码转转换换表表,设设首首地地址址为为20002000H H,现现欲欲查查出出表表中中第第9 9个个代代码码的的ASCIIASCII码码(设设DS=4000HDS=4000H)。)。303132.394142.4546.42000H+042000H+90129ABEF可用如下指令实现:可用如下指令实现:MOV BXMOV BX,2000H 2000H;BXBX表首地址表首地址MOV ALMOV AL,09H 09H ;ALAL序号序号XALT XALT ;查表转换查表转换 执行后得到:执行后得到:AL=39HAL=39H462.目标地址传送指令目标地址传送指令l此类指令的功能是将操作数所在存储器的地址送入此类指令的功能是将操作数所在存储器的地址送入目标寄存器。目标寄存器。l注意:注意:1.OP源必须是存储器操作数,源必须是存储器操作数,OP目必须是目必须是16位的通用寄存器位的通用寄存器。2.地址传送指令不影响状态标志位。地址传送指令不影响状态标志位。(1 1)取有效地址)取有效地址)取有效地址)取有效地址EAEA指令:指令:指令:指令:格式:格式:格式:格式:LEAOPLEAOP目目目目,OPOP源源源源 功能:功能:功能:功能:将源操作数的有效地址将源操作数的有效地址将源操作数的有效地址将源操作数的有效地址EAEA送到目的操作数。送到目的操作数。送到目的操作数。送到目的操作数。例:例:例:例:LEAAXLEAAX,5678H5678H;AX5678HAX5678H LEALEABXBX,BP+SIBP+SI;BXBP+SIBXBP+SI47DATA112H34H1100H88H77HBX=1100H注意区分下列指令:注意区分下列指令:LEASI,DATA1MOVSI,DATA1MOV SI,OFFSET DATA1 SI,OFFSET DATA1MOVBX,BXLEABX,BX符号符号地址地址48(2)指针送寄存器和)指针送寄存器和DS指令指令格式:格式:LDSOP目,目,OP源源 功能:把功能:把OP源源指定的指定的4 4个字节内容取出,低地址的两个字节内容取出,低地址的两字节字节OP目目,高地址的两字节,高地址的两字节DSDS。例:例:LDS DILDS DI,2130H2130H;21302130H H和和21312131H H单元中的内容单元中的内容DIDI;2132H2132H和和21332133H H单元中的内容单元中的内容DSDS2130H2131H2132H2133HDI=1234HDS=5678H34H12H78H56H49结果:结果:DI=1234HAX=2233HAX2233DI123412H34H00H60H1200H数数据据段段1数数据据段段233H22H61234H例:下列指令执行后例:下列指令执行后DI,AX的值是多少?的值是多少?LDSDI,1200HMOVAX,DI50(3 3 3 3)指针送寄存器和指针送寄存器和指针送寄存器和指针送寄存器和ESESESES指令指令指令指令 格式:格式:LES OP目,目,OP源源功功能能:本本指指令令与与LDS指指令令的的操操作作基基本本相相同同,所所不不同同的的是是将将OP源源4个字节中高地址的两字节个字节中高地址的两字节ES。例:例:LES DILES DI,2130H2130H;2130 2130H H和和21312131H H单元中的内容单元中的内容DIDI;2132H 2132H和和21332133H H单元中的内容单元中的内容ESES2130H2131H2132H2133HDI=1234HES=5678H34H12H78H56H513.标志寄存器传送指令标志寄存器传送指令(1)(1)读取标志指令读取标志指令 格式:格式:LAHFLAHF ;AH标志寄存器低标志寄存器低8位位特点:特点:此指令操作结果不影响标志寄存器。此指令操作结果不影响标志寄存器。(2)(2)设置标志指令设置标志指令 格式:格式:SAHF SAHF;标志寄存器低标志寄存器低8位位AH特点:特点:此指令直接为标志寄存器的低此指令直接为标志寄存器的低8位赋值。位赋值。SFPFAFZFCF.AH标志寄存器D15D7D052(3)(3)对标志寄存器的堆栈操作指令对标志寄存器的堆栈操作指令 格式:格式:PUSHFPUSHF;将标志寄存器的值压栈。将标志寄存器的值压栈。POPF POPF;从栈顶弹出一个字送标志寄存器。从栈顶弹出一个字送标志寄存器。特点特点:1.1.PUSHFPUSHF不影响标志寄存器,而不影响标志寄存器,而POPFPOPF直接为标志直接为标志寄存器赋值。寄存器赋值。2.通常两指令成对出现,用来保护和恢复标志寄通常两指令成对出现,用来保护和恢复标志寄存器的内容。存器的内容。534.2.2算术运算指令算术运算指令8086的算术运算类指令能够对二进制或十进制的算术运算类指令能够对二进制或十进制(BCD码码)数进行加、减、乘、除运算,操作数的数据形数进行加、减、乘、除运算,操作数的数据形式可以是式可以是8位或位或16位的无符号数或带符号数。位的无符号数或带符号数。1.加法指令加法指令(1)不带进位的加法指令:不带进位的加法指令:格式:格式:ADDOP目目,OP源源;功能:功能:OP目目OP源源+OP目,根据结果设置标志位目,根据结果设置标志位 例:例:ADD ALADD AL,50H50H;ALAL+50+50H HALAL ADD DI ADD DI,SI SI ;DI+SI DI+SI DI DI ADD AX ADD AX,DIDI;(DI)、(DI+1)内容内容+AXAXAX54ADD ADD BX+DIBX+DI,AX AX;(BX+DI)(BX+DI)和和(BX+DI+1)2BX+DI+1)2个个单单元元的的内内 容容+AXAX,结结 果果 放放 在在 BX+DIBX+DI和和BX+DI+1BX+DI+1所指单元所指单元 ADD ADD AXAX,BX+2000H BX+2000H;BX+2000H BX+2000H 和和BX+2001HBX+2001H所所指指单单元元内内容容和和AXAX的的内内容容相相加加,结结果果在在AXAX中中注意:两操作数的类型相同,类型明确,不能同为存注意:两操作数的类型相同,类型明确,不能同为存储器操作数储器操作数55例:判断下列指令正确与否例:判断下列指令正确与否例:判断下列指令正确与否例:判断下列指令正确与否ADDAL,BXADDCL,CHADDAX,BXADDBX,SIADD1000H,AXADDSI,BX56(2)进位的加法指令:进位的加法指令:格式:格式:ADCOP目目,OP源源;功能:功能:OP目目OP源源+OP目目+CF,置标志位,置标志位CF为前面指令产生的为前面指令产生的CF说明:主要用于说明:主要用于多字节运算多字节运算,多字节运算时低位字节,多字节运算时低位字节产生的进位应加到高位。产生的进位应加到高位。例:例:ADC AXADC AX,SI SI;AX AX+SI+CFSI+CFAXAX例例:两个双字两个双字(32(32位位)相加。相加。123FAB5H+0ABC212AH MOV DX MOV DX,0123H0123H MOV AX MOV AX,0FAB5H0FAB5H ADD AX ADD AX,212AH ;212AH ;先加低字,先加低字,CF=1 AX=1BDFHCF=1 AX=1BDFH ADC DX ADC DX,0ABCH;0ABCH;高字带进位加高字带进位加 CF=0 DX=0BE0HCF=0 DX=0BE0H0123FAB5+0ABC212A0BE01BDF57MOVAX,FIRSTADDAX,SECONDMOVFIRST,AXMOVAX,FIRST+2ADCAX,SECOND+2MOVFIRST+2,AX例例:有有两两个个4字字节节数数分分别别放放在在自自FIRST和和SECOND开开始始的的存存储储区区中中,低低字字节节在在低低地地址址处处,编编一一程程序序段段将将两两数相加,结果存放于从数相加,结果存放于从FIRST开始的存储区中。开始的存储区中。12H34H00H60HFIRSTX190H00HSECOND10H00HX2Y1Y258(3)加)加1指令指令格式:格式:INCOP功能:功能:OPOP+1说说明明:常常用用于于修修改改偏偏移移地地址址和和计计数数次次数数。操操作作数数可可以以是是8/168/16位位通通用用寄寄存存器器或或存存储储器器操操作作数数,不不能能为为立即数。立即数。例:例:INCINC ALAL;ALAL+1INC BYTE PTR BX+DIINC BYTE PTR BX+DI;BX+DIBX+DI+1BX+DIBX+DI+1例:判断对错例:判断对错 INCCLINCDIINCBYTEPTRDIINC2000H59注意:注意:INC指令指令不影响不影响CF位位,影响标志位影响标志位AF、OF、PF、SF和和ZF。操作数视为无符号数。操作数视为无符号数。总结:以上三条指令运算结果将影响状态标志位,总结:以上三条指令运算结果将影响状态标志位,但但INC不影响标志不影响标志CF。602.减法指令减法指令(1)不带借位的减法指令)不带借位的减法指令格式:格式:SUBOP目,目,OP源源功能:功能:OP目目OP目目-OP源源,并根据结果设置标志,并根据结果设置标志例:例:SUBBX,CX;BX-CXBXSUBAL,SI+2;AL-(SI+2)单元中的数单元中的数AL SUBAL,20;AL-20AL61(2)带借位的减法指令)带借位的减法指令格式:格式:SBBOP目,目,OP源源功能:功能:OP目目OP目目-OP源源-CF,根据结果设置标志,根据结果设置标志说明:主要用于多字节或多精度数据相减的运算说明:主要用于多字节或多精度数据相减的运算例:例:SBBAX,2030H;AX-2030H-CFAX SBBWORDPTRDI+2,1000H;将将DI+2和和DI+3所指两单元的内容所指两单元的内容-1000H-CF,结果存在结果存在DI+2和和DI+3所指的单元所指的单元62(3)减)减1指令指令格式:格式:DECOP功能:功能:OPOP-1;根据结果置标志位,;根据结果置标志位,不影响不影响CF。例:例:DECAX;AX-1AX DECBL;BL-1BLDECBYTEPTRDI+2;将将DI+2所所指指单单元元的的内内容容减减1,结结果果送送回回此单元此单元63(4)取补指令)取补指令格式:格式:NEGOP功能:功能:0-OPOP,将操作数取补后送回原操作数将操作数取补后送回原操作数OP可以是可以是8/16位通用寄存器和存储器操作数,位通用寄存器和存储器操作数,不能为立即数。不能为立即数。例:例:NEGAL;0-ALAL 注意:注意:(1)对对80H或或8000H取补时,操作数没有变化,但取补时,操作数没有变化,但OF=1。(2)对对CF影响较特殊,只要操作数不是影响较特殊,只要操作数不是0,总是使,总是使CF=1。64(5)比较指令比较指令:格式:格式:CMP OP OP目,目,OPOP源源 功能:功能:OPOP目目-OPOP源,不回送结果,只根据结果置标志位。源,不回送结果,只根据结果置标志位。例:例:CMP AX,BX;AX-BX,根据,根据结果置标志位结果置标志位CMPAL,20H;AL-20H,根据,根据结果置标志位结果置标志位说明:本指令主要通过比较(相减)结果置标志位,表说明:本指令主要通过比较(相减)结果置标志位,表示两个操作数的关系,示两个操作数的关系,指令执行的结果不影响目指令执行的结果不影响目标操作数标操作数。用途:用于比较两个数的大小,可作为条件转移指令转用途:用于比较两个数的大小,可作为条件转移指令转移的条件移的条件65比较有以下几种情况(以比较有以下几种情况(以CMPA,B示例说明)示例说明)1.判断两个操作数是否相等:判断两个操作数是否相等:根据根据ZF判断判断2.判断两个操作数的大小,可分两种情况:判断两个操作数的大小,可分两种情况:(1)判断两个无符号操作数的大小:判断两个无符号操作数的大小:根据根据CF判断判断ZF=1,ABJZZF=0,ABJNZCF=1,ABJCCF=0,ABJNC66(2)判断两个带符号操作数的大小判断两个带符号操作数的大小A.两操作数符号相同两操作数符号相同根据根据SF判断判断B.两操作数符号不同两操作数符号不同根据根据SF、OF判断判断SF=1,ABJSSF=0,ABJNSSF OF=1,A BSF OF=0,AB67例:有两组例:有两组5050个字节的数据,分别放在自个字节的数据,分别放在自FIRSTFIRST和和SECONDSECOND开始的存储区中,试比较两组数据是否相同。开始的存储区中,试比较两组数据是否相同。相同则相同则00ALAL,否则否则0 0FFHALFFHAL。MOVSI,OFFSETFIRSTMOVDI,OFFSETSECONDMOVCX,50P:MOVAL,SICMPAL,DIJZNEXTMOVAL,0FFHJMPSTOPNEXT:INCSIINCDIDECCXJNZPMOVAL,0STOP:HLT683.乘法指令乘法指令(1)无符号数乘法无符号数乘法格式:格式:MULOP功能:功能:AXALOP8位数乘法位数乘法(DX、AX)AXOP16位数乘法位数乘法(2)带符号数乘法带符号数乘法格式:格式:IMULOP功能:功能:操作同上,但是操作数为带符号数操作同上,但是操作数为带符号数69 BXXXHALXXHAX例:例:MULBYTEPTRBX70注意:注意:(1)进行字节运算时,)进行字节运算时,OP目必须是目必须是AL,乘积在乘积在AX中;进行字运算时,中;进行字运算时,OP目必须是目必须是AX,乘积在乘积在DX、AX中。中。源操作数不允许使用立即数寻址方式。源操作数不允许使用立即数寻址方式。(2)运算结果)运算结果只影响只影响CF、OF,其他的无定义。其他的无定义。(3 3)对于对于MUL,若字节型数据相乘之积,若字节型数据相乘之积AH=0或字或字数据相乘之积数据相乘之积DX=0,则则CF=OF=0,否则否则CF=OF=1;对于对于IMUL指令,若字节数据相乘之积指令,若字节数据相乘之积AH或字数或字数据相乘之积据相乘之积DX的内容是低一半的符号扩展,则的内容是低一半的符号扩展,则CF=OF=0,否则否则CF=OF=1。71例:例:MULBL;ALBLAX中中MULCX;AXCXDXAXMULBYTEPTRDI;AL(DI)AXIMULBX;AX和和BX中中的的两两个个有有符符号号数数相相乘乘,结结果果在在DX和和AX中中例例:设在设在M1和和M2单元中各有一个单元中各有一个16位无符号数,求其位无符号数,求其乘积,将结果存于从乘积,将结果存于从R开始的字单元中。开始的字单元中。MOVAX,M1MULM2MOVR,AXMOVR+2,DX724.除法指令除法指令指令要求指令要求被除数是除数的双倍字长被除数是
展开阅读全文