资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第2章 寻址方式和指令系统,汇编语言 PPT,8086,CPU,的指令的共同的规律,l,大多数数据传送类指令、算术运算类指令、位操作类指令及串操作类指令,其双操作数指令有相同的语句格式和操作规定。,语句格式:标号:,操作符,OPD,,,OPS ,;,注释,l,算术运算和位操作类指令的部分单操作数指令有相同的语句格式和操作规定。,语句格式:,标号:,操作符,OPD ,;,注释,2.1,寻址方式,2.1.1 寄存器寻址,2.1.2 寄存器间接寻址,2.1.3 变址寻址,2.1.4 基址加变址寻址,2.1.5 立即寻址,2.1.6 直接寻址,2.1.7 跨段问题,返回本章首页,2.1.1,寄存器寻址,寄存器寻址方式的操作数在指令指明的寄存器中。,汇编格式:,R,其中,R,表示寄存器名。,功能:操作数直接存放在寄存器,R,中。,图形表示:,R,指令操作数,【例2.1】,下列程序执行后,,(,AX,),=,?,(,BX,),=,?,MOV AX,,,1234H,MOV BX,,,5678H,ADD AX,,,BX,该程序中,MOV,指令为数据传送指令操作符,,ADD,指令为加法指令操作符,三条指令皆为双操作数指令。第一、二条指令,AX,、,BX,皆为目的操作数地址,为寄存器寻址方式。第三条指令中,,AX,为目的操作数地址,,BX,为源操作数地址。源地址和目的地址皆为寄存器寻址方式。,图形表示:,执行:,1234,HAX,5678HBX,(,AX,),+,(,BX,),AX,执行后:(,AX,),=68ACH,,(,BX,),=5678H,返回本节,2.1.2,寄存器间接寻址,寄存器间接寻址方式中,寄存器的内容为操作数的偏移地址,EA,,操作数在存储器中。,汇编格式:,R,功能:操作数存放在存储器,寄存器,R,存放操作数的偏移地址,EA。,偏移地址,EA,计算方法如下:,EA=,SISI,作间址寄存器。,DIDI,作间址寄存器。,BXBX,作间址寄存器。,BPBP,作间址寄存器。,执行指令:,MOV AX,BP,执行后:(,AX)=?,(BP)=?,(SS)=?,(20030H)=?,图形表示如下:,【例2.2】寄存器和存储器内容分别为:(,AX)=0,(BP)=0030H,(SS)=2000H,(20030H)=1234H,返回本节,2.1.3,变址寻址,变址寻址方式操作数的偏移地址,EA,为寄存器的内容加位移量,操作数在存储器中。,汇编格式:,XR(X,表示位移量,是8位或16位二进制补码表示的有符号数),功能:操作数存放在存储器,寄存器,R,的内容加位移量,X,为操作数的偏移地址,EA。,图形表示如下:,偏移地址,EA,计算方法如下:,【例2.3】,设执行前:,(,AX,),=0040H,,(,BX,),=0030H,,(,DS,),=2000H,,(,20036H,),=0050H,执行指,令:,ADD 6BX,,,AX,执行后:,(,AX,),=?,,(,BX,),=?,,(,DS,),=?,,(,20036H,),=?,图形表示如下:,执行:(20036,H)+(AX)20036H,执行后:(,AX)=0040H,(BX)=0030H,(DS)=2000H,(20036H)=0090H。,返回本节,2.1.4,基址加变址寻址,基址加变址寻址方式中,操作数的偏移地址,EA,是指令中基址寄存器内容、变址寄存器内容、位移量三项之和,操作数在存储器中。,汇编格式:,X BR+IR,功能:操作数存放在存储器,,BR,的内容加,IR,的内容加位移量,X,是操作数的偏移地址,EA。,图形表示:,操作数偏移地址,EA,计算方法如下,返回本节,2.1.5,立即寻址,立即寻址方式中,指令操作码和操作数都在存储器代码段中。,汇编格式:,n(n,为立即操作数,是用8位或16位二进制补码表示的有符号数),功能:操作数存放在存储器,指令下一单元的内容为立即操作数,n。,图形表示:,【例2.5】,【例,2.5,】,MOV AX,,,10,执行后(,AX,),=,?,该例中源操作数为立即寻址方式,立即数为,10,,存放在指令的下一单元。,图形表示:,执行:,10,AX,执行后:,(,AX,),=000AH,返回本节,2.1.6,直接寻址,汇编格式:含有变量的地址表达式。,段寄存器名:,EA。,功能:指令下一字单元的内容是操作数的偏移地址,EA。,图形表示:,【例2.6】,【例,2.6,】寄存器和存储器内容为,:,(,AX,),=1212H,,,BUF,为数据段定义的变量,其偏移地址是,2000,H,,(,DS,),=3000H,,(,32000H,),=4545H,。,执行指令,:,MOV AX,,,BUF,执行后:(,AX,),=?,图形表示:,执行:(,32000,H,),AX,执行后:(,AX,),=4545H,返回本节,2.1.7,跨段问题,按前述规定:若选用,BP,作间址基址寄存器、变址寄存器或基址寄存器,则操作数在堆栈段,操作数的物理地址,PA,由堆栈段寄存器,SS,的内容左移4位与偏移地址,EA,相加后形成;否则,操作数在数据段,操作数的物理地址,PA,由数据段寄存器,DS,的内容左移4位与偏移,EA,相加后形成。该规定为系统默认状态。当要否定默认状态,到非约定段寻找操作数时,必须用跨段前缀指明操作数的段寄存器名。,汇编格式:段寄存器名:操作数地址。,功能:段寄存器名指明操作数属哪个段。,【例2.7】跨段前缀示例。,MOVAX,DS:BP,MOVCX,SS:SI,该例中,,DS:,SS:,均为跨段前缀,此时默认状态无效,操作数的物理地址,PA,由段寄存器内容左移4位加偏移,EA,形成。上述2条指令的源操作数物理地址分别为:,PA1 =(DS),左移4位+,BP,PA2 =(SS),左移4位+,SI,返回本节,2.2,数据传送类指令,2.2.1 通用数据传送指令,2.2.2 堆栈操作指令,2.2.3 标志寄存器传送指令,2.2.4 地址传送指令,2.2.5 输入输出指令,返回本章首页,2.2.1 通用数据传送指令,1,传送指令,MOV,2,数据交换指令,XCHG,3,查表转换指令,XLAT,1传送指令,MOV,语句格式:,MOV OPD,OPS,功能:将源操作数传送入目的地址,源地址内容不变。即(,OPS)OPD。,下图2.1描述了,MOV,指令在传送数据时允许传送的路径及类型。,图2.1,MOV,指令所允许的数据传送路径及类型,【例2.8】,存储器与寄存器间数据传送。,MOV AX,,,BUF,;,BUF,是变量,源操作数为直接寻址,MOV BH,,,DI,;,源操作数为寄存器间接寻址,MOV DI,,,ES,:,3SI,;,源操作数为变址寻址,使用跨段前缀,MOV BP,,,3BX+SI,;,源操作数为基址加变址寻址,MOV BUFA,,,DL,;,BUFA,是一字节变量,MOV BP,,,AX,;,使用,SS,段寄存器,MOV DS,:,BP,,,DL,;,使用跨段前缀,MOV BUF,,,DS,;,BUF,是个字变量,MOV ES,,,BUF,2数据交换指令,XCHG,语句格式:,XCHG OPD,,,OPS,功能:将源地址与目的地址中的内容互换。即(,OPD,),OPS,,(,OPS,),OPD,。,【,例,2.9,】,寄存器与存储器之间数据交换,。,MOVAX,,,5678H,;(,AX,),=5678H,MOVBX,,,0FFFFH,;(,BX,),=0FFFFH,XCHGAX,,,BX,;(,AX,),=0FFFFH,,(,BX,),=5678H,3查表转换指令,XLA,语句格式:,XLAT OPS,或,XLAT,功能:将(,BX),为首址(,AL),为位移量的字节存储单元中的数据送,AL,寄存器。,即(,BX+AL)AL。,返回本节,2.2.2 堆栈操作指令,1,进栈指令,PUSH,2,出栈指令,POP,1进栈指令,PUSH,语句格式:,PUSH OPS,功能:将寄存器、段寄存器或存储器中的一个字数据压入堆栈,堆栈指针减2。,即:(,SP)SP(OPS)158SP,(SP)SP(OPS)70SP,2出栈指令,POP,语句格式:,POP OPD,功能:将栈顶元素弹出送至某一寄存器、段寄存器(除,CS,外)或存储器,堆栈指针加2。,从,POP,指令功能可看出,该指令为,PUSH,指令的逆过程。,即:(,SP),(OPD)70(SP)+,SP,(SP),(OPD)158(SP)+,SP,返回本节,2.2.3 标志寄存器传送指令,1标志送,AH,指令,LAHF,2,AH,送标志指令,SAHF,3标志寄存器进栈指令,PUSHF,4,标志寄存器出栈指令,POPF,1标志送,AH,指令,LAHF,语句格式:,LAHF,功能:将标志寄存器的低8位送入,AH,寄存器。,即(,FLAGS)7-0AH。,该指令的执行对标志位无影响。,【例2.13】标志寄存器传送。,执行前:(,FLAGS)=0485H,(AX)=0FFFFH,执行指令:,LAHF,2,AH,送标志指令,SAHF,语句格式:,SAHF,功能:将,AH,的内容送入标志寄存器的低8位,高8位不变。,即(,AH)FLAGS7-0.。,从该指令功能可看出,,SAHF,为,LAHF,的逆过程。,3标志寄存器进栈指令,PUSHF,语句格式:,PUSHF,功能:将标志寄存器的内容压入堆栈。,即,(,FLAGS,)(,SP,)。,4标志寄存器出栈指令,POPF,功能:将栈顶内容弹出送入标志寄存器中。即(,SP)FLAGS。,POPF,指令与,PUSHF,指令互为逆过程。,【例2.14】,将标志寄存器的单步标志,TF,置位。,PUSHF;(FLSGS)(SP),POP AX;(SP)AX,OR AX,0100H;,设置,D8=TF=1,PUSH AX;(AX)(SP),POPF;(SP)FLAGS,,即(,AX)FLAGS,返回本节,2.2.4 地址传送指令,1传送偏移地址指令,LEA,2传送偏移地址及数据段首址指令,LDS,3传送偏移地址及附加数据段指令,LES,1传送偏移地址指令,LEA,语句格式:,LEA OPD,OPS,功能:主存按源地址的寻址方式计算偏移地址,将偏移地址送入指定寄存器。,【例2.15】,主存偏移地址的获取。,MOV BX,0100H;(BX)=0100H,MOV SI,0210H;(SI)=0210H,LEA BX,1234BX+SI;(BX)=1544H,2传送偏移地址及数据段首址指令,LDS,语句格式:,LDS OPD,OPS,功能:将主存中指定字单元数据送入指定存储器,下一字单元数据送,DS,寄存器。,3传送偏移地址及附加数据段指令,LES,语句格式:,LES OPD,OPS,功能:将主存某字单元内容送指定寄存器。即(,OPS)OPD,(OPS+2)ES。,返回本节,2.2.5 输入输出指令,1,输入指令,IN,2,输出指令,OUT,1输入指令,IN,输入指令用来从指定的外设寄存器取信息送入累加器。它有四种形式:,(1)语句格式:,INAL,PORT,功能:(,PORT)AL,(,2,),语句格式:,INAX,PORT,功能:(,PORT)AX,(,3,),语句格式:,INAL,DX,功能:(,DX)AL,(,4,),语句格式:,INAX,DX,功能:(,DX)AL,2输出指令,OUT,输出指令用来把累加器的内容送往指定的外设存储器,它有四种形式:,(,1,)语句格式:,OUTPORT,,,AL,功能:(,AL,),PORT,(,2,),语句格式:,OUTPORT,,,AX,功能:(,AX,),PORT,(,3,),语句格式:,OUTDX,,,AL,功能:(,AL,),DX,(,4,),语句格式:,OUTDX,,,AX,功能:(,AX,),DX,返回本节,2.3,算术运算类指令,2.3.1 加法指令,2.3.2 减运算指令,2.3.3 乘运算指令,2.3.4 除运算指令,2.3.5 符号扩展指令,2.3.6 十进制调整指令,返回本章首页,2.3.1 加法指令,1,加,1,指令,INC,2,加指令,ADD,3,带进位加指令,ADC,1加1指令,INC,语句格式:,INC OPD,功能:将目的操作数加1,结果送目的地址。,即(,OPD)+1OPD。,INC,指令是一个单操作数指令,操作数可以是寄存器或存储器操作数。,如:,INC BX,,即(,BX)+1BX。,加1指令可用于对计数器和地址指针进行调整。,2加指令,ADD,语句格式:,ADD OPD,OPS,功能:将目的操作数与源操作数相加,结果存入目的地址中,源地址的内容不改变。,即(,OPD)+(OPS)OPD。,3带进位加指令,ADC,语句格式:,ADC OPD,OPS,功能:将目的操作数加源操作数再加低位进位,结果送目的地址。,即(,OPD)+(OPS)+CF OPD。,【例2.20】,无符号双字加法运算。,MOVAX,4652H;(AX)=4652H,ADDAX,0F0F0H;(AX)=3742H,CF=1,MOVDX,0234H;(DX)=0234H,ADCDX,0F0F0H;(DX)=0F325H,CF=0,返回本节,2.3.2 减运算指令,1,减,1,指令,DEC,2,减指令,SUB,3,求补指令,NEG,4,带借位减指令,SBB,5,比较指令,CMP,1减1指令,DEC,语句格式:,DEC OPD,功能:将目的操作数减1,结果送目的地址。即(,OPD)1OPD。,DEC,指令是一个单操作数指令,操作数可以是寄存器或存储器操作数。,如:,DEC CX。,即(,CX)1CX。,减1指令,DEC,也一般用于对计数器和地址指针的调整。,2减指令,SUB,语句格式:,SUB OPD,OPS,功能:目的操作数减源操作数,结果存于目的地址,源地址内容不变。,即(,OPD)(OPS)OPD,【,例2.21】,减法运算。,MOVAX,5678H;(AX)=5678H,SUBAX,1234H;(AX)=4444H,MOVBX,3354H;(BX)=3354H,SUBBX,3340H;(BX)=0014H,3求补指令,NEG,语句格式:,NEG OPD,功能:将目的操作数的每一位求反(包括符号位)后加1,结果送目的地址。,即(,OPD)+1OPD。,【,例2.22】,求补运算。,MOVAX,0FF64H,NEGAL;(AX)=0FF9CH,SUBAL,9DH;(AX)=0FFFFH,NEGAX;(AX)=0001H,DECAL;(AX)=0000H,NEGAX;(AX)=0000H,4带借位减指令,SBB,语句格式:,SBB OPD,OPS,功能:目的操作数减源操作数再减低位借位,CF,,结果送目的地址。,即(,OPD)(OPS)CF OPD,5比较指令,CMP,语句格式:,CMP OPD,OPS,功能:目的操作数减源操作数,结果只影响标志位,不送入目的地址。,即(,OPD)(OPS)。,【例2.24】比较,AL,的内容数值大小。,CMPAL,50;(AL)50,JBBELOW;(AL)=50,(AL)50AL,INCAH;(AH)+1AH,BELOW:,返回本节,2.3.3 乘运算指令,1,无符号数乘法指令,MUL,2,有符号乘指令,IMUL,1无符号数乘法指令,MUL,语句格式:,MUL OPS,功能:,若是字节数据相乘,(,AL),与,OPS,相乘得到字数据存入,AX,中;若是字数据相乘,则(,AX),与,OPS,相乘得到双字数据,高字存入,DX、,低字存入,AX,中。,即字节乘法:(,AL)*(OPS)AX,,字乘法:(,AX)*(OPS)DX,AX,【例2.25】无符号数0,A3H,与11,H,相乘。,MOVAL,0A3H;(AL)=0A3H,MOVBL,11H;(BL)=11H,MULBL ;(AX)=0AD3H,2有符号乘指令,IMUL,语句格式:,IMUL OPS,功能:字节乘法:(,AL)*(OPS),AX,,字乘法:(,AX)*(OPS),DX、AX。,IMUL,指令除计算对象是带符号二进制数外,其他都与,MUL,一样,但计算结果不同。【例2.26】有符号数0,B4H,与11,H,相乘。,MOVAL,0B4H;(AL)=B4H,MOVBL,11H;(BL)=11H,IMULBL ;(AX)=0FAF4H,返回本节,2.3.4 除运算指令,1,无符号除指令,DIV,2,有符号,除指令,IDIV,1无符号除指令,DIV,语句格式:,DIV OPS,功能:字节除法:(,AX)/(OPS)AL(,商)、,AH(,余数),字除法:(,DX、AX)/(OPS)AX(,商)、,DX(,余数),【例2.27】,写出实现无符号数0400,H/0B4H,运算的程序段。,MOVAX,0400H;(AX)=0400H,MOVBL,0B4H;(BL)=0B4H,DIVBL ;,商(,AL)=05H,,余数(,AH)=7CH,2有符号除指令,IDIV,语句格式:,IDIV OPS,功能:字节除法:(,AX)/(OPS)AL(,商)、,AH(,余数),字除法:(,DX,AX)/(OPS)AX (,商)、,DX(,余数),除法指令,DIV,和,IDIV,虽然对标志的影响未定义,但可产生溢出。,【例2.28】,写出实现有符号数0400,H/0B4H,运算的程序段。,MOVAX,0400H;(AX)=0400H,MOVBX,0B4H;(BX)=0B4H,IDIVBX ;(AL)=0F3H,(AH)=24H,返回本节,2.3.5 符号扩展指令,1,字节转换成字指令,CBW,2,将字转换成双字指令,CWD,1字节转换成字指令,CBW,语句格式:,CBW,功能:将,AL,中的符号位数据扩展至,AH。,【,例2.29】将字节数据扩展成字数据。,MOVAL,0A5H;(AL)=0A5H,CBW ;(AX)=0FFA5H,ADDAL,70H;(AL)=25H,CBW ;(AX)=0025H,2将字转换成双字指令,CWD,语句格式:,CWD,功能:将,AX,中的符号位数据扩展至,DX。,【,例2.30】将字数据扩展成双字数据。,MOVDX,0;(DX)=0,MOVAX,0FFABH;(AX)=0FFABH,CWD;(DX)=0FFFFH (AX)=0FFABH,返回本节,2.3.6 十进制调整指令,1,压缩,BCD,码调整指令,2,非压缩,BCD,码调整指令,(1)加法的十进制调整指令,DAA,语句格式:,DAA,功能:如果,AL,寄存器中低4位大于9或辅助进位(,AF)=1,,则(,AL)=(AL)+6,且(,AF)=1;,如果(,AL)=0A0H,或(,CF)=1,,则(,AL)=(AL)+60H,且(,CF)=1。,同时,,SF、ZF、PF,均有影响。,【例2.31】压缩,BCD,码的加法运算。,MOV AL,68H;,(,AL,),=68H,,表示压缩,BCD,码68,MOV BL,28H;,(,BL,),=28H,,表示压缩,BCD,码28,ADD AL,BL;,二进制加法:,(,AL,),=68H+28H=90H,DAA ;,十进制调整:,(,AL,),=96H,;,实现压缩,BCD,码加法:68+28=96,(2)减法的十进制调整指令,DAS,语句格式:,DAS,功能:如果(,AF)=1,或,AL,寄存器中低4位大于9,则(,AL)=(AL)6,且(,AF)=1;,如果(,AL)=0A0H,或(,CF)=1,,则(,AL)=(AL)60H,且(,CF)=1。,同时,SF、ZF、PF,均受影响。,【例2.32】压缩,BCD,码的减法运算。,MOVAL,68H ;,(,AL,),=68H,,表示压缩,BCD,码68,MOVBL,28H ;,(,BL,),=28H,,表示压缩,BCD,码28,SUBAL,BL ;,二进制减法:,(,AL,),=68H28H=40H,DAS ;,十进制调整:,(,AL,),=40H,;,实现压缩,BCD,码减法:6828=40,2非压缩,BCD,码调整指令,(,1,)加法的非压缩,BCD,码调整指令,AAA,(2)减,法的非压缩,BCD,码调整指令,AAS,(,3,)乘法的非压缩,BCD,码调整指令,AAM,(4),除法的非压缩,BCD,码调整指令,AAD,(,1,)加法的非压缩,BCD,码调整指令,AAA,语句格式:,AAA,功能:如果,AL,的低,4,位大于,9,或(,AF,),=1,,,则:,(,AL,),=,(,AL,),+6,(,AH,),=,(,AH,),+1,(,AF,),=,(,CF,),=1,且,AL,高,4,位清零。,否则:(,CF,),=,(,AF,),=0,AL,高4位清零。,(2)减法的非压缩,BCD,码调整指令,AAS,语句格式:,AAS,功能:如果,AL,的低4位大于9或(,AF)=1,,则:,(,AL)=(AL)6,(AH)=(AH)1,(AF)=(CF)=1,AL,高4位清零。,否则:(,CF)=(AF)=0,AL,高4位清零。,其他标志位,OF、PF、SF、ZF,不确定。,(3)乘法的非压缩,BCD,码调整指令,AAM,语句格式:,AAM,功能:被调整的乘积在,AX,中,对,AL,按10取模,则:,(,AL)0AHAH(,商):,AL(,余数),其中,AH,为商,,AL,为余数,标志位,AF、CF、OF、PF、SF、ZF,受影响。,(4)除法的非压缩,BCD,码调整指令,AAD,语句格式:,AAD,功能:除法运算前,先调整被除数,AX,内容,使:,(,AL)=(AL)+(AH)*0AH,(AH)=0,即把非压缩型十进制数变成二进制数。,返回本节,2.4,位操作类指令,2.4.1 逻辑运算指令,2.4.2,移位指令,返回本章首页,2.4.1 逻辑运算指令,1求反指令,NOT,2逻辑乘指令,AND,3测试指令,TEST,4逻辑加指令,OR,5按位加指令,XOR,1求反指令,NOT,语句格式:,NOT OPD,功能:将目的地址中的内容逐位取反后送入目的地址。,即(,OPD)OPD,【,例2.37】,逻辑非运算。,MOVAX,878AH,;,(AX)=878AH,NOTAX,,;,(AX)=7875H,2逻辑乘指令,AND,语句格式:,AND OPD,OPS,功能:将目的操作数和源操作数进行逻辑乘运算,结果存目的地址。,即(,OPD)(OPS),OPD。,该指令用于清除目的操作数中与源操作数置0的对应位。说明:逻辑乘的运算法则为:11=1,10=0,01=0,00=0,【例2.38】将,AL,中第3位和第7位清零。,MOVAL,0FFH,ANDAL,77H,3测试指令,TEST,语句格式:,TEST OPD,OPS,功能:源地址和目的地址的内容执行按位的逻辑乘运算,结果不送入目的地址。,即(,OPD)(OPS)。,【例2.39】测试,AX,中的第12位是否为0,不为0则转,L。,TESTAX,1000H,JNEL,4逻辑加指令,OR,语句格式:,OR OPD,OPS,功能:将目的操作数和源操作数进行逻辑加运算,结果存目的地址。,即(,OPD),(OPS),OPD。,说明:逻辑加的运算法则为:1,1=1,1,0=1,0,1=1,0,0=0。,【例2.40】将,AL,寄存器中第3位和第7位置1。,MOVAL,0,OR AL,88H,5按位加指令,XOR,语句格式:,XOR OPD,OPS,功能:目的操作数与源操作数做按位加运算,结果送入目的地址。,即(,OPD)(OPS),OPD。,说明:按位加的运算法则为;11=0,10=1,01=1,00=0。,【例2.41】,按位加运算。,MOVAL,45H,;,(AL)=45H,XORAL,31H,;,(AL)=74H,返回本节,2.4.2 移位指令,移位指令包括算术移位指令、逻辑移位指令和循环移位指令,分别进行左移和右移操作。这些指令均有统一的语句格式:,标号:操作符,OPD,1,或 标号:操作符,OPD,CL,其功能为将目的操作数的所有位按操作符规定的方式移动1位或按寄存器,CL,规定的次数(0255)移动,结果送入目的地址。目的操作数是8位(或16位)的寄存器数据或存储器数据。,1算术左移和逻辑左移指令,SAL(SHL),语句格式:,SAL OPD,1,或,SHL OPD,1,SAL OPD,CL,或,SHL OPD,CL,功能:将(,OPD),向左移动,CL,指定的次数,最低位补入相应的,的内容为最后移入位的值。,2算术右移指令,SAR,语句格式:,SAR OPD,1,或,SAR OPD,CL,CF,功能:将(,OPD),向右移动,CL,指定的次数且最高位保持不变;,CF,的内容为最后移入位的值。,【例2.43】,算术右移运算。,MOVBH,0F4H;(BH)=0F4H,MOVCL,2;(CL)=2,SARBH,CL;(BH)=0FDH,(CF)=0,该例语句“,SARBH,CL”,实际上完成了(,BH)BH,的运算,所以,用,SAR,指令可以实现对有符号数除2,n,的运算(,n,为移位次数)。,3逻辑右移指令,SHR,语句格式:,SHR OPD,1,或,SHR OPD,CL,功能:将(,OPD),向右移动,CL,规定的次数,最高位补入相应个数的,,CF,的内容为最后移入位的值。,4循环左移指令,ROL,语句格式:,ROL OPD,1,或,ROL LPD,CL,功能:将目的操作数的最高位与最低位连成一个环,将环中的所有位一起向左移动,CL,规定的次数。,CF,的内容为最后移入位的值。,5循环右移指令,ROR,语句格式:,ROR OPD,1,或,ROR OPD,CL,功能:将目的操作数的最高位与最低位连成一个环,将环中的所有位一起向右移动,CL,规定的次数,,CF,的内容为最后移入位的值。,6带进位的循环左移指令,RCL,语句格式:,RCL OPD,1,或,RCL OPD,CL,功能:将目的操作数连同,CF,标志一起向左循环移动,CL,规定的次数。,7带进位的循环右移指令,RCR,语句格式:,RCR OPD,1,或,RCR OD,CL,功能:将目的操作数连同,CF,标志一起向右循环移动所规定的次数。,返回本节,2.5,串操作类指令,串操作指令,:,数据传送类指令每次只能传送一个数据,若要传送大批数据就需要重复编程,这样就浪费了大量的时间和空间。为此,8086,提供了一组处理主存中连续存放数据串的指令,,这就是,串操作指令。,返回本章首页,图2.3流程图总结了串操作的过程。,图2.3 串操作流程图,1传送指令,MOVS,语句格式:,MOVSB,字节串传送,MOVSW,字串传送,功能:将以,SI,为指针的源串中的一个字节(或字)存储单元中的数据传送至以,DI,为指针的目的地址中去,并自动修改指针,使之指向下一个字节(或字)存储单元。,即:(,DS:SI)ES:DI。,当,DF=0,时,(,SI,),和(,DI,),增量。,当,DF=1,时,(,SI,),和(,DI,),减量。,2串比较指令,CMPS,语句格式:,CMPSB,字节串比较,CMPSW,字串比较,功能:将,SI,所指的源串中的一个字节(或字)存储单元中的数据与,DI,所指的目的串中的一个字节(或字)存储单元中的数据相减,并根据相减的结果设置标志,但结果并不保存。,即:(,SI)(DI)。,修改串指针,使之指向串中的下一个元素。,当,DF=0,时,(,SI),和(,DI),增量。当,DF=1,时,(,SI),和(,DI),减量。,3串搜索指令,SCAS,语句格式:,SCASB,字节串搜索,SCASW,字串搜索,功能:,AL(,字节)或,AX(,字)中的内容与,DI,所指的目的串中的一个字节(或字)存储单元中的数据相减,根据相减结果设置标志位,结果不保存,,即:字节操作:(,AL)(DI),,字操作:(,AX)(DI)。,修改指针使之指向串中的下一个元素。,当,DF=0,时,(,DI),增量。当,DF=1,时,(,DI),减量。,4从源串中取数指令,LODS,语句格式:,LODSB,从字节串中取数,LODSW,从字串中取数,功能:将,SI,所指的源串中的一个字节(或字)存储单元中的数据取出来送入,AL(,或,AX),中。,即:字节操作:(,SI)AL,,字操作:(,SI)AX。,修改指针,SI,,使它指向串中的下一个元素。,当,DF=0,时,(,SI),增量。当,DF=1,时,(,SI),减量。,5往目的串中存数指令,STOS,语句格式:,STOSB,往字节串中存数,(2),STOSW,往字串中存数,功能:将,AL,或,AX,中的数据送入,DI,所指的目的串中的字节(或字)存储单元中。,即:字节操作:(,AL)DI,,字操作:(,AX)DI。,修改指针,DI,,使之指向串中的下一个元素。,当,DF=0,时,(,DI),增量)。当,DF=1,时,(,DI),减量。,6重复前缀指令,REP REPZ REPNZ,(1),REP,REP,前缀用在,MOVS、STOS、LODS,指令前。,功能:每执行一次串指令(,CX)1,,直到(,CX)=0,,重复执行结束。,(2),REPZ,该指令一般用在,CMP、SCAS,指令前。,功能:每执行一次串指令(,CX)1,,并判断,ZF,标志是否为0,只要(,CX)=0,或,ZF=0,,则重复执行结束。,(3),REPNZ,该指令一般用在,CMPS、SCAS,指令前。,功能:每执行一次串指令(,CX)1,,并判断,ZF,标志是否为0,只要(,CX)=0,或,ZF=1,,则重复执行结束。,2.6,控制转移类指令,2.6.1 条件转移指令,2.6.2 无条件转移指令,2.6.3,循环指令,2.6.4 子程序调用指令,2.6.5 中断指令,返回本章首页,2.6.1 条件转移指令,1简单条件转移指令,2无符号数条件转移指令,3.有符号数条件转移指令,它们都有通用的语句格式和功能。,语句格式:标号:操作符 短标号,功能:如果条件满足,则(,IP),位移量,IP。,1简单条件转移指令,2,无符号数条件转移指令,表2.2无符号数条件转移指令,【例2.53】比较无符号数大小,将较大的数存放,AX,寄存器。,CMPAX,BX ;(AX)(BX),JNBNEXT ;,若,AX=BX,,转移到,NEXT,XCHGAX,BX ;,若,AX=BX,,转移到,NEXT,XCHGAX,BX;,若,AXBX,,交换,NEXT:,返回本节,2.6.2 无条件转移指令,表,2.4,无条件转移指令的语句格式及功能,返回本节,2.6.3 循环指令,1,循环指令,LOOP,2,相等,/,为零循环指令,LOOPE,3,不相等,/,不为零循环指令,LOOPNE,4,CX,为零转移指令,JCXZ,1循环指令,LOOP,语句格式:,LOOP,短标号,功能:(,CX)1 0,,则程序转移(循环);否则,顺序执行。,说明:使用,LOOP,指令可代替两条指令:,DEC CX,JNE,短标号,2相等/为零循环指令,LOOPE,语句格式:,LOOPE,短标号,LOOPZ,短标号,功能:(,CX)1 0,且,ZF=1,,则程序转移(循环);否则,顺序执行。,3不相等/不为零循环指令,LOOPNE,语句格式:,LOOPNE,短标号,LOOPNZ,短标号,功能:(,CX)10,,则程序转移(循环);否则,顺序执行。,4,CX,为零转移指令,JCXZ,语句格式:,JCXZ,短标号,功能:(,CX)10,,则程序转移(循环);否则,顺序执行。,返回本节,2.6.4 子程序调用指令,1子程序调用指令,CALL,(1),段内直接调用,(2),段间直接调用,(3),段内间接调用,(4),段间间接调用,2返回指令,RET,(1),语句格式:,RET,(2),语句格式:,RET n(n,为偶数),返回本节,2.6.5 中断指令,1中断调用指令,INT,语句格式:,INT n,功能:(,FLAGS)(SP),0 IF、TF。,(CS)(SP),(4*n+2)CS。,(IP)(SP),(4*n)IP。,2中断返回指令,IRET,语句格式:,IRET,功能:(,SP,),IP,(,SP,),CS,(,SP,),FLAGS,返回本节,2.7,处理机控制类指令,2.7.1 标志位设置指令,2.7.2,CPU,状态控制指令,返回本章首页,2.7.1 标志位设置指令,1,进位标志操作指令,2,方向标志操作指令,3,中断标志操作指令,返回本节,2.7.2,CPU,状态控制指令,1,空操作指令,NOP,2,总线封锁前缀指令,LOCK,3,暂停指令,HLT,4,交权指令,ESC,5,等待指令,WAIT,返回本节,THANK YOU VERY MUCH,本章到此结束,,谢谢您的光临!,返回本章首页,结 束,此课件下载可自行编辑修改,仅供参考!感谢您的支持,我们努力做得更好!谢谢,
展开阅读全文