汇编语言及程序设计.ppt
第三章 汇编语言及程序设计3.1 80868088的指令系统的指令系统 n指令是控制计算机进行各种操作的命令。指令是控制计算机进行各种操作的命令。n指令系统是指令系统是CPU所能执行指令的集合。所能执行指令的集合。n8086指令系统是其他微处理器指令的基础。指令系统是其他微处理器指令的基础。3.1.1 指令的构成和操作数的类型指令的构成和操作数的类型1、指令的构成、指令的构成n指令格式:指令由操作码字段和操作数字段组成。指令格式:指令由操作码字段和操作数字段组成。n操作码:指计算机所要执行的操作,或称为指出操作操作码:指计算机所要执行的操作,或称为指出操作类型,是一种助记符。类型,是一种助记符。n操作数:指在指令执行操作的过程中所需要的操作数。操作数:指在指令执行操作的过程中所需要的操作数。该字段除可以是操作数本身外,也可以是操作数地址该字段除可以是操作数本身外,也可以是操作数地址或是地址的一部分,还可以是指向操作数地址的指针或是地址的一部分,还可以是指向操作数地址的指针或其它有关操作数的信息。双操作数分为源操作数或其它有关操作数的信息。双操作数分为源操作数(SRC)和目标操作数()和目标操作数(DST),并由目标操作数存),并由目标操作数存放运算结果。放运算结果。操作码操作数操作数2 2、操作数的类型、操作数的类型立即数操作数:数值直接存放在指令中,立即数可立即数操作数:数值直接存放在指令中,立即数可以是以是8 8位的,也可以是位的,也可以是1616位的有符号数或无符号数。位的有符号数或无符号数。寄存器操作数:数值存放寄存器中,指令中带有寄寄存器操作数:数值存放寄存器中,指令中带有寄存器的号码。存器的号码。存储器操作数:数值存放内部存储器中,指令中带存储器操作数:数值存放内部存储器中,指令中带有存储器的地址。有存储器的地址。3.1.2 寻址方式寻址方式n寻址方式就是指令中用于说明操作数所在地址的方寻址方式就是指令中用于说明操作数所在地址的方法,或者说是寻找操作数有效地址的方法。法,或者说是寻找操作数有效地址的方法。n1、立即寻址、立即寻址n所提供的操作数直接包含在指令中。它紧跟在操作所提供的操作数直接包含在指令中。它紧跟在操作码的后面,与操作码一起放在代码段区域中。码的后面,与操作码一起放在代码段区域中。n例如:例如:MOV AX,0A7FHn立即数可以是立即数可以是8位的,也可以是位的,也可以是16位的。若是位的。若是16位位的,则存储时低位在前,高位在后。的,则存储时低位在前,高位在后。n用来给寄存器或存储器赋初值。用来给寄存器或存储器赋初值。2寄存器寻址寄存器寻址n操作数包含在操作数包含在CPU的内部寄存器中,如寄存器的内部寄存器中,如寄存器AX、BX、CX、DX等。等。n例如:例如:MOV DS,AXnMOV AL,BH3直接寻址直接寻址n操作数地址的操作数地址的16位偏移量直接包含在指令中。位偏移量直接包含在指令中。它与操作码它与操作码起存放在代码段区域,操作数一般起存放在代码段区域,操作数一般在数据段区域中,它的地址为数据段寄存器在数据段区域中,它的地址为数据段寄存器DS加上这加上这16位地址偏移量。位地址偏移量。nMOV AX,2000H;4寄存器间接寻址寄存器间接寻址n操作数是在存储器中,但是,操作数地址的操作数是在存储器中,但是,操作数地址的16位位偏移量包含在以下四个寄存器偏移量包含在以下四个寄存器SI、DI、BP、BX之一中。之一中。n以以SI、DI、BX间接寻址,间接寻址,则通常操作数在现行数则通常操作数在现行数据段区域中,即数据段据段区域中,即数据段寄存器(寄存器(DS)16加加上上SI、DI、BX中的中的16位位偏移量,为操作数的地偏移量,为操作数的地址,址,例如:例如:MOV AX,SI 操作数地址是:操作数地址是:(DS)*16+(SI)n以寄存器以寄存器BP间接寻址,则操作数在堆栈段区域间接寻址,则操作数在堆栈段区域中。即堆栈段寄存器(中。即堆栈段寄存器(SS)16与与BP的内容相的内容相加作为操作数的地址。加作为操作数的地址。n 例如:例如:MOV AX,BP 操作数地址是:操作数地址是:(SS)*16+(BP)5寄存器相对寻址寄存器相对寻址n由指定的寄存器内容,加上指令中给出的由指定的寄存器内容,加上指令中给出的8位或位或16位偏移量作为操作数的偏移地址。可以作为寄位偏移量作为操作数的偏移地址。可以作为寄存器变址寻址的四个寄存器是存器变址寻址的四个寄存器是SI、DI、BX、BP。n若用若用SI、DI和和BX作为变址,则与数据段寄存器相作为变址,则与数据段寄存器相加,若用加,若用BP变址,则与堆栈段寄存器相加,形成变址,则与堆栈段寄存器相加,形成操作数的地址即默认在堆栈段。操作数的地址即默认在堆栈段。n例如:例如:MOV AX,COUNTSI;n操作数地址是:(操作数地址是:(DS)*16+(SI)+COUNT6基址变址寻址基址变址寻址n操作数在存贮器中,其偏移地址由(基址寄存器)操作数在存贮器中,其偏移地址由(基址寄存器)(变址寄存器)形成;(变址寄存器)形成;n把把BX和和BP看成是基址寄存器,把看成是基址寄存器,把SI、DI看着是看着是变址寄存器变址寄存器。n例如:例如:MOV AX,BXSI n 或或 MOV AX,BX+SI 7相对基址变址寻址相对基址变址寻址n操作数在存贮器中,其偏移地址由(基址寄存器)操作数在存贮器中,其偏移地址由(基址寄存器)(变址寄存器)相对偏移量形成;(变址寄存器)相对偏移量形成;n把把BX和和BP看成是基址寄存器,把看成是基址寄存器,把SI、DI看着是看着是变址寄存器,再加上指令中指定的变址寄存器,再加上指令中指定的8位或位或16位偏移位偏移量作为操作数的偏移地址;量作为操作数的偏移地址;n例如:例如:MOV AX,0318HBXSI。n寄存器间接寻址寄存器间接寻址,寄存器相对寻址使用寄存器寄存器相对寻址使用寄存器为为BX,BP,SI,DIn基址变址寻址基址变址寻址BX或或BP+SI或或DI3.1.3 8086/8088 指令系统指令系统 n1数据传送数据传送(Data Transter)n 2算术运算算术运算(Arithmetic)n3逻辑运算逻辑运算(Logic)n4串操作串操作(String menipulation)n5程序控制程序控制(Program Control)n6处理器控制处理器控制(Processor Control)一、数据传送指令一、数据传送指令 n1数据传送数据传送MOV指令指令 一般格式:一般格式:MOV DST,SRC MOV 是操作码,是操作码,DST 和和SRC 分别是目的操作数分别是目的操作数和源操作数。和源操作数。功能:功能:完成数据传送,将源操作数的内容传到目完成数据传送,将源操作数的内容传到目的操作数,但源操作数的内容不变。的操作数,但源操作数的内容不变。n具体来说,一条数据传送指令能实现:具体来说,一条数据传送指令能实现:CPU内部寄存器之间数据的任意传送内部寄存器之间数据的任意传送(除了代码除了代码段寄存器段寄存器CS和指令指针和指令指针IP以外以外)。MOV AL,BL;字节传送;字节传送 MOV CX,BX;字传送;字传送 MOV DS,BXn立即数传送至立即数传送至CPU内部的通用寄存器组内部的通用寄存器组(即即AX、BX、CX、DX、BP、SP、SI、DI),MOV CL,4 MOV AX,03FFH MOV SI,057BHn能实现用立即数给存储单元赋值能实现用立即数给存储单元赋值 例如:例如:MOV 2000H,25H MOV SI,35HnCPU内部寄存器内部寄存器(除了除了CS和和IP以外以外)与存储器与存储器(所有寻址方式所有寻址方式)之间的数据传送。之间的数据传送。MOV AL,BUFFER MOV AX,SI MOV DI,CX MOV SI,BLOCKBP MOV DS,DATASI+BX MOV DESTBP+DI,ESMOV 指令应注意几个问题n可进行可进行8位、位、16位的数据操作;位的数据操作;n源操作数与目的操作数的数据类型要一致;源操作数与目的操作数的数据类型要一致;n存储器间不能直接传送;存储器间不能直接传送;n两个段寄存器之间不能直接传送信息;两个段寄存器之间不能直接传送信息;n立即数不能作为目标操作数,也不能直接传送到立即数不能作为目标操作数,也不能直接传送到段寄存器;段寄存器;nCS和和IP不能作为目标操作数。不能作为目标操作数。2堆栈指令堆栈指令 n堆栈是一种数据存取的方式(与队列比较)堆栈是一种数据存取的方式(与队列比较),特点特点为先进后出;为先进后出;n包括入栈(包括入栈(PUSH)和出栈()和出栈(POP)指令两类;)指令两类;仅能进行字运算;(仅能进行字运算;(操作数不能是立即数)操作数不能是立即数)n堆栈区存数据时总是从高位开始向低位方向增长;堆栈区存数据时总是从高位开始向低位方向增长;n堆栈在内存的地址由堆栈在内存的地址由SS指明,堆栈指针指明,堆栈指针SP指向堆指向堆栈区的栈顶栈区的栈顶,存放栈顶的偏移地址。存放栈顶的偏移地址。n 入栈指令入栈指令PUSHn一般格式:一般格式:PUSH SRC 源操作数可以是源操作数可以是CPU内部的内部的16位通用寄存器位通用寄存器、段、段寄存器和内存操作数(所有寻址方式)。入栈操寄存器和内存操作数(所有寻址方式)。入栈操作对象必须是作对象必须是16位数。位数。n功能:功能:将数据压入堆栈将数据压入堆栈执行步骤为:执行步骤为:SP=SP-2;SP=操作数操作数 低低8位;位;SP+1=操作数高操作数高8位位 例如:例如:PUSH BX 执行过程为:执行过程为:SP=SP-1,SP=BH;SP=SP-1,SP=BL。n 出栈指令出栈指令POPn一般格式:一般格式:POP DST 功能:功能:将数据弹出堆栈将数据弹出堆栈,对指令执行的要求同入栈对指令执行的要求同入栈指令(指令(CS,IP除外)除外)。执行步骤为:操作数低执行步骤为:操作数低8位位=SP;操作数高;操作数高8位位=SP+1;SP=SP+2 例如:例如:POP AX POP BX POP DS3交换指令交换指令 XCHGn一般格式:一般格式:XCHG DST,SRC 功能:功能:完成数据交换完成数据交换 交换指令,把一个字节或一个字的源操作数与目交换指令,把一个字节或一个字的源操作数与目的操作数相交换。交换能在通用寄存器之间、通的操作数相交换。交换能在通用寄存器之间、通用寄存器与存储器之间进行。但段寄存器和立即用寄存器与存储器之间进行。但段寄存器和立即数不能作为操作数。数不能作为操作数。例如:例如:XCHG AL,CL XCHG AX,DI XCHG BX,SI XCHG AX,BUFFER XCHG DATASI,DH4累加器专用传送指令累加器专用传送指令n IN 指令指令一般格式:一般格式:IN AL,n ;B ALn IN AX,n ;W AXn+1n IN AL,DX ;B ALDX IN AX,DX;W AXDX+1DXn功能:功能:从从I/O端口输入数据至端口输入数据至AL或或AX。输入指令允许把一个字节或一个字由一个输入端输入指令允许把一个字节或一个字由一个输入端口传送到口传送到AL或或AX中。若端口地址超过中。若端口地址超过255时,则时,则必须用必须用DX保存端口地址,这样用保存端口地址,这样用DX作端口寻址作端口寻址最多可寻找最多可寻找64K个端口。个端口。例:例:IN AL,78H;MOV DX,347H;IN AL,DX;n OUT 指令指令一般格式:一般格式:OUT n,AL ;B ALn OUT n,AX ;W AXn+1n OUT DX,AL;B ALDX OUT DX,AX;W AXDX+1DXn功能:功能:将将AL或或AX的内容输出至的内容输出至I/O端口。端口。该指令将该指令将AL或或AX中的内容传送到一个输出端口。中的内容传送到一个输出端口。端口寻址方式与端口寻址方式与IN指令相同。指令相同。例:例:OUT 79H,AL;MOV DX,347H;OUT DX,AL;n XLAT指令指令 一般格式:一般格式:XLAT;AL=(DS)16(BX)+(AL)n功能:功能:完成一个字节的查表转换。完成一个字节的查表转换。要求:要求:寄存器寄存器AL的内容作为一个的内容作为一个256字节的表的下标。字节的表的下标。表的基地址在表的基地址在BX中,中,转换后的结果存放在转换后的结果存放在AL中中.例如:例如:MOV BX,OFFSET TABLE MOV AL,1 XLAT ;查表;查表 OUT 1,AL;(;(AL)AAH 本指令可用在数制转换、函本指令可用在数制转换、函数表查表、代码转换等场合。数表查表、代码转换等场合。5地址传送指令(有三条地址传送指地址传送指令(有三条地址传送指令)令)n LEAn一般格式:一般格式:LEA DST,SRC 功能:功能:把源操作数把源操作数SRC的地址偏移量传送至目的的地址偏移量传送至目的操作数操作数DST;n要求:要求:源操作数必须是一个内存操作数,源操作数必须是一个内存操作数,目目的操作数必须是一个的操作数必须是一个16位的通用寄存器。这条指位的通用寄存器。这条指令通常用来建立串操作指令所须的寄存器指针。令通常用来建立串操作指令所须的寄存器指针。例:例:LEA BX,BUFR;把变量把变量BUFR的地的地址偏移量部分送到址偏移量部分送到BX;MOV BX,BUFR;把变量把变量BUFR的内的内容送到容送到BX;MOV BX,OFFSETBUFR;把变量把变量BUFR的地址偏移量部分送到的地址偏移量部分送到BX。n LDSn一般格式:一般格式:LDS DST,SRCn功能:功能:完成一个地址指针的传送。完成一个地址指针的传送。地址指针包括段地址部分和偏移量地址指针包括段地址部分和偏移量 部分。指令将段地址送入部分。指令将段地址送入DS,偏移量部分送入,偏移量部分送入一个一个16位的指针寄存器或变址寄存器。位的指针寄存器或变址寄存器。n要求:源操作数是一个内存操作数,目的操作要求:源操作数是一个内存操作数,目的操作数是一个通用寄存器数是一个通用寄存器/变址寄存器。变址寄存器。例如:例如:LDS SI,BX;将把;将把BX所指的所指的32位地位地址指针的段地址部分送入址指针的段地址部分送入DS,偏移量部分送入,偏移量部分送入SI n LES(Load pointer into ES)n一般格式:一般格式:LES DST,SRC 这条指令除将地址指针的段地址部分送入这条指令除将地址指针的段地址部分送入ES外,外,与与LDS类似。例如:类似。例如:LES DI,BX+COUNT6标志寄存器传送标志寄存器传送n LAHF 将标志寄存器中的将标志寄存器中的SF、ZF、AF、PF和和CF(即(即低低8位)传送至位)传送至AH寄存器寄存器的指定位,空位没有定义。的指定位,空位没有定义。n SAHF 将寄存器将寄存器AH的指定位,的指定位,送至标志寄存器的送至标志寄存器的SF、ZF、AF、PF和和CF位位(即低(即低8位)。根据位)。根据AH的的内容,影响上述标志位,内容,影响上述标志位,对对OF、DF和和IF无影响。无影响。n PUSHF 将标志寄存器压入堆栈顶部,同时修改堆栈指针,将标志寄存器压入堆栈顶部,同时修改堆栈指针,不影响标志位。不影响标志位。n POPF 堆栈顶部的一个字,传送到标志寄存器,同时修堆栈顶部的一个字,传送到标志寄存器,同时修改堆栈指针,影响标志位。改堆栈指针,影响标志位。二、算术运算指令二、算术运算指令n80868088提供加、减、乘、除四种基本算术操作。提供加、减、乘、除四种基本算术操作。这些操作都可用于字节或字的运算,也可以用于带符这些操作都可用于字节或字的运算,也可以用于带符号数与无符号数的运算。号数与无符号数的运算。带符号数用补码表示。同带符号数用补码表示。同时时80868088也提供了各种校正操作,故可以进行十也提供了各种校正操作,故可以进行十进制算术运算进制算术运算n算术运算操作会影响标志寄存器;加、减运算会影响算术运算操作会影响标志寄存器;加、减运算会影响大部分的标志位大部分的标志位,但加、减指令不影响位。但加、减指令不影响位。1加法指令加法指令(Addition)n一般形式:一般形式:ADD DST,SRC n功能:功能:(DST)(DST)+(SRC)完成两个操作数相加,结果送至目的操作数完成两个操作数相加,结果送至目的操作数DST。目的操作数可以是累加器,任一通用寄存器以。目的操作数可以是累加器,任一通用寄存器以及存储器操作数;及存储器操作数;n例如:例如:ADD AL,30;累加器与立即数相加;累加器与立即数相加 ADD BX,3000H;通用寄存器与存储;通用寄存器与存储单元内容相加单元内容相加 ADD DI,CX;通用寄存器之间;通用寄存器之间nADD DX,DATABX+SI;通用寄存器与存;通用寄存器与存储单元内容相加储单元内容相加nADD BETA SI,DX;存储器操作数与寄存;存储器操作数与寄存器相加器相加n这些指令对标志位这些指令对标志位CF、DF、PF、SF、ZF和和AF有影响。有影响。n一般形式:一般形式:ADC DST,SRC;带进位的加法;带进位的加法 功能:功能:(DST)(DST)+(SRC)+CF 这条指令与上这条指令与上条指令类似,只是在两个操作数条指令类似,只是在两个操作数相加时,要把进位标志相加时,要把进位标志CF的现行值加上去,结果的现行值加上去,结果送至目的操作数。送至目的操作数。n例如:例如:ADC AL,30;累加器与立即数相加;累加器与立即数相加 ADCBX,3000H;通用寄存器与存储;通用寄存器与存储单元内容相加。单元内容相加。n例;若有两个四字节的数,已分别放在自例;若有两个四字节的数,已分别放在自FIRST和和SECOND开始的存储区中,每个数占四个存储单元。存放开始的存储区中,每个数占四个存储单元。存放时,最低字节在地址最低处,用以下程序段实现相加。时,最低字节在地址最低处,用以下程序段实现相加。MOV AX,FIRSTADD AX,SECOND;ADD AX,FIRST+4;MOV SECOND,AX;MOV FIRST+4,AX;MOV AX,FIRST+2ADD AX,SECOND+2;ADC AX,FIRST+6;MOV SECOND+2 ,AX;MOV FIRST+6,AX MOV AX,0H ADC AX,0 MOV FIRST+8,AX;n一般形式一般形式:INC DST ;n功能功能:(:(DST)(DST)+1 完成对指定的操作数完成对指定的操作数DST加加1,然后返回此操作数。,然后返回此操作数。此指令主要用于在循环程序中修改地址指针和循此指令主要用于在循环程序中修改地址指针和循环次数等。环次数等。这条指令执行的结果影响标志位这条指令执行的结果影响标志位AF、OF、PF、SF和和ZF,而对进位标志没有影响。,而对进位标志没有影响。n如:如:INC AL INC BX2减法指令减法指令(Subtraction)n一般形式一般形式:SUB DST,SRC ;功能功能:(:(DST)(DST)-(SRC)完成两个操作数相减,也即从完成两个操作数相减,也即从DST中减去中减去SRC,结果放在结果放在DST 例如:例如:SUB CX,BX SUB BP,CLn一般形式一般形式:SBB DST,SRC;n功能功能:(DST)(DST)-(SRC)-CF 这条指令与这条指令与SUB类似,只是在两个操作数相减时,类似,只是在两个操作数相减时,还要减去借位标志还要减去借位标志CF的现行值本指令对标志位的现行值本指令对标志位AF、CF、OF、PF、SF和和ZF都有影响。都有影响。同同ADC指令一样,本指令主要用于多字节操作数指令一样,本指令主要用于多字节操作数相减。相减。n一般形式一般形式:DEC DST ;n功能功能 (DST)(DST)-1 对指令的操作数减对指令的操作数减1,然后送回此操作数,然后送回此操作数,在相减时,把操作数作为一个无符号二进制数来对在相减时,把操作数作为一个无符号二进制数来对待。指令执行的结果,影响标志待。指令执行的结果,影响标志AF、OF、PF、SF和和ZF但对但对CF标志不影响标志不影响(即保持此指令以前即保持此指令以前的值的值)。n例如:例如:DEC SI DEC CLn例例:将存放在内存中将存放在内存中和和中的两个字节中的两个字节长度的数相加,结果长度的数相加,结果放在中。放在中。n一般形式一般形式:NEG DST n功能功能:取补取补,对操作数取补,即用零减去操作数,对操作数取补,即用零减去操作数,再把结果送回操作数。再把结果送回操作数。n例如:例如:NEG AL NEG MULRE (AL00111100)则取补后为)则取补后为11000100 即即000000000011110011000100 若在字节操作时对若在字节操作时对-128,或在字操作时对,或在字操作时对-32768取补,则操作数没变化,但标志取补,则操作数没变化,但标志OF置位。置位。n此指令影响标志此指令影响标志AF、CF、OF、PF、SF和和ZF。此指令的结果一般总是使标志此指令的结果一般总是使标志CF=1。除非在操作。除非在操作数为零时,才使数为零时,才使CF=0。n一般形式一般形式:CMP DST,SRC ;n功能功能:(DST)-(SRC)比较指令完成两个操作数相减,使结果反映在标比较指令完成两个操作数相减,使结果反映在标志位上,但并不送回结果志位上,但并不送回结果(即不带回送的减法即不带回送的减法)。例如:例如:CMP AL,100 CMP DX,DI CMP CX,COUHTBP CMP COUNTSI,AXn比较指令主要用于比较两个数之间的关系。在比比较指令主要用于比较两个数之间的关系。在比较指令之后,根据较指令之后,根据ZF标志即可判断两者是否相等。标志即可判断两者是否相等。n相等的比较:相等的比较:若两者相等,相减以后结果为零,若两者相等,相减以后结果为零,ZF标志为标志为1,否则为否则为0。若两者不相等,则可在比较指令之后利用其它若两者不相等,则可在比较指令之后利用其它标志位的状态来确定两者的大小。标志位的状态来确定两者的大小。n大小的比较:大小的比较:如果是两个如果是两个无符号数无符号数(如(如CMPAX,BX)进行)进行比较,则可以根据比较,则可以根据CF标志的状态判断两数大小。标志的状态判断两数大小。若结果没有产生借位若结果没有产生借位(CF=0),显然,显然AXBX;若产;若产生了借位(即生了借位(即CF1),则),则AXBX。3乘法指令(分为无符号乘法指令和乘法指令(分为无符号乘法指令和带符号乘法指令两类)带符号乘法指令两类)n(1)无符号乘法指令无符号乘法指令MULn 一般格式:一般格式:MUL SRC 完成字节与字节相乘、字与字相乘,完成字节与字节相乘、字与字相乘,且默认的操且默认的操作数放在作数放在AL或或AX中中,而源操作数由指令给出。,而源操作数由指令给出。8位数相乘,结果为位数相乘,结果为16位数,放在位数,放在AX中;中;16位数相位数相乘结果为乘结果为32位数,高位数,高16位放在位放在DX,低,低16位放在位放在AX中。注意:源操作数不能为立即数。中。注意:源操作数不能为立即数。n例如:例如:MOV AL,FIRST;MUL SECOND ;结果为;结果为AX=FIRST*SECONDMOV AX,THIRD;MUL AX ;结果;结果DX:AX=THIRD*THIRDMOV AL,30HCBW ;字扩展字扩展AX=30HMOV BX,2000HMUL BX ;n(2)带符号数乘法指令带符号数乘法指令IMUL 一般格式:一般格式:IMUL SRC ;SRC为源操作数为源操作数 这是一条带符号数的乘法指令,同这是一条带符号数的乘法指令,同MUL一样可以一样可以进行字节与字节、字和字的乘法运算。结果放在进行字节与字节、字和字的乘法运算。结果放在AX或或DX,AX中。当结果的高半部分不是结果的中。当结果的高半部分不是结果的低半部分的符号扩展时,标志位低半部分的符号扩展时,标志位CF和和OF将置位将置位。n4除法指令除法指令(1)无符号数除法指令无符号数除法指令DIV 一般格式一般格式:DIV SRC(2)带符号数除法带符号数除法IDIV 一般格式一般格式:IDIV SRC 该指令执行过程同该指令执行过程同DIV指令,但指令,但IDIV指令认为指令认为操作数的最高位为符号操作数的最高位为符号位,除法运算的结果商位,除法运算的结果商的最高位也为符号位。的最高位也为符号位。例如:例如:AX=2000H,DX=200H,BX=1000H,则,则 DIV BX执行后,执行后,AX=2002H,DX=0000。n除法运算中,源操作数可为除立即寻址方式之外除法运算中,源操作数可为除立即寻址方式之外的任何一种寻址方式,且指令执行对所有的标志的任何一种寻址方式,且指令执行对所有的标志位都无定义。位都无定义。n由于除法指令中的字节运算要求被除数为由于除法指令中的字节运算要求被除数为16位数,位数,而字运算要求被除数是而字运算要求被除数是32位数,在位数,在8086/8088系系统中往往需要用符号扩展的方法取得被除数所要统中往往需要用符号扩展的方法取得被除数所要的格式,因此指令系统中包括两条符号扩展指令。的格式,因此指令系统中包括两条符号扩展指令。n(3)字节扩展指令字节扩展指令CBW 一般格式一般格式:CBW 该指令执行时将该指令执行时将AL寄存器寄存器的最高位扩展到的最高位扩展到AH。n(4)字扩展指令字扩展指令CWD 一般格式一般格式:CWD 该指令执行时将该指令执行时将AX寄存器寄存器的最高位扩展到的最高位扩展到DX。CBW、CWD指令不影响标指令不影响标志位。志位。5十进制调整指令n针对十进制算术运算有一类十进制调整指令。针对十进制算术运算有一类十进制调整指令。压缩压缩BCD码的十进制加法调整码的十进制加法调整 DAA n压缩压缩BCD码的十进制减法调整码的十进制减法调整 DASn非压缩非压缩BCD码的十进制加法调整码的十进制加法调整 AAA表2-2 十进制调整指令指令格式指令说明DAA压缩的BCD码加法调整DAS压缩的BCD码减法调整AAA非压缩的BCD码加法调整AAS非压缩的BCD码减法调整AAM乘法后的BCD码调整AAD除法前的BCD码调整BCD码进行乘除法运算时,一律使用费压缩无符号数形式,码进行乘除法运算时,一律使用费压缩无符号数形式,因而因而AAM 和和AAD应固定地出现在应固定地出现在MUL之前和之前和DIV之后。之后。三、三、逻辑运算和移位指令逻辑运算和移位指令n1逻辑运算指令逻辑运算指令n(1)一般格式:一般格式:NOT SRCn功能:功能:对操作数求反,然后送回原处,操作数可对操作数求反,然后送回原处,操作数可以是寄存器或存储器内容。此指令对标志无影响。以是寄存器或存储器内容。此指令对标志无影响。例如:例如:NOT ALn(2)一般格式:一般格式:AND DST,SRCn功能:功能:对两个操作数进行按位的逻辑对两个操作数进行按位的逻辑“与与”运算,运算,结果送回目的操作数。结果送回目的操作数。其中目的操作数其中目的操作数DST可以是累加器、任一通用寄存可以是累加器、任一通用寄存器,或内存操作数器,或内存操作数(所有寻址方式所有寻址方式)。源操作数。源操作数SRC可以是立即数、寄存器,也可以是内存操作可以是立即数、寄存器,也可以是内存操作数数(所有寻址方式所有寻址方式)。指令可以进行字节操作,也。指令可以进行字节操作,也可以进行字操作。可以进行字操作。例如:例如:AND AL,0FH ;可完成拆字的动作;可完成拆字的动作 AND SI,0H ;将将SI清清0n(3)一般格式:一般格式:TEST DST,SRC n功能:功能:完成与完成与AND指令相同的操作,结果反映在指令相同的操作,结果反映在标志位上,但并不送回。通常使用它进行测试,标志位上,但并不送回。通常使用它进行测试,n例如例如 若要检测若要检测 AL中的最低位是否为中的最低位是否为1,为,为1则转则转移。可用以下指令:移。可用以下指令:TEST AL,01H JNZ THERE THERE:n若要检测若要检测CX中的内容是否为中的内容是否为0,为,为0则转移。该如则转移。该如何做呢?何做呢?n(4)一般格式:一般格式:OR DST,SRCn功能:功能:对指定的两个操作数进行逻辑对指定的两个操作数进行逻辑“或或”运算。运算。结果送回目的操作数。结果送回目的操作数。其中,目的操作数其中,目的操作数DST,可以是累加器,可以是,可以是累加器,可以是任任通用寄存器,也可以是一个内存操作数通用寄存器,也可以是一个内存操作数(所有所有寻址方式寻址方式)。源操作数。源操作数SRC,可以是立即数、寄存,可以是立即数、寄存器,也可以是内存操作数器,也可以是内存操作数(所有寻址方式所有寻址方式)。AND AL,0FH AND AH,0F0H OR AL,AH ;完成拼字的动作完成拼字的动作 OR AX,0FFFH;将;将AX低低12位置位置1 OR BX,BX;清相应标志清相应标志n(5)一般格式:一般格式:XOR DST,SRCn功能:功能:对两个指定的操作数进行对两个指定的操作数进行“异或异或”运算,运算,结果送回目的操作数。结果送回目的操作数。其中,目的操作数其中,目的操作数DST可以是累加器,可以是任可以是累加器,可以是任一个通用寄存器,也可以是一个内存操作数一个通用寄存器,也可以是一个内存操作数(全部全部寻址方式寻址方式)。源操作数可以是立即数、寄存器,也。源操作数可以是立即数、寄存器,也可以是内存操作数可以是内存操作数(所有寻址方式所有寻址方式)。例如:。例如:XOR AL,AL ;使;使AL清清0 XOR SI,SI ;使;使SI清清0 XOR CL,0FH ;使低;使低4位取反,高位取反,高4位不变位不变n逻辑运算类指令中,单操作数指令逻辑运算类指令中,单操作数指令NOT的操作数的操作数不能为立即数,双操作数逻辑指令中,必须有一不能为立即数,双操作数逻辑指令中,必须有一个操作数为寄存器寻址方式,且目的操作数不能个操作数为寄存器寻址方式,且目的操作数不能为立即数。它们对标志位的影响情况如下:为立即数。它们对标志位的影响情况如下:NOT不影响标志位,其它四种指令将使不影响标志位,其它四种指令将使CF=OF=0,AF无定义,而无定义,而SF、ZF和和PF则根据运算结果而定。则根据运算结果而定。2移位指令n算术左移或逻辑左移指令算术左移或逻辑左移指令 SALSHL OPR,M ;nM是移位次数,可以是是移位次数,可以是1或寄存器或寄存器CL 这些指令可以对寄存器操作数或内存操作数进行指定的移这些指令可以对寄存器操作数或内存操作数进行指定的移位,可以进行字节或字操作;可以一次只移位,可以进行字节或字操作;可以一次只移1位,也可以位,也可以移位由寄存器移位由寄存器CL中的内容规定的次数。中的内容规定的次数。n算术右移指令算术右移指令 SAR OPR,Mn逻辑右移指令逻辑右移指令 SHR OPR,M (2)循环移位指令nROL OPR,M ;左循环移位;左循环移位 nROR OPR,M ;右循环移位;右循环移位 未把标志位未把标志位CF包含在循环的环中包含在循环的环中 nRCL OPR,M ;带进位左循环移位;带进位左循环移位nRCR OPR,M;带进位右循环移位;带进位右循环移位 把标志位把标志位CF包含在循环中,作为整个循环一部分。包含在循环中,作为整个循环一部分。四、四、串操作类指令串操作类指令n串操作类指令可以用来实现内存区域的数据串串操作类指令可以用来实现内存区域的数据串操作。这些数据串可以是字节串,也可以是字操作。这些数据串可以是字节串,也可以是字串。串。1重复指令前缀重复指令前缀n串操作类指令可以与重复指令前缀配合使用。串操作类指令可以与重复指令前缀配合使用。从而可以使操作得以重复进行,及时停止。重从而可以使操作得以重复进行,及时停止。重复指令前缀的几种形式见表所示。复指令前缀的几种形式见表所示。举例说明串操作指令指令格式执行操作串传送MOVS DST,SRCMOVSBMOVSW由操作数说明是字节或字操作;其余同MOVSB或MOVSW(ES:DI)(DS:SI);SI=SI1,DI=DI1;REP控制重复前两步(ES:DI)(DS:SI);SI=SI2,DI=DI2;REP控制重复前两步串比较CMPS DST,SRCCMPSBCMPSW由操作数说明是字节或字操作;其余同CMPSB或CMPSW(ES:DI)(DS:SI);SI=SI1,DI=DI1;重复前缀控制前两步(ES:DI)(DS:SI);SI=SI2,DI=DI2;重复前缀控制前两步串搜索SCAS DSTSCASBSCASW由操作数说明是字节或字操作;其余同SCASB或SCASWAL(ES:DI);DI=DI1;重复前缀控制前两步AX(ES:DI);DI=DI2;重复前缀控制前两步存串STOS DSTSTOSBSTOSW由操作数说明是字节或字操作;其余同STOSB或STOSWAL(ES:DI);DI=DI1;重复前缀控制前两步AX(ES:DI);DI=DI2;重复前缀控制前两步取串LODS SRCLODSBLODSW由操作数说明是字节或字操作;其余同LODSB或LODSW(DS:SI)AL;SI=SI1;重复前缀控制前两步(DS:SI)AX;SI=SI2;重复前缀控制前两步2串指令重复前缀汇编格式执行过程影响指令REP(1)若(CX)0,则退出;(2)CX=CX-1;(3)执行后续指令;(4)重复(1)-(3)MOVS,STOS,LODSREPE/REPZ(1)若(CX)0或ZF=0,则退出;(2)CX=CX-1;(3)执行后续指令;(4)重复(1)-(3)CMPS,SCASREPNE/REPNZ(1)若(CX)0或ZF=1,则退出;(2)CX=CX-1;(3)执行后续指令;(4)重复(1)-(3)CMPS,SCAS对串指令要注意以下几个问题:n各指令所使用的默认寄存器是:各指令所使用的默认寄存器是:SI(源串地址),(源串地址),DI(目的地址),(目的地址),CX(字串长度),(字串长度),AL(存取(存取或搜索的默认值)或搜索的默认值);n 源串在数据段,目的串在附加段源串在数据段,目的串在附加段;n 方向标志与地址指针的修改。方向标志与地址指针的修改。DF1,则修改地,则修改地址指针时用减法;址指针时用减法;DF=0时,则修改地址指针时用时,则修改地址指针时用加法加法;nMOVS、STOS、LODS指令不影响标志位指令不影响标志位.n MOVS指令的功能指令的功能nMOVS DST,SCRnMOVSB;字节传送;字节传送nMOVSW;字传送;字传送n把数据段中由把数据段中由SI间接寻址的一个字节间接寻址的一个字节(或一个字或一个字)传送到附传送到附加段中由加段中由DI间接寻址的一个字节单元间接寻址的一个字节单元(或一个字单元或一个字单元)中去,中去,然后,根据方向标志然后,根据方向标志DF及所传送数据的类型及所传送数据的类型(字节或字字节或字)对对SI及及DI进行修改,在指令重复前缀进行修改,在指令重复前缀REP的控制下,可将的控制下,可将数据段中的整串数据传送到附加段中去。数据段中的整串数据传送到附加段中去。n例例 在数据段中有一字符串,其长度为在数据段中有一字符串,其长度为100,要求,要求把它们传送到附加段中的一个缓冲区中,其中源把它们传送到附加段中的一个缓冲区中,其中源串存放在数据段中从符号地址串存放在数据