16位32位微处理器指令系统_第1页
16位32位微处理器指令系统_第2页
16位32位微处理器指令系统_第3页
16位32位微处理器指令系统_第4页
16位32位微处理器指令系统_第5页
已阅读5页,还剩166页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第3章16位/32位微处理器指令系统指令:要求计算机执行各种特定操作的命令。指令系统:微机能够识别和执行的全部指令集合。不同的微处理器所对应的指令系统也不相同。本章内容:指令的根本格式8086/8088的寻址方式8086/8088的指令系统80386的寻址方式和指令系统Pentium新增加的指令1整理课件3.1指令的根本格式本节内容:指令的构成8086/8088的指令格式2整理课件3.1.1指令的构成包括两局部:操作码:表示操作性质或类型编码操作数:操作对象。一般来说,第一字节表示操作码,第二字节表示寻址方式,第三、四字节表示操作数在内存的位移量或者是立即数(在指令中没有位移量时),第五、六字节表示立即数。3整理课件3.1.28086/8088的指令格式

根本格式:[标号:]操作码助记符目的操作数,源操作数[;注释]标号:为该条指令所在内存单元的符号地址,后面要跟冒号。标号一般由字母开头,后跟字母、数字或特殊字符,不允许使用保存字。操作码助记符:指示CPU执行什么样的操作。操作数:分目的操作数和源操作数两种。目的操作数是指令结果存放的位置,源操作数是指令操作的对象。注释:说明本条指令或一段程序的功能,使程序可读性强。汇编程序对其不进行处理。4整理课件3.28086/8088的寻址方式

一条汇编语言指令,有两个问题需要关注:该条指令将进行什么操作操作的对象和操作后结果的存放位置。操作数的寻址方式就是指寻找操作数位置的方式。本节内容:立即寻址存放器寻址直接寻址存放器间接寻址基址寻址和变址寻址基址变址寻址固定寻址5整理课件1.立即寻址操作数包含在指令中,这种操作数称为立即数可以是8位数值〔00H~FFH〕也可以是16位数值〔0000H~FFFFH〕MOVAL,80H;将80H送入ALMOVAX,306AH;将306AH送入AX立即数寻址方式常用来给存放器和存储单元赋值。操作数直接在指令中取得,不需要使用另外的总线周期,执行时间短、速度快。6整理课件2.存放器寻址操作数在CPU的内部存放器中:8位存放器:AH、AL、BH、BL、CH、CL、DH、DL16位存放器:AX、BX、CX、DX、SI、DI、BP、SP4个段存放器:CS、DS、SS、ESMOVAL,BL;将BL的内容传送到AL中MOVBX,AX;将AX的内容传送到BX中采用存放器寻址的指令在执行时,操作数就在CPU中,不需要访问存储器来取得操作数,执行速度快。另外存放器名比内存地址短,指令所占内存空间少。7整理课件3.直接寻址有效地址EA(EffectiveAddress):操作数的偏移地址。EA可通过不同的寻址方式来得到。直接寻址方式的有效地址在指令中直接给出。默认的段基址在DS段存放器,可使用段前缀改变。用方括号包含有效地址,如:MOVAX,[1000H]。如果有效地址是以符号地址形式提供,那么可不加方括号。MOVAX,BUFA;BUFA为符号地址,这时不加跨段前缀,默认仍为DS数据段。如BUFA变量在附加段中,就必须书写为:MOVAX,ES:BUFA8整理课件例子段基址:2000H有效地址:1000H物理地址:21000HAX:(DS)=2000H,(21000H)=12H,(21001H)=34H。试给出指令MOVAX,[1000H]执行后AX的内容。20000H数据段2FFFFH21000H21001H12H34H存储器指令执行后,(AX)=3412H。9整理课件4.存放器间接寻址有效地址存放在基址存放器BX、BP或变址存放器SI、DI中。如用BX、SI或DI作为间址存放器,那么默认的段基址在DS段存放器。如用BP作为间址存放器,那么默认的段基址在SS段存放器。可使用段前缀改变。MOVAX,[BX];假设(DS)=2000H,(BX)=1000H,那么将数据段21000H、21001H两个单元的内容送到AX中。MOVCX,[BP];假设(SS)=4000H,(BP)=1000H,那么将堆栈段41000H、41001H两个单元的内容送到CX中。MOVAX,ES:[SI];假设(ES)=3000H,(SI)=1000H,那么将附加段31000H、31001H两个单元的内容送到AX中。10整理课件5.基址寻址和变址寻址有效地址是存放器内容与有符号8位或16位位移量之和,存放器可以是BX、BP或SI、DI。有效地址=BX/BP/SI/DI+8/16位位移量如果存放器为BX或BP,那么为基址寻址如果存放器为SI或DI,那么为变址寻址段基址对应BX/SI/DI存放器默认是DS,对应BP存放器默认是SS;可用段前缀改变。11整理课件例子段基址:4000H有效地址:5000H物理地址:45000HAX:(DS)=4000H,(SI)=2000H,内存单元(45000H)=34H,(45001H)=12H。试给出指令MOVAX,[SI+3000H]执行后AX的内容。40000H数据段4FFFFH45000H45001H34H12H存储器指令执行后,(AX)=1234H。12整理课件6.基址变址寻址有效地址由基址存放器〔BX或BP〕的内容加上变址存放器〔SI或DI〕的内容构成:有效地址=BX/BP+SI/DI+8/16位位移量段基址对应BX存放器默认是DS,对应BP存放器默认是SS;可用段前缀改变。该寻址方式适用于数组或表格存取。MOVAX,8[BX+SI];默认操作数在数据段中MOVBX,-6[BP+DI];默认操作数在堆栈段中MOVBX,ES:[BP+DI];操作数在附加段中13整理课件7.固定寻址固定寻址又叫隐含寻址。指令码中不包含指明操作数地址的局部,而其操码本身隐含地指明了操作数地址。如:十进制调整指令DAA,该指令的功能是对AL存放器中的内容进行十进制调整,调整后的内容仍存放到AL中。隐含寻址的指令,不需要计算EA,执行速度快,而且大多为单字节指令。14整理课件3.38086/8088的指令系统符号的约定:OPD:目的操作数〔8/16位〕OPS:源操作数〔8/16位〕本节内容:数据传送类指令算术运算类指令逻辑运算与移位类指令串操作类指令控制转移类指令处理器控制类指令15整理课件3.3.1数据传送类指令数据传送是计算机中最根本、最重要的一种操作,传送指令也是最常使用的一类指令。除标志存放器传送指令外,均不影响标志位。本小节内容:通用数据传送指令标志存放器传送指令目标地址传送指令输入/输出指令16整理课件1.通用数据传送指令包括:MOV传送指令XCHG交换指令XLAT换码指令堆栈操作指令17整理课件1)MOV传送指令格式:MOVOPD,OPSMOV指令是使用最多的指令,它可以完成CPU内存放器之间、存放器与存储器之间的数据传送,还可以将立即数送入存放器或内存。MOVAL,BL;将存放器BL的内容传送到存放器AL中。MOV[DI],AX;将存放器AX的内容传送到DI和DI+1所

指的内存字单元中。MOVCX,[1000H];将数据段中偏移地址1000H和1001H

单元的内容送CX中。MOVBL,40;将立即数40传送到存放器BL。18整理课件MOV指令在使用时应该注意立即数、CS和IP不能作为目的操作数。两个段存放器之间不能相互传送数据。两个存储单元之间不能直接传送。不能将立即数直接传送到段存放器。两个操作数的类型和长度必须一致。19整理课件2)XCHG交换指令格式:XCHGOPD,OPS操作数的类型可以为字节或字。交换只能在通用存放器之间、通用存放器与存储器之间进行。XCHGAX,BX;AX和BX的内容互换20整理课件3)XLAT换码指令格式:XLAT或XLAT表首址功能:使AL中的值变换为内存表格中的对应值。它是一条隐含寻址方式的指令。将数据段内有效地址为(BX)+(AL)的内存字节单元中数据送入AL。该指令常用来查表,即将表头地址赋予BX,再将需求的表内位移地址赋予AL,最后运用XLAT指令即可以将该地址处的表值送到AL。

21整理课件XLAT换码指令的功能图数据段存储器表BXAL+BX+ALAL22整理课件4)PUSH入栈指令与POP出栈指令堆栈是一个“后进先出LIFO〞〔或说“先进后出FILO〞〕的主存区域,位于堆栈段中;SS段存放器记录其段基址。堆栈的存取操作都发生在栈顶;用堆栈指针存放器SP指定。23整理课件入栈指令PUSH格式:PUSHOPS功能:修改指针:(SP)-2→SP;将OPS指定的存放器、段存放器或存储器中的一个字数据压入堆栈的顶部。PUSH指令在使用时应该注意:源操作数只能是16位,而不能是8位的。源操作数不能为立即数。24整理课件PUSH指令的例子例:假设在指令执行前,(SP)=1000H;(AX)=1234H。试分析PUSHAX指令的执行结果。SP堆栈段存储器1000H0FFFH0FFEHSPAX①②12H34H25整理课件出栈指令POP格式:POPOPD功能:将栈顶的一个字数据送至OPD指明的存放器、段存放器(CS除外)或存储器中;修改指针:(SP)+2→SP。POP指令在使用时应该注意:目的操作数只能是16位,而不能是8位的。立即数、CS不能作为目的操作数。26整理课件POP指令的例子例:假设在指令执行前,(SP)=0FFEH,(BX)=2004H,并且堆栈段栈顶(0FFEH)单元内存放34H,(0FFFH)单元内存放12H。试分析POPBX指令的执行结果。SP堆栈段存储器1000H0FFFH0FFEHSPBX①②12H34H=1234H27整理课件2.标志存放器传送指令LAHF指令:取标志存放器指令。将标志存放器FR的低8位传送到AH中。SAHF指令:设置标志存放器指令。将AH的内容传送到标志存放器FR的低8位。PUSHF指令:将标志存放器FR的值压入堆栈。POPF指令:从堆栈中弹出一个字到标志存放器FR中。28整理课件3.目标地址传送指令包括:取偏移地址指令LEA传送偏移地址及数据段首址指令LDS传送偏移地址及附加段首址指令LES29整理课件1)取偏移地址指令LEA格式:LEAOPD,OPS功能:将源操作数的偏移地址送到目的操作数。该指令不影响标志位,源操作数必须是存储器操作数,目的操作数必须是16位通用存放器。LEASI,TABLE;TABLE为存储器操作数的符号地址LEAAX,[SI];该指令等效于MOVAX,SI指令,与MOVAX,[SI]指令的效果不同,注意区别。30整理课件格式:LDSOPD,OPS功能:从源操作数所指定的存储单元中取出某变量的地址指针(共4个字节),将低地址两个字节(偏移量)送到目的操作数,将高地址两个字节(段首址)送到DS中。该指令对标志位不影响,源操作数是双字类型存储器操作数,目的操作数必须是16位通用存放器。2)传送偏移地址及数据段首址指令LDS31整理课件LDS指令的例子设某双字存储单元的偏移地址为3000H,双字数据为12345678H,试分析LDSSI,[3000H]指令的执行结果。DS存储器数据段3000H12H34H3001H3002H3003H56H78HSI=1234H=5678H32整理课件3)传送偏移地址及附加段首址指令LES格式:LESOPD,OPS功能:从源操作数所指定的存储单元取出某变量的地址指针(共4个字节),将低地址两个字节(偏移量)送到目的操作数,将高地址两个字节(变量的段首址)送到ES中。

33整理课件4.输入输出指令输入/输出指令用于完成输入/输出端口与累加器(AL/AX)之间的数据传送,指令中给出输入/输出端口的地址。包括:输入指令IN输出指令OUT34整理课件1)输入指令IN格式:INOPD,OPS功能:从端口(地址为n或在DX中)输入8位数据到AL或输入16位数据到AX。INAL,40H;从40H端口读入一个字节送ALINAX,80H;从80H端口读入一个字节送AL,从

81H端口读入一个字节送AHMOVDX,8F00H;将端口地址8F00H送DX

INAL,DX;从8F00H端口读入一个字节送AL

35整理课件2)输出指令OUT格式:OUTOPD,OPS功能:从AL输出8位数据或从AX输出16位数据到端口(地址为n或在DX中)。OUT40H,AL;将AL内容送40H端口OUT80H,AX;将AL内容送80H端口,

将AH的内容送81H端口MOVDX,8F00H;将端口地址8F00H送DX

OUTDX,AL;将AL内容送8F00H端口36整理课件输入/输出指令在使用时应该注意输入/输出指令对标志存放器没有影响。端口地址大于255时,必须用DX指定端口地址。37整理课件3.3.2算术运算类指令可以完成带符号和不带符号的8位/16位二进制的算术运算,以及BCD码表示的十进制数的算术运算。包括:加法指令减法指令乘法指令符号扩展指令除运算指令十进制调整指令38整理课件1.加法指令包括:不带进位加法指令ADD带进位加法指令ADC加1指令INC39整理课件1)不带进位加法指令ADD格式:ADDOPD,OPS功能:OPS+OPD

OPD。影响标志位CF、AF、PF、SF、OF和ZF。40整理课件2)带进位加法指令ADC格式:ADCOPD,OPS功能:OPS+OPD+CF

OPD。影响标志位CF、AF、PF、SF、OF和ZF。ADC指令常用于多字的加法。

41整理课件3)加1指令格式:INCOPD功能:将目的操作数OPD的内容加1,并将结果回送到目的操作数。影响标志位AF、PF、SF、OF和ZF,但不影响CF标志。INCAX;AX中内容加1,结果送回AXINCBL;BL中内容加1,结果送回BLINCBYTEPTR[SI];将SI所指内存字节单元内容

加1,并回存。42整理课件2.减法指令包括:不带借位的减法指令SUB带借位的减法指令SBB减1指令DEC比较指令CMP求补指令NEG43整理课件1)不带借位的减法指令SUB格式:SUBOPD,OPS功能:OPD-OPS

OPD结果影响标志位CF、AF、PF、SF、OF和ZF。SUBBX,CX;BX的内容减去CX的内容,

结果放入BX

44整理课件2)带借位的减法指令SBB格式:SBBOPD,OPS功能:OPD-OPS-CF

OPD结果影响标志位CF、AF、PF、SF、OF和ZF。SBB[SI],AL;SI所指字节单元内容减AL的

值,再减CF,结果存回原内

存单元。45整理课件3)减1指令DEC格式:DECOPD功能:将目的操作数OPD的内容减1,并将结果回送到目的操作数。影响标志位AF、PF、SF、OF和ZF,但不影响CF标志。DECAX;AX的内容减1,结果送回AX。DECCL;CL的内容减1,结果送回CL。

46整理课件4)比较指令CMP格式:CMPOPD,OPS功能:目的操作数OPD减去源操作数OPS,结果不回送。但影响标志位CF、AF、PF、SF、OF和ZF。CMPAL,09H;将AL的内容和09H比较,结果影响标志位可以根据标志位的变化,来判断比较结果。通过ZF的值来判断两数是否相等。假设ZF=1,说明两数相等;否那么,两数不等。通过CF、OF和SF的变化来判断无符号数或有符号数的大小:对于无符号数,如CF=0,那么目的操作数比源操作数大;如CF=1,那么目的操作数比源操作数小。对于有符号数,如OF=SF,那么目的操作数比源操作数大;如OF≠SF,那么目的操作数比源操作数小。47整理课件5)求补指令NEG格式:NEGOPD功能:由目的操作数OPD求补,将其结果送回目的操作数。实际做0-OPD

OPD运算。影响标志位CF、AF、PF、SF、OF和ZF。MOVAL,05H

NEGAL;(AL)=0FBH,CF=1MOVAL,-05H

NEGAL;(AL)=05H,CF=1

48整理课件3.乘法指令包括:无符号数乘法指令MUL有符号数乘法指令IMUL49整理课件1)无符号数乘法指令MUL格式:MULOPS功能:字节乘法:(AL)×(OPS)→AX

字乘法:(AX)×(OPS)→(DX,AX)50整理课件图示MUL指令在使用时应该注意:OPS不能是立即数。MUL指令只影响CF、OF标志:对于字节乘法,假设AH≠0,那么CF=1,OF=1;否那么CF=0,OF=0。对于字乘法,假设DX≠0,那么CF=1,OF=1;否那么CF=0,OF=0。51整理课件2)有符号数乘法指令IMUL格式:IMULOPS功能:字节乘法:(AL)×(OPS)→AX字乘法:(AX)×(OPS)→(DX,AX)IMUL指令的使用本卷须知同MUL指令。52整理课件4.符号扩展指令包括:将字节扩展为字指令CBW将字扩展为双字指令CWD53整理课件1)将字节扩展为字指令CBW格式:CBW功能:将AL的内容从字节扩展为字,存放到AX。假设AL中数据的最高位为0,那么(AH)=00H;假设AL中数据的最高位为1,那么(AH)=0FFH。该指令不影响标志位。54整理课件2)将字扩展为双字指令CWD格式:CWD功能:将AX的内容从字扩展为双字,存放到DX、AX。假设AX中数据的最高位为0,那么(DX)=0000H;假设AX中数据的最高位为1,那么(DX)=0FFFFH。该指令不影响标志位。55整理课件5.除运算指令包括:无符号数除法指令DIV有符号数除法指令IDIV56整理课件1)无符号数除法指令DIV格式:DIVOPS功能:字节除法:(AX)/(OPS)→AL(商),AH(余数)

字除法:(DX,AX)/(OPS)→AX(商),DX(余数)57整理课件图示DIV指令在使用应该注意:OPS不能是立即数。除法指令不影响标志位,除0会导致结果溢出,产生溢出中断。58整理课件2)有符号数除法指令IDIV格式:IDIVOPS功能:字节除法:(AX)/(OPS)→AL(商),AH(余数)

字除法:(DX,AX)/(OPS)→AX(商),DX(余数)

59整理课件6.十进制调整指令前面的算术运算指令都是二进制运算指令,如何利用它们来进行BCD码十进制运算?一般方法是:首先对BCD码表示的十进制数进行二进制运算,然后再使用调整指令对运算结果进行调整,得出正确的BCD码表示的十进制运算结果。包括:加法的BCD码调整指令减法的BCD码调整指令乘法的非压缩BCD码调整指令AAM除法的非压缩BCD码调整指令AAD60整理课件1)加法的BCD码调整指令包括:压缩BCD码调整指令DAA非压缩BCD码调整指令AAA61整理课件(1)压缩BCD码调整指令DAA格式:DAA功能:将AL中二进制加法运算的结果调整为两位压缩BCD码,结果仍保存在AL中。调整的方法:假设AL的低4位大于9,那么AL的内容加06H,并AF位置1;假设AL的高4位大于9,那么AL的内容加60H,并CF位置1;假设AF=1,那么低4位要加6;假设CF=1,那么高4位要加6。例如:MOVBL,34HMOVAL,56HADDAL,BLDAA上述指令序列执行后,(AL)=90H,CF=0,AF=0。

00110100+0101011010001010+01101001000062整理课件(2)非压缩BCD码调整指令AAA格式:AAA功能:将AL中二进制加法运算结果调整为一位非压缩BCD码,调整后的结果仍保存在AL中,如果向高位有进位(AF=1,CF=1),那么AH的内容加1。调整的方法:假设AL的低4位大于9或AF=1,那么自动将AL的内容加06H,AH内容加1并置AF=CF=1,将AL的高4位清零;假设AL的低4位小于或等于9,那么仅将AL的高4位清零,并AF→CF。DAA、AAA指令在使用时应该注意:DAA、AAA指令一般是紧跟在ADD或ADC指令后使用,单独使用没有意义。调整指令只对AL的内容进行调整,故在调整前,务必保证待调整结果出现在AL。63整理课件2)减法的BCD码调整指令包括:压缩BCD码调整指令DAS非压缩BCD码调整指令AAS64整理课件(1)压缩BCD码调整指令DAS格式:DAS功能:将AL中二进制减法运算的结果调整为两位压缩BCD码,结果仍保存在AL中。调整的方法:假设AF=1或AL的低4位大于9,那么自动(AL)-06H→AL,1→AF;假设CF=1或AL的高4位大于9,那么自动(AL)-60H→AL,1→CF。65整理课件(2)非压缩BCD码调整指令AAS格式:AAS功能:将AL中二进制减法运算结果调整为一位非压缩BCD码,如果有借位,那么保存在CF中。调整的方法:假设AL的低4位大于9或AF=1,那么自动将AL的内容减06H,AH内容减1并置AF=CF=1,将AL的高4位清零;假设AL的低4位小于或等于9,那么仅将AL的高4位清零,并AF→CF。DAS、AAS指令在使用时的本卷须知可参考加法调整指令。66整理课件3)乘法的非压缩BCD码调整指令AAM格式:AAM功能:将AL中二进制乘法运算结果调整为两位非压缩BCD码,高位放在AH,低位放在AL。影响标志位PF、SF和ZF。该指令必须紧跟在MUL之后,且被乘数和乘数必须用非压缩的BCD码表示。67整理课件4)除法的非压缩BCD码调整指令AAD格式:AAD功能:用在两位非压缩的BCD码相除之前,将AX内容调整为二进制数。

68整理课件3.3.3逻辑运算与移位类指令包括:逻辑运算指令移位指令循环移位指令69整理课件1.逻辑运算指令可以对字或字节按位进行逻辑运算。包括:非运算指令NOT与运算指令AND测试指令TEST或运算指令OR异或运算指令XOR70整理课件1)非运算指令NOT格式:NOTOPD功能:将目的操作数的内容按位取反后,再送回目的操作数。该指令不影响标志位。71整理课件2)与运算指令AND格式:ANDOPD,OPS功能:将目的操作数的内容与源操作数按位相与,结果送回目的操作数。影响标志位SF、ZF、PF,使OF=0,CF=0,对AF无定义。例如:ANDAL,0FH执行前:(AL)=39H执行后:(AL)=09HAND指令常用于屏蔽不需要的位,上例中将AL高4位屏蔽,取得低4位。72整理课件3)测试指令TEST格式:TESTOPD,OPS功能:将目的操作数的内容与源操作数按位相与,但结果不送回目的操作数。影响标志位SF、ZF、PF,使OF=0,CF=0,对AF无定义。例子:TESTAL,80H

执行前:(AL)=39H

执行后:ZF=1该指令可以用于判断目的操作数的某个数位是否1。上例中可以根据ZF=1,判断出AL内容的最高位为零。73整理课件4)或运算指令OR格式:OROPD,OPS功能:将目的操作数的内容与源操作数按位相或,结果送回目的操作数。影响标志位SF、ZF、PF,使OF=0,CF=0,对AF无定义。该指令常用来将目的操作数的某一位或几位置1。74整理课件5)异或运算指令XOR格式:XOROPD,OPS功能:将目的操作数的内容与源操作数按位异或,结果送回目的操作数。影响标志位SF、ZF、PF,使OF=0,CF=0,对AF无定义。由于某个操作数和同一个数异或结果为0,故异或运算常被用来比较两数是否相等或初始化某数为0。75整理课件2.移位指令这组指令可以对字节或字中的各位进行算术移位和逻辑移位。移位次数可以是1也可以大于1。假设移位次数大于1时,必须将次数预先放入CL。这组指令影响除AF以外的各个标志位。包括:算术左移指令SAL逻辑左移指令SHL算术右移指令SAR逻辑右移指令SHR76整理课件1)算术左移指令SAL格式:SALOPD,OPS功能:根据源操作数OPS中的移位次数,将目的操作数的内容连续进行左移操作,每次高位进入CF,最低位补0。例3.18MOVCL,3SALAL,CL执行前:(AL)=01H执行后:(AL)=08H,CF=0无符号数的算术左移一位相当于目的操作数乘2。77整理课件2)逻辑左移指令SHL格式:SHLOPD,OPS功能:与算术左移指令SAL完全相同。

78整理课件3)算术右移指令SAR格式:SAROPD,OPS功能:根据源操作数OPS中的移位次数,将目的操作数的内容连续进行右移操作,每次低位进入CF,最高位用移位前的值填补。例如:SARBH,CL执行前:(BH)=84H,(CL)=2执行后:(BH)=0E1H,CF=079整理课件4)逻辑右移指令SHR格式:SHROPD,OPS功能:根据源操作数OPS中的移位次数,将目的操作数的内容连续进行右移操作,每次低位进入CF,最高位补0。例如:SHRAL,CL执行前:(AL)=9AH,(CL)=4执行后:(AL)=09H,CF=180整理课件图3.2移位指令操作过程81整理课件3.循环移位指令循环移位次数的设置和移位指令相同。这组指令只影响CF、OF标志位。循环移位指令常用于按位检查某单元的内容或实现某单元的半字或半字节互换等。包括:循环左移指令ROL循环右移指令ROR带进位的循环左移指令RCL带进位的循环右移指令RCR82整理课件1)循环左移指令ROL格式:ROLOPD,OPS功能:根据源操作数OPS中的移位次数,将目的操作数的内容连续进行循环左移操作。例如:ROLDL,CL执行前:(DL)=0FAH,(CL)=4执行后:(DL)=0AFH,CF=183整理课件2)循环右移指令ROR格式:ROROPD,OPS功能:根据源操作数OPS中的移位次数,将目的操作数的内容连续进行循环右移操作。84整理课件3)带进位的循环左移指令RCL格式:RCLOPD,OPS功能:根据源操作数OPS中的移位次数,连续对目的操作数的内容带CF循环左移操作。85整理课件4)带进位的循环右移指令RCR格式:RCROPD,OPS功能:根据源操作数OPS中的移位次数,连续对目的操作数的内容带CF循环右移操作。例3.19有一无符号32位二进制数存放在DX、AX,其高16位在DX,低16位在AX,以下指令序列实现对该数的除2操作。SHRDX,1RCRAX,186整理课件图3.3循环移位指令的操作过程87整理课件3.3.4串操作类指令字符串是指存储器中顺序存放的类型相同的字节或字的序列。串操作是指对串中每个元素都执行同样的操作。规定一个字符串的长度最长不能超过64K字节。源串存放在数据段,用SI提供源串的偏移地址。

目的串存放在附加段,用DI提供目的串的偏移地址。当方向标志DF=0:地址指针SI、DI自动加1(字节串)或2(字串)

当方向标志DF=1:地址指针SI、DI自动减1(字节串)或2(字串)串操作指令前不加重复前缀,串操作只执行一次。如重复执行串操作,可以用CX存放重复的次数,每重复执行一次,CX内容减1。当CX内容减为0时,串操作停止。88整理课件3.3.4串操作类指令(续)包括:重复指令前缀数据字节串/字串传送指令数据字节串/字串比较指令数据字节串/字串检索指令数据字节串/字串读出指令数据字节串/字串写入指令89整理课件1.重复指令前缀包括:无条件重复前缀REP相等/为零重复前缀REPE/REPZ不相等/不为零重复前缀REPNE/REPNZ90整理课件1)无条件重复前缀REP格式:REP功能:用于一个串操作指令的前缀,每重复执行一次串操作指令,CX的内容减1,直到(CX)=0为止。执行步骤如下:①先判断CX的内容,如(CX)=0,那么串操作停止,否那么执行第②步;②(CX)-1→CX;③执行其后的串操作指令,转第①步。91整理课件2)相等/为零重复前缀REPE/REPZ格式:REPE/REPZ功能:用于一个串操作指令的前缀,每重复执行一次串操作指令,CX的内容减1,直到(CX)=0或ZF=0为止。执行步骤如下:①先判断CX的内容,如(CX)=0或ZF=0,那么串操作停止,否那么执行第②步;②(CX)-1→CX;③执行其后的串操作指令,转第①步。92整理课件3)不相等/不为零重复前缀REPNE/REPNZ格式:REPNE/REPNZ功能:用于一个串操作指令的前缀,每重复执行一次串操作指令,CX的内容减1,直到(CX)=0或ZF=1为止。执行步骤如下:①先判断CX的内容,如(CX)=0或ZF=1,那么串操作停止,否那么执行第②步;②(CX)-1→CX;③执行其后的串操作指令,转第①步。93整理课件2.数据字节串/字串传送指令格式:MOVSB/MOVSW功能:将数据段中由(DS:SI)指向的源串的一个字节(字)传送到附加段由(ES:DI)指向的目的串中,且相应修改地址指针,使其指向下一个字节(字)。例:将内存单元首地址3100H起的100个字节传送到首地址2800H的内存单元。CLDMOVSI,3100HMOVDI,2800HMOVCX,100REPMOVSB94整理课件3.数据字节串/字串比较指令格式:CMPSB/CMPSW功能:将数据段中由(DS:SI)指向源串的一个字节(字)减去附加段由(ES:DI)指向的目的串的一个字节(字),不回送结果,只根据结果影响标志位,并相应修改地址指针,使其指向下一个字节(字)。例:检查内存单元首地址2200H起的50个字节与首地址3200H起的50个字节是否对应相等。如相等,那么BX=0;假设不相等,BX指向第一个不相等的字节单元。AL存放第一个不相等的源串内容。CLDMOVSI,2200HMOVDI,3200HMOVCX,50REPECMPSBJZLP1DECSIMOVBX,SIMOVAL,[SI]JMPLP2LP1:MOVBX,0

LP2:95整理课件4.数据字节串/字串检索指令格式:SCASB/SCASW功能:将AL(AX)的内容减去附加段由(ES:DI)指向的目的串的一个字节(字),不回送结果,只根据结果影响标志位,并相应修改地址指针,使其指向下一个字节(字)。例:在内存附加段首地址为4300H起的100个字节中,查找是否有“*〞,如有,那么将偏移地址送BX,否那么BX=0。CLDMOVDI,4300HMOVAL,‘*’REPNZSCASBJNZLP1DECDIMOVBX,DI;找到“*〞,偏移地址送BXJMPLP2LP1:MOVBX,0;未找到LP2:96整理课件5.数据字节串/字串读出指令格式:LODSB/LODSW功能:将数据段中由(DS:SI)指向源串的一个字节(字)读出,放入AL(AX)中,并相应修改地址指针,使其指向下一个字节(字)。97整理课件6.数据字节串/字串写入指令格式:STOSB/STOSW功能:将AL(AX)的内容写入附加段中由(ES:DI)指向的目的串一个字节(字)中,并相应修改地址指针,使其指向下一个字节(字)。例3.23将内存数据段首地址为1800H起的100个字节清零。CLDMOVDI,1800HMOVCX,100XORAL,ALREPSTOSB98整理课件3.3.5控制转移类指令控制转移指令用来控制程序的执行流程。程序执行顺序的改变实际上是通过修改代码段存放器CS和指令指针IP的内容来实现的。包括:无条件转移指令条件转移指令循环转移指令子程序调用和返回指令中断和中断返回指令99整理课件1.无条件转移指令无条件地转移到指令指定的地址去执行从该地址开始的指令。包括:段内直接短转移段内直接转移段内间接转移段间直接转移段间间接转移100整理课件1)段内直接短转移格式:JMPSHORT目标标号功能:无条件地转移到标号所指定的目标地址去执行程序。目标地址与JMP指令的下一条指令地址之差在-128~+127字节之间。101整理课件2)段内直接转移格式:JMP目标标号JMPNEARPTR目标标号功能:转移的范围扩大到-32768~+32767字节之间。102整理课件3)段内间接转移格式:JMPWORDPTROPD功能:转移到OPD所指定的目标地址去执行程序。OPD只能是16位存放器或两个连续存储的内存字节单元。转移范围为64KB。103整理课件4)段间直接转移格式:JMPFARPTR目标标号功能:将目标标号所在的段基址送CS,将目标标号相对所在段的段内偏移地址送IP。可以转移范围为1MB。104整理课件5)段间间接转移格式:JMPDWORDPTROPD功能:目的操作数为双字,将目的操作数的第一个字送IP,将目的操作数的第二个字送CS。可以转移范围为1MB。例如:JMPDWORDPTR[BX]执行前:(BX)=2000H,(DS)=5000H,(52000H)=0200H,(52002H)=0400H执行后:(IP)=0200H,(CS)=0400H,CPU转到地址为04200H单元执行程序。105整理课件2.条件转移指令满足条件,那么转移,不满足条件那么顺序执行。转移范围都只有-128~+127个字节。所有条件转移指令对标志位均无影响。包括:单标志位转移指令无符号数的条件转移指令有符号数的条件转移指令测试CX条件转移指令106整理课件1)单标志位转移指令

指令测试条件含义指令测试条件含义JZ/JEZF=10/相等则转移JP/JPEPF=1低8位中“1”的个数为偶数则转移JNZ/JNEZF=0非0/不相等则转移JSSF=1结果为负则转移JNP/JPOPF=0低8位中“1”的个数为奇数则转移JNSSF=0结果非负则转移JOOF=1结果溢出则转移JCCF=1有进位则转移JNOOF=0结果不溢出则转移JNCCF=0无进位则转移107整理课件2)无符号数的条件转移指令

该组转移指令用于无符号数的比较,并根据比较的结果进行转移。108整理课件3)有符号数的条件转移指令

该组转移指令用于有符号数的比较,并根据比较的结果进行转移。109整理课件4)测试CX条件转移指令格式:JCXZ目标标号功能:假设(CX)=0,那么转移到目标标号所指定地址去执行程序。110整理课件3.循环转移指令一般用它们来实现程序循环,循环的次数必须放在CX存放器中,这组指令也不影响标志位。包括:计数循环指令相等/为零计数循环指令不相等/不为零计数循环指令111整理课件1)计数循环指令格式:LOOP标号功能:每执行一次LOOP指令,CX的内容减1,假设CX≠0,那么循环转移到标号所指定的目标地址去重复执行程序,直到CX=0,退出循环,接着执行LOOP指令的下一条指令。例:MOVCX,0100H;设置循环次数DELAY:LOOPDELAYLOOP指令执行转移时,用9个时钟周期,结束循环指向下一条指令时,用5个时钟周期,程序员可以设置循环次数,来控制延迟的时间。112整理课件2)相等/为零计数循环指令格式:LOOPE/LOOPZ标号功能:每执行一次循环指令,CX的内容减1,假设CX≠0且ZF=1,那么循环转移到标号所指定的目标地址去重复执行程序,否那么执行循环指令的下一条指令。113整理课件3)不相等/不为零计数循环指令格式:LOOPNE/LOOPNZ标号功能:每执行一次循环指令,CX的内容减1,假设CX≠0且ZF=0,那么循环转移到标号所指定的目标地址去重复执行程序,否那么执行循环指令的下一条指令。114整理课件4.子程序调用和返回指令包括:子程序调用指令CALL返回指令RET115整理课件1)子程序调用指令包括:段内直接调用段内间接调用段间直接调用段间间接调用116整理课件(1)段内直接调用格式:CALL标号功能:首先将返回地址(CALL指令的下一条指令)(16位偏移地址)压入堆栈,然后将标号所指的子程序在本段中的偏移地址送入IP,转子程序执行。117整理课件(2)段内间接调用格式:CALLWORDPTROPD

功能:首先将返回地址压入堆栈,然后将目的操作数的内容送入IP,转至同一段内的子程序执行。118整理课件(3)段间直接调用格式:CALLFARPTR标号功能:首先将断点地址CS、IP顺序压入堆栈,然后将标号所在的段基址送入CS,将标号相对所在段的偏移地址送入IP,转子程序执行。119整理课件(4)段间间接调用格式:CALLDWORDPTROPD功能:首先将断点地址CS、IP顺序压入堆栈,然后将有效地址指定的4个字节送入IP、CS〔低地址的两个字节送IP,高地址的两个字节送CS〕,转子程序执行。120整理课件2)返回指令返回指令用来控制程序返回断点地址处(相应CALL指令的下一条指令)继续执行下去。包括:返回指令带弹出值的返回指令121整理课件(1)返回指令格式:RET功能:把断点地址从堆栈弹出送IP或IP、CS。如该子程序为FAR类型,首先从堆栈弹出一个字送IP(SP+2→SP),再从堆栈弹出一个字送CS(SP+2→SP)。如该子程序为NEAR类型,从堆栈弹出一个字送IP(SP+2→SP),从而返回主程序。122整理课件(2)带弹出值的返回指令格式:RETn功能:n为偶数,在执行RET指令后,再修改指针SP+n→SP,也即先从堆栈弹出断点地址送IP或IP、CS,再废除栈顶的n个字节。123整理课件注意CALL和RET指令不影响标志位。CALL和RET指令必须成对使用。与无条件转移指令的不同之处,在于它含有将断点地址入栈和出栈的操作。124整理课件5.中断和中断返回指令中断指令:使CPU暂停执行后续指令,而转去执行相应的中断效劳程序。中断返回指令:从中断效劳程序返回主程序。包括:软中断指令中断返回指令溢出中断指令125整理课件1)软中断指令格式:INTn功能:n为中断类型码,可以取0~0FFH之间的256个值。每个中断类型码在中断矢量表中占4个字节,前两个字节用来存放中断效劳程序入口地址的偏移地址,后两个字节用来存放段基址。CPU执行INT指令时,首先将标志存放器FR入栈,接着去除IF、TF,然后将当前程序断点的段基址和偏移地址入栈保护,最后将中断矢量表中与中断类型码对应的4个字节内容先后送入IP、CS,这样CPU转去执行中断效劳程序。126整理课件2)中断返回指令格式:IRET功能:放在中断效劳程序的出口处,由它从堆栈中弹出程序断点分别送IP、CS,并弹出一个字送标志存放器FR,以退出中断,返回到断点处执行后续程序。中断效劳程序的最后一条指令必须是IRET。127整理课件3)溢出中断指令格式:INTO功能:该指令为单字节指令,中断类型码为4,放在有符号的算术运算指令之后,仅当运算产生溢出(OF=1)时,即向CPU发出溢出中断请求。128整理课件3.3.6处理器控制类指令包括:标志位操作指令外部同步指令129整理课件1.标志位操作指令进位位清0指令:CLC进位位求反指令:CMC进位位置1指令:STC关中断指令:CLI;置IF=0,禁止外部可屏蔽中断。开中断指令:STI;置IF=1,允许外部可屏蔽中断。方向标志清0指令:CLD方向标志置1指令:STD130整理课件2.外部同步指令空操作指令NOP不执行任何操作,其机器码占一个字节。暂停指令HLT该指令执行后,使机器暂停工作,使处理器处于停机状态,以等待一次外部中断到来,中断结束后,程序继续执行,处理器继续工作。交权指令ESC协处理器在系统加电工作后,就不断检测CPU是否需要协助工作,当发现ESC指令时,被选定的协处理器便开始工作。等待指令WAIT该指令每隔5个时钟周期就测试一次TEST信号,假设该信号为高电平,CPU继续执行WAIT指令,进入等待状态,否那么结束等待,执行后续指令。131整理课件3.480386的寻址方式和指令系统本节内容:80386的寻址方式80386的指令系统132整理课件3.4.180386的寻址方式包括立即寻址、存放器寻址、直接寻址和存放器间接寻址。按照80386系统的存储器组织方式,逻辑地址由选择子和偏移量组成。偏移量的计算方法:偏移量=基址+变址×比例因子+位移量①基址。任何通用存放器都可以作为基址存放器。②位移量。在指令操作码后面的32位、16位或8位数。③变址。除了ESP存放器外,任何通用存放器都可以作为变址存放器。④比例因子。可以为1、2、4或8。按照4个分量组合偏移量的不同方法,可以有9种存储器寻址方式,其中8种属于存放器间接寻址。133整理课件9种存储器寻址方式包括:直接寻址方式存放器间接寻址方式基址寻址方式变址寻址方式带比例因子的变址寻址方式基址变址寻址方式基址加带比例因子的变址寻址方式带位移量的基址加变址寻址方式带位移量的基址加带比例因子的变址寻址方式134整理课件(1)直接寻址方式位移量就是操作数的有效地址,此位移量包含在指令中。例:DECWORDPTR[200];有效地址为200偏移量=基址+变址×比例因子+位移量135整理课件(2)存放器间接寻址方式基址存放器的内容为操作数的有效地址。例:MOV[EBX],EAX;有效地址在EBX偏移量=基址+变址×比例因子+位移量136整理课件(3)基址寻址方式基址存放器的内容和位移量相加形成有效地址。例如:MOV[EBX+100],EAX;有效地址为EBX的内容加100偏移量=基址+变址×比例因子+位移量137整理课件(4)变址寻址方式变址存放器的内容和位移量相加形成有效地址。例:SUBEAX,[ESI],20;有效地址为ESI的内容加20偏移量=基址+变址×比例因子+位移量138整理课件(5)带比例因子的变址寻址方式变址存放器的内容乘以比例因子,再与位移量相加形成有效地址。例:SUBEAX,[ESI*8],7;有效地址为ESI的内容乘以8再加7偏移量=基址+变址×比例因子+位移量139整理课件(6)基址变址寻址方式基址存放器的内容加上变址存放器的内容组成有效地址。例:SUBEAX,[ESI][EBX];有效地址为EBX内容加ESI内容偏移量=基址+变址×比例因子+位移量140整理课件(7)基址加带比例因子的变址寻址方式变址存放器的内容乘以比例因子再加上基址存放器的内容组成有效地址。例:MOVECX,[EDI*2][EBX];有效地址为EDI内容乘以2再加EBX内容偏移量=基址+变址×比例因子+位移量141整理课件(8)带位移量的基址加变址寻址方式基址存放器的内容加位移量,再加上变址存放器的内容组成有效地址。例:MOVEDX,[ESI][EBP+200H];有效地址为EBP内容加200H加ESI内容偏移量=基址+变址×比例因子+位移量142整理课件(9)带位移量的基址加带比例因子的变址寻址方式变址存放器的内容乘以比例因子,再加上基址存放器内容与位移量之和组成有效地址。例:MOVECX,[EDI*2][EBX+20];有效地址为EDI内容乘以2,再加EBX内容再加20偏移量=基址+变址×比例因子+位移量143整理课件3.4.280386的指令系统80386的指令系统完全兼容8086指令系统80386指令系统扩展了数据宽度,对存储器寻址方式也进行了扩充,另外还增加了少量指令。包括:数据传送类指令算术运算类指令逻辑运算类指令串操作指令转移、循环和调用指令条件设置指令系统设置和测试指令144整理课件1.数据传送类指令包括:通用数据传送指令标志存放器传送指令目标地址传送指令输入/输出指令145整理课件1)通用数据传送指令使用MOV指令时,两个操作数的位数必须相同,如不同,可以选用新增的MOVZX和MOVSX指令。如:MOVZXAX,BL;该指令将BL的内容带符号扩展为一个字送入AX。另外PUSH指令的功能有所扩展,其源操作数可以是立即数。如:PUSH0204H另外,80386指令系统还提供了PUSHA指令,可以将全部16位存放器一次压入堆栈,提供的PUSHAD指令可以全部32位存放器一次压入堆栈。146整理课件2)标志存放器传送指令在LAHF、SAHF、PUSHF和POPF的根底上,增加了两条指令,即:PUSHFD;将标志存放器的内容作为双字压入堆栈POPFD;从堆栈弹出双字送标志存放器147整理课件3)地址传送指令80386的地址传送指令实现6字节的地址指针传送。地址指针来自存储单元,目的地址为两个存放器,其中一个为段存放器,一个为双字的通用存放器。LDSEBX,DATA;将DATA开始的指针送DS、EBX存放器LSSESP,DATA;将DATA开始的指针送SS、ESP存放器这些指令适合32位微机系统的多任务操作,因为在任务切换时,需要同时改变段存放器和偏移量指针的值。148整理课件4)输入/输出指令输入/输出指令和8086完全相同,端口地址可以在指令中给出,也可以由DX存放器给出。149整理课件2.算术运算类指令算术运算指令的用法和8086中根本一致,只是在80386指令系统中,运算支持32位。例如:ADDEAX,0FF200A0H;将EAX内容加0FF200A0H送回EAX存放器SUBEAX,EBX;将EAX内容减去EBX内容送回EAX存放器在80386指令系统中,对IMUL指令给出两种扩充形式,例如:IMULDX,BX,100;将BX的内容乘以100,结果送DX存放器这类指令是用一个立即数去乘一个放在存放器或存储器中的数,结果放入指定的存放器。例如:IMULEDX,ECX;将EDX的内容乘以ECX内容,结果送EDX这类指令是一个存放器操作数乘一个同样长度的放在存放器或存储器的数,结果放入该存放器。但由于这两类指令的乘积和被乘数、乘数的长度一样,有时会产生溢出,如溢出,OF标志被自动置1。150整理课件3.逻辑运算类指令逻辑运算指令包括逻辑运算和移位指令。这两组指令的用法和8086中根本一致,只是在80386指令系统中,运算和移位支持32位。例如:ANDEAX,EBX;将EAX内容与EBX内容相与,结果送回EAXROLEBX,CL;按CL指定的次数将EAX内容循环左移在80386指令系统中,还增加了两条专用的双精度移位指令,即双精度左移指令SHLD和双精度右移指令SHRD。例如:SHRDEAX,EBX,10;这条指令将EAX的内容右移10位,高10位由EBX的低10位来补充,而EBX的内容不变。151整理课件4.串操作指令80386的串操作指令和8086中根本一致,包括MOVS、CMPS、SACS、LODS和STOS。此外,80386指令系统还增加了字符串输入指令INS和字符串输出指令OUTS,来处理输入/输出端口的数据块的读写。INS指令可以从一个输入/输出端口读入数据送到一串连续的存储单元;OUTS指令可以将一串连续的存储单元的内容顺序输出到一个输入/输出端口。INS指令使用时有INSB、INSW和INSD三种形式,分别对应字节串、字串和双字串。OUTS与之类似。152整理课件5.转移、循环和调用指令80386的转移指令在形式和意义上和8086相同,唯一不同的是条件转移的地址不再受范围的限制,可以到达存储空间的任何地方。循环指令LOOP、LOOPE、LOOPNE等与8086完全相同,转移范围仍然在-128~+127。调用指令CALL和返回指令RET在用法和含义上与8086类同,只是在80386中,由于EIP是32位,故在堆栈操作时,对于EIP的操作是4个字节。153整理课件6.条件设置指令条件设置是80386中新增加的,用来帮助高级语言估价布尔表达式。例如:SETZ

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论