微型计算机原理及应用课件:第3章 16位32位微处理器指令系统

上传人:s9****2 文档编号:569707161 上传时间:2024-07-30 格式:PPT 页数:171 大小:2.51MB
返回 下载 相关 举报
微型计算机原理及应用课件:第3章 16位32位微处理器指令系统_第1页
第1页 / 共171页
微型计算机原理及应用课件:第3章 16位32位微处理器指令系统_第2页
第2页 / 共171页
微型计算机原理及应用课件:第3章 16位32位微处理器指令系统_第3页
第3页 / 共171页
微型计算机原理及应用课件:第3章 16位32位微处理器指令系统_第4页
第4页 / 共171页
微型计算机原理及应用课件:第3章 16位32位微处理器指令系统_第5页
第5页 / 共171页
点击查看更多>>
资源描述

《微型计算机原理及应用课件:第3章 16位32位微处理器指令系统》由会员分享,可在线阅读,更多相关《微型计算机原理及应用课件:第3章 16位32位微处理器指令系统(171页珍藏版)》请在金锄头文库上搜索。

1、第第3章章 16位位/32位微处理器指令系统位微处理器指令系统 指令指令:要求计算机执行各种特定操作的命令。指令系统指令系统:微机能够识别和执行的全部指令集合。不同的微处理器所对应的指令系统也不相同。 指令的基本格式指令的基本格式3.18086/8088的寻址方式的寻址方式3.28086/8088的指令系统的指令系统3.380386的寻址方式和指令系统的寻址方式和指令系统3.4Pentium新增加的指令新增加的指令3.53.1 指令的基本格式指令的基本格式 指令的构成指令的构成3.1.18086/8088的指令格式的指令格式3.1.23.1.1指令的构成指令的构成包括两部分:n操作码:表示操作

2、性质或类型编码n操作数:操作对象。一般来说,第一字节表示操作码,第二字节表示寻址方式,第三、四字节表示操作数在内存的位移量或者是立即数(在指令中没有位移量时),第五、六字节表示立即数。 3.1.28086/8088的指令格式的指令格式 基本格式基本格式: 标号: 操作码助记符 目的操作数,源操作数 ;注释n标标号号:为该条指令所在内存单元的符号地址,后面要跟冒号。标号一般由字母开头,后跟字母、数字或特殊字符,不允许使用保留字。n操作码助记符操作码助记符:指示CPU执行什么样的操作。n操操作作数数:分目的操作数和源操作数两种。目的操作数是指令结果存放的位置,源操作数是指令操作的对象。n注注释释:

3、说明本条指令或一段程序的功能,使程序可读性强。汇编程序对其不进行处理。 3.2 8086/8088的寻址方式的寻址方式 操作数的寻址方式就是指寻找操作数位置的方式操作数的寻址方式就是指寻找操作数位置的方式。立即寻址立即寻址1寄存器寻址寄存器寻址2直接寻址直接寻址3寄存器间接寻址寄存器间接寻址4基址寻址和变址寻址基址寻址和变址寻址5基址变址寻址基址变址寻址6固定寻址固定寻址71.立即寻址立即寻址操作数包含在指令中,这种操作数称为立即数n可以是8位数值(00HFFH)n也可以是16位数值(0000HFFFFH)MOV AL,80H;将80H送入AL MOV AX,306AH;将306AH送入AX立

4、即数寻址方式常用来给寄存器和存储单元赋值。操作数直接在指令中取得,不需要使用另外的总线周期,执行时间短、速度快。2.寄存器寻址寄存器寻址操作数在CPU的内部寄存器中:n8位寄存器:AH、AL、BH、BL、CH、CL、DH、DLn16位寄存器:AX、BX、CX、DX、SI、DI、BP、SPn4个段寄存器:CS、DS、SS、ESMOV AL,BL;将BL的内容传送到AL中 MOV BX,AX;将AX的内容传送到BX中采用寄存器寻址的指令在执行时,操作数就在CPU中,不需要访问存储器来取得操作数,执行速度快。另外寄存器名比内存地址短,指令所占内存空间少。 3.直接寻址直接寻址有效地址有效地址EA (

5、Effective Address):操作数的偏移地址。EA可通过不同的寻址方式来得到。直接寻址方式的有效地址在指令中直接给出。默认的段基址在DS段寄存器,可使用段前缀改变。用方括号包含有效地址,如:MOV AX,1000H。如果有效地址是以符号地址形式提供,则可不加方括号。 MOV AX,BUFA;BUFA为符号地址,这时不加跨段前 缀,默认仍为DS数据段。如BUFA变量 在附加段中,就必须书写为: MOV AX,ES:BUFA注意:有些宏汇编程序规定,直接寻址的16位常量有效地址必须加段前缀,否则会当作立即数。 例子例子例子段基址:2000H有效地址:1000H物理地址:21000HAX已

6、知: (DS)=2000H ,(21000H)=12H, (21001H)=34H。试给出指令 MOV AX,1000H执行后AX的内容。20000H数据段2FFFFH21000H21001H12H34H存储器存储器指令执行后,指令执行后,(AX)=3412H。4.寄存器间接寻址寄存器间接寻址有效地址存放在基址寄存器有效地址存放在基址寄存器BX、BP或变址寄存器或变址寄存器SI、DI中中。如用BX、SI或DI作为间址寄存器,则默认的段基址在DS段寄存器。如用BP作为间址寄存器,则默认的段基址在SS段寄存器。可使用段前缀改变。MOV AX,BX ;若(DS)=2000H,(BX)=1000H ,

7、则将数据段 21000H、21001H两个单元的内容送到AX中。MOV CX,BP ;若 (SS)=4000H,(BP)=1000H ,则将堆栈段 41000H、41001H两个单元的内容送到CX中。MOV AX,ES:SI ;若(ES)=3000H,(SI)=1000H ,则将附加段 31000H、31001H两个单元的内容送到AX中。 5.基址寻址和变址寻址基址寻址和变址寻址有效地址是寄存器内容与有符号8位或16位位移量之和,寄存器可以是BX、BP或SI、DI。有效地址BX/BP/SI/DI8/16位位移量n如果寄存器为BX或BP,则为基址寻址n如果寄存器为SI或DI,则为变址寻址段基址对

8、应BX/SI/DI寄存器默认是DS,对应BP寄存器默认是SS;可用段前缀改变。例子例子例子段基址:4000H有效地址:5000H物理地址:45000HAX已知: (DS)=4000H , (SI)=2000H, 内存单元(45000H)=34H, (45001H)=12H。试给出指令 MOV AX,SI+3000H执行后AX的内容。40000H数据段4FFFFH45000H45001H34H12H存储器存储器指令执行后,指令执行后,(AX)=1234H。6.基址变址寻址基址变址寻址有效地址由基址寄存器(BX或BP)的内容加上变址寄存器(SI或DI)的内容构成:有效地址BX/BPSI/DI 8/

9、16位位移量段基址对应BX寄存器默认是DS,对应BP寄存器默认是SS;可用段前缀改变。该寻址方式适用于数组或表格存取。MOV AX,8BX+SI ;默认操作数在数据段中 MOV BX,-6BP+DI;默认操作数在堆栈段中 MOV BX,ES:BP+DI ;操作数在附加段中 7.固定寻址固定寻址固定寻址又叫隐含寻址。指令码中不包含指明操作数地址的部分,而其操码本身隐含地指明了操作数地址。如:十进制调整指令DAA,该指令的功能是对AL寄存器中的内容进行十进制调整,调整后的内容仍存放到AL中。隐含寻址的指令,不需要计算EA,执行速度快,而且大多为单字节指令。3.3 8086/8088的指令系统的指令

10、系统符号的约定:符号的约定:nOPD :目的操作数(8/16位)nOPS :源操作数(8/16位)数据传送类指令数据传送类指令3.3.1算术运算类指令算术运算类指令3.3.2逻辑运算与移位类指令逻辑运算与移位类指令3.3.3串操作类指令串操作类指令3.3.4控制转移类指令控制转移类指令3.3.5处理器控制类指令处理器控制类指令3.3.63.3.1 数据传送类指令数据传送类指令数据传送是计算机中最基本、最重要的一种操作,传送指令也是最常使用的一类指令。除标志寄存器传送指令外,均不影响标志位。通用数据传送指令通用数据传送指令1标志寄存器传送指令标志寄存器传送指令2目标地址传送指令目标地址传送指令3

11、输入输入/输出输出指令指令41.通用数据传送指令通用数据传送指令MOV传送指令传送指令XCHG交换指令交换指令XLAT换码指令换码指令堆栈操作指令堆栈操作指令1) MOV传送指令传送指令格式:格式: MOV OPD,OPS MOV指令是使用最多的指令,它可以完成CPU内寄存器之间、寄存器与存储器之间的数据传送,还可以将立即数送入寄存器或内存。MOV AL,BL;将寄存器BL的内容传送到寄存器AL中。MOV DI, AX;将寄存器AX的内容传送到DI和DI+1所 指的内存字单元中。MOV CX,1000H;将数据段中偏移地址1000H和1001H 单元的内容送CX中。MOV BL,40;将立即数

12、40传送到寄存器BL。 注意注意注意 立即数、CS和IP不能作为目的操作数。两个段寄存器之间不能相互传送数据。两个存储单元之间不能直接传送。不能将立即数直接传送到段寄存器。两个操作数的类型和长度必须一致。2) XCHG交换指令交换指令格式:格式:XCHG OPD,OPS操作数的类型可以为字节或字。交换只能在通用寄存器之间、通用寄存器与存储器之间进行。XCHG AX,BX;AX和BX的内容互换3) XLAT换码指令换码指令格式:格式: XLAT 或或 XLAT 表首址表首址功能:使AL中的值变换为内存表格中的对应值。它是一条隐含寻址方式的指令。将数据段内有效地址为(BX)+(AL)的内存字节单元

13、中数据送入AL。该指令常用来查表,即将表头地址赋予BX,再将需求的表内位移地址赋予AL,最后运用XLAT指令即可以将该地址处的表值送到AL。 功能图XLAT换码指令的功能换码指令的功能图图数据段存储器存储器表BXAL+BX+ALAL4)PUSH入栈指令与入栈指令与POP出栈指令出栈指令堆栈是一个“后进先出LIFO”(或说“先进后出FILO”)的主存区域,位于堆栈段中;SS段寄存器记录其段基址。堆栈的存取操作都发生在栈顶;用堆栈指针寄存器SP指定。入栈指令入栈指令PUSH出栈指令出栈指令POP入栈指令入栈指令PUSH格式:格式:PUSH OPS功能:修改指针:(SP)-2SP;将OPS指定的寄存

14、器、段寄存器或存储器中的一个字数据压入堆栈的顶部。PUSH指令在使用时应该注意:n源操作数只能是16位,而不能是8位的。n源操作数不能为立即数。 例子PUSH指令的例子指令的例子例:假设在指令执行前,(SP)=1000H;(AX)= 1234H。试分析PUSH AX指令的执行结果。SP堆栈段存储器存储器1000H0FFFH0FFEHSPAX12H34H出栈指令出栈指令POP格式:格式:POP OPD功能:将栈顶的一个字数据送至OPD指明的寄存器、段寄存器(CS除外)或存储器中;修改指针:(SP)+2SP。POP指令在使用时应该注意:n目的操作数只能是16位,而不能是8位的。n立即数、CS不能作

15、为目的操作数。例子POP指令的例子指令的例子例:假设在指令执行前,(SP)=0FFEH,(BX)=2004H,并且堆栈段栈顶(0FFEH)单元内存放34H,(0FFFH)单元内存放12H。试分析POP BX指令的执行结果。SP堆栈段存储器存储器1000H0FFFH0FFEHSPBX12H34H=1234H2.标志寄存器传送指令标志寄存器传送指令 LAHF指指令令:取标志寄存器指令。将标志寄存器FR的低8位传送到AH中。SAHF指指令令:设置标志寄存器指令。将AH的内容传送到标志寄存器FR的低8位。PUSHF指指令令:将标志寄存器FR的值压入堆栈。POPF指指令令:从堆栈中弹出一个字到标志寄存器

16、FR中。3.目标地址传送指令目标地址传送指令取偏移地址指令取偏移地址指令LEA传送偏移地址及数据段首址指令传送偏移地址及数据段首址指令LDS传送偏移地址及附加段首址指令传送偏移地址及附加段首址指令LES1)取偏移地址指令取偏移地址指令LEA格式:格式:LEA OPD,OPS功能:将源操作数的偏移地址送到目的操作数。该指令不影响标志位,源操作数必须是存储器操作数,目的操作数必须是16位通用寄存器。nLEA SI,TABLE;TABLE为存储器操作数的符号地址nLEA AX,SI;该指令等效于MOV AX,SI指令,与MOV AX,SI 指令的效果不同,注意区别。格式:格式:LDS OPD,OPS

17、功能:从源操作数所指定的存储单元中取出某变量的地址指针(共4个字节),将低地址两个字节(偏移量)送到目的操作数,将高地址两个字节(段首址)送到DS中。该指令对标志位不影响,源操作数是双字类型存储器操作数,目的操作数必须是16位通用寄存器。2)传送偏移地址及数据段首址指令传送偏移地址及数据段首址指令LDS例子LDS指令的例子指令的例子设某双字存储单元的偏移地址为3000H,双字数据为12345678H,试分析LDS SI,3000H指令的执行结果。DS存储器存储器数据段3000H12H34H3001H3002H3003H56H78HSI=1234H=5678H3)传送偏移地址及附加段首址指令传送

18、偏移地址及附加段首址指令LES格式:格式:LES OPD,OPS功能:从源操作数所指定的存储单元取出某变量的地址指针(共4个字节),将低地址两个字节(偏移量)送到目的操作数,将高地址两个字节(变量的段首址)送到ES中。 4.输入输出指令输入输出指令输入/输出指令用于完成输入/输出端口与累加器(AL/AX)之间的数据传送,指令中给出输入/输出端口的地址。输入指令输入指令IN输出指令输出指令OUT注意事项注意事项1)输入指令输入指令IN格式:格式:IN OPD,OPS功能:从端口(地址为n或在DX中)输入位数据到AL或输入16位数据到AX。nIN AL,40H;从40H端口读入一个字节送ALnIN

19、 AX,80H;从80H端口读入一个字节送AL,从 81H端口读入一个字节送AHnMOV DX, 8F00H; 将 端 口 地 址 8F00H送 DXIN AL,DX;从8F00H端口读入一个字节送AL 2)输出指令输出指令OUT格式:格式:OUT OPD,OPS功能:从AL输出8位数据或从AX输出16位数据到端口(地址为n或在DX中)。nOUT 40H,AL;将AL内容送40H端口nOUT 80H,AX;将AL内容送80H端口, 将AH的内容送81H端口nMOV DX,8F00H;将端口地址8F00H送DXOUT DX,AL;将AL内容送8F00H端口输入输入/输出指令在使用时应该注意输出指

20、令在使用时应该注意输入/输出指令对标志寄存器没有影响。端口地址大于255时,必须用DX指定端口地址。 3.3.2 算术运算类指令算术运算类指令 可以完成带符号和不带符号的8位/16位二进制的算术运算,以及BCD码表示的十进制数的算术运算。分为:加法指令加法指令1减法指令减法指令2乘法指令乘法指令3符号扩展指令符号扩展指令4除运算指令除运算指令5十进制调整指令十进制调整指令61.加法指令加法指令不带进位加法指令不带进位加法指令ADD带进位加法指令带进位加法指令ADC加加1指令指令INC1)不带进位加法指令不带进位加法指令ADD格式:ADD OPD,OPS功能:(OPS)+(OPD) OPD。影响

21、标志位CF、AF、PF、SF、OF和ZF。2)带进位加法指令带进位加法指令ADC格式:ADC OPD,OPS功能:(OPS)+(OPD)+CF OPD。影响标志位CF、AF、PF、SF、OF和ZF。ADC指令常用于多字的加法。 3)加指令加指令格式:INC OPD功能:将目的操作数OPD的内容加,并将结果回送到目的操作数。影响标志位AF、PF、SF、OF和ZF,但不影响CF标志。nINC AX;AX中内容加,结果送回AXnINC BL;BL中内容加,结果送回BLnINC BYTE PTR SI ;将SI所指内存字节单元内容 加,并回存。 2.减法指令减法指令不带借位的减法指令不带借位的减法指令

22、SUB带借位的减法指令带借位的减法指令SBB减减1指令指令DEC比较指令比较指令CMP求补指令求补指令NEG1)不带借位的减法指令不带借位的减法指令SUB格式:SUB OPD,OPS功能:(OPD)-(OPS) OPD结果影响标志位CF、AF、PF、SF、OF和ZF。nSUB BX,CX;BX的内容减去CX的内容, 结果放入BX2)带借位的减法指令带借位的减法指令SBB格式:SBB OPD,OPS功能:(OPD)-(OPS)-CFOPD结果影响标志位CF、AF、PF、SF、OF和ZF。 nSBB SI,AL;SI所指字节单元内容减AL的 值,再减CF,结果存回原内 存单元。3)减指令减指令DE

23、C格式:DEC OPD功能:将目的操作数OPD的内容减,并将结果回送到目的操作数。影响标志位AF、PF、SF、OF和ZF,但不影响CF标志。nDEC AX;AX的内容减,结果送回AX。 nDEC CL;CL的内容减,结果送回CL。 4)比较指令比较指令CMP格式:CMP OPD,OPS功能:目的操作数OPD减去源操作数OPS,结果不回送。但影响标志位CF、AF、PF、SF、OF和ZF。 nCMP AL,09H;将AL的内容和09H比较,结果影响标志位可以根据标志位的变化,来判断比较结果。n通过ZF的值来判断两数是否相等。若ZF=1,说明两数相等;否则,两数不等。n通过CF、OF和SF的变化来判

24、断无符号数或有符号数的大小:l对于无符号数,如CF=0,则目的操作数比源操作数大;如CF=1,则目的操作数比源操作数小。l对于有符号数,如OF=SF,则目的操作数比源操作数大;如OFSF,则目的操作数比源操作数小。 5)求补指令求补指令NEG格式:NEG OPD功能:由目的操作数OPD求补,将其结果送回目的操作数。实际做0-(OPD)OPD运算。影响标志位CF、AF、PF、SF、OF和ZF。 nMOV AL,05HNEG AL;(AL)=0FBH,CF=1nMOV AL,-05HNEG AL;(AL)=05H,CF=1 3.乘法指令乘法指令无符号数乘法指令无符号数乘法指令MUL有符号数乘法指令

25、有符号数乘法指令IMUL1)无符号数乘法指令无符号数乘法指令MUL格式: MUL OPS功能: 字节乘法: (AL)(OPS)AX 字乘法: (AX)(OPS)(DX,AX)图示图示图示MUL指令在使用时应该注意:OPS不能是立即数。MUL指令只影响CF、OF标志:n对于字节乘法,若AH0,则CF=1,OF=1;否则CF=0,OF=0。n对于字乘法,若DX0,则CF=1,OF=1;否则CF=0,OF=0。2)有符号数乘法指令有符号数乘法指令IMUL格式:IMUL OPS功能:字节乘法: (AL)(OPS)AX 字乘法: (AX)(OPS)(DX,AX)IMUL指令的使用注意事项同MUL指令。

26、4.符号扩展指令符号扩展指令将字节扩展为字指令将字节扩展为字指令CBW将字扩展为双字指令将字扩展为双字指令CWD1)将字节扩展为字指令将字节扩展为字指令CBW格式:CBW功能:将AL的内容从字节扩展为字,存放到AX。若AL中数据的最高位为0,则(AH)=00H; 若AL中数据的最高位为1,则(AH)=0FFH。该指令不影响标志位。2)将字扩展为双字指令将字扩展为双字指令CWD格式:CWD功能:将AX的内容从字扩展为双字,存放到DX、AX。若AX中数据的最高位为0,则(DX)=0000H; 若AX中数据的最高位为1,则(DX)=0FFFFH。该指令不影响标志位。 5.除运算指令除运算指令无符号数

27、除法指令无符号数除法指令DIV有符号数除法指令有符号数除法指令IDIV1)无符号数除法指令无符号数除法指令DIV格式:DIV OPS功能: 字节除法:(AX)/(OPS)AL(商),AH(余数) 字除法: (DX,AX)/ (OPS)AX(商),DX(余数)图示图示图示DIV指令在使用应该注意:nOPS不能是立即数。n除法指令不影响标志位,除以0会导致结果溢出,产生除法出错中断。 2)有符号数除法指令有符号数除法指令IDIV格式:IDIV OPS功能: 字节除法: (AX)/(OPS)AL(商),AH(余数) 字除法: (DX,AX)/ (OPS)AX(商),DX(余数) 6.十进制调整指令十

28、进制调整指令前面的算术运算指令都是二进制运算指令,如何利用它们来进行BCD 码十进制运算?一般方法是:首先对BCD码表示的十进制数进行二进制运算,然后再使用调整指令对运算结果进行调整,得出正确的BCD码表示的十进制运算结果。加法的加法的BCD码调整指令码调整指令减法的减法的BCD码调整指令码调整指令乘法的非压缩乘法的非压缩BCD码调整指令码调整指令AAM除法的非压缩除法的非压缩BCD码调整指令码调整指令AAD1)加法的加法的BCD码调整指令码调整指令压缩压缩BCD码调整指令码调整指令DAA非非压缩压缩BCD码调整指令码调整指令AAA(1)压缩压缩BCD码调整指令码调整指令DAA格式:DAA功能

29、:将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。例如:MOV BL,34H MOV AL,56H ADD AL,BL DAA 上述指令序列执行后,(AL)=90H ,CF=0,AF=0。 0011 0100 0101 0110 1000 1010 0110 1001 0000(2)非压缩非压缩BCD码调整指令码调整指令AAA格式: AAA功能:将AL中二进制加法运算结果调整

30、为一位非压缩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位清零,并AFCF。DAA、AAA指令在使用时应该注意:nDAA、AAA指令一般是紧跟在ADD或ADC指令后使用,单独使用没有意义。n调整指令只对AL的内容进行调整,故在调整前,务必保证待调整结果出现在AL。2)减法的减法的BCD码调整指令码调整指令压缩压缩BCD码调整指令码调整指令D

31、AS非非压缩压缩BCD码调整指令码调整指令AAS(1)压缩压缩BCD码调整指令码调整指令DAS格式:DAS功能:将AL中二进制减法运算的结果调整为两位压缩BCD码,结果仍保留在AL中。调整的方法:若 AF=1或AL的低4位大于9,则自动(AL)-06HAL,1AF;若 CF=1或AL的高4位大于9,则自动(AL)-60HAL,1CF。 (2)非压缩非压缩BCD码调整指令码调整指令AAS格式:AAS功能:将AL 中二进制减法运算结果调整为一位非压缩BCD码,如果有借位,则保留在CF中。调整的方法:若AL的低4位大于9或AF=1,则自动将AL的内容减06H,AH内容减1并置AF=CF=1,将AL的

32、高4位清零;若AL的低4位小于或等于9,则仅将AL的高4位清零,并AFCF。DAS、AAS指令在使用时的注意事项可参考加法调整指令。 3)乘法的非压缩乘法的非压缩BCD码调整指令码调整指令AAM格式:AAM功能:将AL中二进制乘法运算结果调整为两位非压缩BCD码,高位放在AH,低位放在AL。影响标志位PF、SF和ZF。该指令必须紧跟在MUL之后,且被乘数和乘数必须用非压缩的BCD码表示。4)除法的非压缩除法的非压缩BCD码调整指令码调整指令AAD格式:AAD功能:用在两位非压缩的BCD码相除之前,将AX内容调整为二进制数。 3.3.3逻辑运算与移位类指令逻辑运算与移位类指令 逻辑运算指令逻辑运

33、算指令1移位指令移位指令2循环移位指令循环移位指令31.逻辑运算指令逻辑运算指令可以对字或字节按位进行逻辑运算。非运算指令非运算指令NOT与运算指令与运算指令AND测试指令测试指令TEST或运算指令或运算指令OR异或运算指令异或运算指令XOR1)非运算指令非运算指令NOT格式:NOT OPD功能:将目的操作数的内容按位取反后,再送回目的操作数。该指令不影响标志位。 2)与运算指令与运算指令AND格式:AND OPD,OPS功能:将目的操作数的内容与源操作数按位相与,结果送回目的操作数。影响标志位SF、ZF、PF,使OF=0,CF=0,对AF无定义。 3)测试指令测试指令TEST格式:TEST

34、OPD,OPS功能:将目的操作数的内容与源操作数按位相与,但结果不送回目的操作数。影响标志位SF、ZF、PF,使OF=0,CF=0,对AF无定义。例子: TEST AL,80H 执行前:(AL) =39H 执行后: ZF=1该指令可以用于判断目的操作数的某个数位是否1。上例中可以根据ZF=1,判断出AL内容的最高位为零。 4)或运算指令或运算指令OR格式:OR OPD,OPS功能:将目的操作数的内容与源操作数按位相或,结果送回目的操作数。影响标志位SF、ZF、PF,使OF=0,CF=0,对AF无定义。该指令常用来将目的操作数的某一位或几位置1。5)异或运算指令异或运算指令XOR格式:XOR O

35、PD,OPS功能:将目的操作数的内容与源操作数按位异或,结果送回目的操作数。影响标志位SF、ZF、PF,使OF=0,CF=0,对AF无定义。由于某个操作数和同一个数异或结果为0,故异或运算常被用来比较两数是否相等或初始化某数为0。 2.移位指令移位指令这组指令可以对字节或字中的各位进行算术移位和逻辑移位。移位次数可以是也可以大于。若移位次数大于时,必须将次数预先放入CL。算术左移指令算术左移指令SAL逻辑左移指令逻辑左移指令SHL算术右移指令算术右移指令SAR逻辑右移指令逻辑右移指令SHR1)算术左移指令算术左移指令SAL格式:SAL OPD,OPS功能:根据源操作数OPS中的移位次数,将目的

36、操作数的内容连续进行左移操作,每次高位进入CF,最低位补0 。无符号数的算术左移一位相当于目的操作数乘2。图3.22)逻辑左移指令逻辑左移指令SHL格式:SHL OPD,OPS功能:与算术左移指令SAL完全相同。 3)算术右移指令算术右移指令SAR格式:SAR OPD,OPS功能:根据源操作数OPS中的移位次数,将目的操作数的内容连续进行右移操作,每次低位进入CF,最高位用移位前的值填补 。图3.24)逻辑右移指令逻辑右移指令SHR格式:SHR OPD,OPS功能:根据源操作数OPS中的移位次数,将目的操作数的内容连续进行右移操作,每次低位进入CF,最高位补0 。 图3.2图图3.2 移位指令

37、操作过程移位指令操作过程3.循环移位指令循环移位指令循环移位次数的设置和移位指令相同。这组指令只影响CF、OF标志位。循环左移指令循环左移指令ROL循环右移指令循环右移指令ROR带进位的循环左移指令带进位的循环左移指令RCL带进位的循环右移指令带进位的循环右移指令RCR1)循环左移指令循环左移指令ROL格式:ROL OPD,OPS功能:根据源操作数OPS中的移位次数,将目的操作数的内容连续进行循环左移操作。图3.32)循环右移指令循环右移指令ROR格式:ROR OPD,OPS功能:根据源操作数OPS中的移位次数,将目的操作数的内容连续进行循环右移操作。 图3.33)带进位的循环左移指令带进位的

38、循环左移指令RCL格式:RCL OPD,OPS功能:根据源操作数OPS中的移位次数,连续对目的操作数的内容带CF循环左移操作。图3.34)带进位的循环右移指令带进位的循环右移指令RCR格式: RCR OPD,OPS功能:根据源操作数OPS中的移位次数,连续对目的操作数的内容带CF循环右移操作。 图3.3图图3.3 循环移位指令的操作过程循环移位指令的操作过程3.3.4 串操作类指令串操作类指令 概述概述0重复指令前缀重复指令前缀1数据字节串数据字节串/字串传送指令字串传送指令2数据字节串数据字节串/字串比较指令字串比较指令3数据字节串数据字节串/字串检索指令字串检索指令4数据字节串数据字节串/

39、字串读出指令字串读出指令5数据字节串数据字节串/字串写入指令字串写入指令60.概述概述字符串是指存储器中顺序存放的类型相同的字节或字的序列。串操作是指对串中每个元素都执行同样的操作。规定一个字符串的长度最长不能超过64K字节。源串存放在数据段,用SI提供源串的偏移地址。 目的串存放在附加段,用DI提供目的串的偏移地址。当方向标志DF=0:地址指针SI、DI自动加1(字节串)或2(字串) 当方向标志DF=1:地址指针SI、DI自动减1(字节串)或2(字串)串操作指令前不加重复前缀,串操作只执行一次。 如重复执行串操作,可以用CX存放重复的次数,每重复执行一次,CX内容减1。当CX内容减为0时,串

40、操作停止。1.重复指令前缀重复指令前缀 无条件重复前缀无条件重复前缀REP相等相等/为零重复前缀为零重复前缀REPE/REPZ不相等不相等/不为零重复前缀不为零重复前缀REPNE/REPNZ1)无条件重复前缀无条件重复前缀REP格式:REP功能:用于一个串操作指令的前缀,每重复执行一次串操作指令,CX的内容减1,直到(CX)=0 为止。执行步骤如下:先判断CX的内容,如(CX)=0,则串操作停止,否则执行第步; (CX)-1CX ;执行其后的串操作指令,转第步。 2)相等相等/为零重复前缀为零重复前缀REPE/REPZ格式:REPE/REPZ功能:用于一个串操作指令的前缀,每重复执行一次串操作

41、指令,CX的内容减1,直到(CX)=0 或ZF=0为止。执行步骤如下:先判断CX的内容,如(CX)=0或ZF=0,则串操作停止,否则执行第步; (CX)-1CX ;执行其后的串操作指令,转第步。 3)不相等不相等/不为零重复前缀不为零重复前缀REPNE/REPNZ格式:REPNE/REPNZ功能:用于一个串操作指令的前缀,每重复执行一次串操作指令,CX的内容减1,直到(CX)=0 或ZF=1为止。执行步骤如下:先判断CX的内容,如(CX)=0或ZF=1,则串操作停止,否则执行第步; (CX)-1CX ;执行其后的串操作指令,转第步。 2.数据字节串数据字节串/字串传送指令字串传送指令 格式:格

42、式:MOVSB/MOVSW功能:将数据段中由(DS:SI)指向的源串的一个字节(字)传送到附加段由(ES:DI)指向的目的串中,且相应修改地址指针,使其指向下一个字节(字)。例:将内存单元首地址3100H起的100个字节传送到首地址2800H的内存单元。 CLD MOV SI,3100H MOV DI,2800H MOV CX,100 REP MOVSB 3.数据字节串数据字节串/字串比较指令字串比较指令格式:格式:CMPSB/CMPSW功能:将数据段中由(DS:SI)指向源串的一个字节(字)减去附加段由(ES:DI)指向的目的串的一个字节(字),不回送结果,只根据结果影响标志位,并相应修改地

43、址指针,使其指向下一个字节(字)。例 : 检 查 内 存 单 元 首 地 址2200H起的50个字节与首地址3200H起的50个字节是否对应相等。如相等,则BX=0;若不相等,BX指向第一个不相等的字节单元。AL存放第一个不相等的源串内容。 CLD MOV SI,2200H MOV DI,3200H MOV CX,50 REPE CMPSB JZ LP1 DEC SI MOV BX,SI MOV AL,SI JMP LP2 LP1:MOV BX,0 LP2: 4.数据字节串数据字节串/字串检索指令字串检索指令格式:格式:SCASB/SCASW功能:将AL(AX)的内容减去附加段由(ES:DI)

44、指向的目的串的一个字节(字),不回送结果,只根据结果影响标志位,并相应修改地址指针,使其指向下一个字节(字)。例:在内存附加段首地址为4300H起的100个字节中,查找是否有“*”,如有, 则将偏移地址送BX ,否则BX=0。 CLD MOV DI,4300H MOV AL,* REPNZ SCASB JNZ LP1 DEC DI MOV BX,DI ;找到“*”,偏移地址送BX JMP LP2LP1:MOV BX,0 ;未找到LP2: 5.数据字节串数据字节串/字串读出指令字串读出指令格式:格式:LODSB/LODSW功能:将数据段中由(DS:SI)指向源串的一个字节(字)读出,放入AL(A

45、X)中,并相应修改地址指针,使其指向下一个字节(字)。6.数据字节串数据字节串/字串写入指令字串写入指令格式:格式:STOSB/STOSW功能:将AL(AX)的内容写入附加段中由(ES:DI)指向的目的串一个字节(字)中,并相应修改地址指针,使其指向下一个字节(字)。3.3.5 控制转移类指令控制转移类指令控制转移指令用来控制程序的执行流程。程序执行顺序的改变实际上是通过修改代码段寄存器CS和指令指针IP的内容来实现的。无条件转移指令无条件转移指令1条件转移指令条件转移指令2循环转移指令循环转移指令3子程序调用和返回指令子程序调用和返回指令4中断和中断返回指令中断和中断返回指令51.无条件转移

46、指令无条件转移指令无条件地转移到指令指定的地址去执行从该地址开始的指令。段内直接短转移段内直接短转移段内直接转移段内直接转移段内间接转移段内间接转移段间直接转移段间直接转移段间间接转移段间间接转移1)段内直接短转移段内直接短转移格式:JMP SHORT 目标标号功能:无条件地转移到标号所指定的目标地址去执行程序。目标地址与JMP指令的下一条指令地址之差在-128+127字节之间。2)段内直接转移段内直接转移格式:JMP 目标标号 JMP NEAR PTR 目标标号功能:转移的范围扩大到-32768+32767字节之间。3)段内间接转移段内间接转移格式:JMP WORD PTR OPD 功能:转

47、移到OPD所指定的目标地址去执行程序。OPD只能是16位寄存器或两个连续存储的内存字节单元。转移范围为64KB。4)段间直接转移段间直接转移格式:JMP FAR PTR 目标标号功能:将目标标号所在的段基址送CS,将目标标号相对所在段的段内偏移地址送IP。可以转移范围为1MB。5)段间间接转移段间间接转移格式:JMP DWORD PTR OPD功能:目的操作数为双字,将目的操作数的第一个字送IP,将目的操作数的第二个字送CS。可以转移范围为1MB。2.条件转移指令条件转移指令满足条件,则转移,不满足条件则顺序执行。转移范围都只有-128+127个字节。所有条件转移指令对标志位均无影响。单标志位

48、转移指令单标志位转移指令无符号数的条件转移指令无符号数的条件转移指令有符号数的条件转移指令有符号数的条件转移指令测试测试CX条件转移指令条件转移指令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有进位则转移JNOOF0结果不溢出则转移JNCCF0无进位则转移2)无符号数的条件转移指令无符号数的条件

49、转移指令 该组转移指令用于无符号数的比较,并根据比较的结果进行转移。 3)有符号数的条件转移指令有符号数的条件转移指令 该组转移指令用于有符号数的比较,并根据比较的结果进行转移。 4)测试测试CX条件转移指令条件转移指令格式:格式:JCXZ 目标标号目标标号功能:若(CX)=0,则转移到目标标号所指定地址去执行程序。3.循环转移指令循环转移指令一般用它们来实现程序循环,循环的次数必须放在CX寄存器中,这组指令也不影响标志位。有三条循环控制指令:计数循环指令计数循环指令相等相等/为零计数循环指令为零计数循环指令不相等不相等/不为零计数循环指令不为零计数循环指令1)计数循环指令计数循环指令格式:格

50、式: LOOP 标号标号功能:每执行一次LOOP指令,CX的内容减,若(CX)0,则循环转移到标号所指定的目标地址去重复执行程序,直到(CX)=0,退出循环,接着执行LOOP指令的下一条指令。例: MOV CX,0100H;设置循环次数DELAY:LOOP DELAY2)相等相等/为零计数循环指令为零计数循环指令格式:格式:LOOPE/LOOPZ 标号标号功能:每执行一次循环指令,CX的内容减,若(CX)0且ZF=1,则循环转移到标号所指定的目标地址去重复执行程序,否则执行循环指令的下一条指令。 3)不相等不相等/不为零计数循环指令不为零计数循环指令格式:格式:LOOPNE/LOOPNZ 标号

51、标号功能:每执行一次循环指令,CX的内容减,若(CX)0且ZF=0,则循环转移到标号所指定的目标地址去重复执行程序,否则执行循环指令的下一条指令。 4.子程序调用和返回指令子程序调用和返回指令子程序调用指令子程序调用指令返回指令返回指令1)子程序调用指令子程序调用指令段内直接调用段内直接调用段内间接调用段内间接调用段间直接调用段间直接调用段间间接调用段间间接调用(1)段内直接调用段内直接调用格式:格式:CALL 标号标号功能:首先将返回地址(CALL指令的下一条指令)(16位偏移地址)压入堆栈,然后将标号所指的子程序在本段中的偏移地址送入IP,转子程序执行。 (2)段内间接调用段内间接调用格式

52、:格式:CALL WORD PTR OPD 功能:首先将返回地址压入堆栈,然后将目的操作数的内容送入IP,转至同一段内的子程序执行。(3)段间直接调用段间直接调用格式:格式:CALL FAR PTR 标号标号功能:首先将断点地址CS、IP顺序压入堆栈,然后将标号所在的段基址送入CS,将标号相对所在段的偏移地址送入IP,转子程序执行。(4)段间间接调用段间间接调用格式:格式:CALL DWORD PTR OPD功能:首先将断点地址CS、IP顺序压入堆栈,然后将有效地址指定的4个字节送入IP、CS(低地址的两个字节送IP,高地址的两个字节送CS),转子程序执行。2)返回指令返回指令返回指令用来控制

53、程序返回断点地址处(相应CALL指令的下一条指令)继续执行下去。返回指令返回指令带弹出值的返回指令带弹出值的返回指令注意注意(1)返回指令返回指令格式:格式:RET功能:把断点地址从堆栈弹出送IP或IP、CS。如该子程序为FAR类型,首先从堆栈弹出一个字送IP(SP)+2SP),再从堆栈弹出一个字送CS (SP)+2SP)。如该子程序为NEAR类型,从堆栈弹出一个字送IP(SP)+2SP),从而返回主程序。(2)带弹出值的返回指令带弹出值的返回指令格式:格式:RET n功能:n为偶数,在执行RET指令后,再修改指针(SP)+nSP,也即先从堆栈弹出断点地址送IP或IP、CS,再废除栈顶的n个字

54、节。 注意注意CALL和RET指令不影响标志位。CALL和RET指令必须成对使用。与无条件转移指令的不同之处,在于它含有将断点地址入栈和出栈的操作。 5.中断和中断返回指令中断和中断返回指令中断指令:使CPU暂停执行后续指令,而转去执行相应的中断服务程序。中断返回指令:从中断服务程序返回主程序。软中断指令软中断指令中断返回指令中断返回指令溢出中断指令溢出中断指令1)软中断指令软中断指令格式:格式:INT n功能:n为中断类型码,可以取00FFH之间的256个值。每个中断类型码在中断矢量表中占4个字节,前两个字节用来存放中断服务程序入口地址的偏移地址,后两个字节用来存放段基址。CPU执行INT指

55、令时,首先将标志寄存器FR 入栈,接着清除IF、TF,然后将当前程序断点的段基址和偏移地址入栈保护,最后将中断矢量表中与中断类型码对应的4个字节内容先后送入IP、CS,这样CPU转去执行中断服务程序。 2)中断返回指令中断返回指令格式:格式:IRET功能:放在中断服务程序的出口处,由它从堆栈中弹出程序断点分别送IP、CS,并弹出一个字送标志寄存器FR,以退出中断,返回到断点处执行后续程序。中断服务程序的最后一条指令必须是IRET。 3)溢出中断指令溢出中断指令格式:格式:INTO功能:该指令为单字节指令,中断类型码为4,放在有符号的算术运算指令之后,仅当运算产生溢出(OF=1)时,即向CPU发

56、出溢出中断请求。 3.3.6 处理器控制类指令处理器控制类指令标志位操作指令标志位操作指令1外部同步指令外部同步指令21.标志位操作指令标志位操作指令进位位清0指令:CLC进位位求反指令:CMC进位位置1指令:STC关中断指令:CLI;置IF=0,禁止外部可屏蔽中断。开中断指令:STI;置IF=1,允许外部可屏蔽中断。方向标志清0指令:CLD方向标志置1指令:STD2.外部同步指令外部同步指令空操作指令NOP不执行任何操作,其机器码占一个字节。暂停指令HLT该指令执行后,使机器暂停工作,使处理器处于停机状态,以等待一次外部中断到来,中断结束后,程序继续执行,处理器继续工作。交权指令ESC协处理

57、器在系统加电工作后,就不断检测CPU是否需要协助工作,当发现ESC指令时,被选定的协处理器便开始工作。等待指令WAIT该指令每隔5个时钟周期就测试一次TEST信号,若该信号为高电平,CPU继续执行WAIT指令,进入等待状态,否则结束等待,执行后续指令。 3.4 80386的寻址方式和指令系统的寻址方式和指令系统80386的寻址方式的寻址方式3.4.180386的指令系统的指令系统3.4.23.4.1 80386的寻址方式的寻址方式包括立即寻址、寄存器寻址、直接寻址和寄存器间接寻址。按照80386系统的存储器组织方式,逻辑地址由选择子和偏移量组成。偏移量的计算方法: 偏移量偏移量=基址变址基址变

58、址比例因子位移量比例因子位移量基址。任何通用寄存器都可以作为基址寄存器。位移量。在指令操作码后面的32位、16位或8位数。变址。除了ESP寄存器外,任何通用寄存器都可以作为变址寄存器。比例因子。可以为1、2、4或8。按照4个分量组合偏移量的不同方法,可以有9种种存存储储器器寻寻址方式址方式,其中8种属于寄存器间接寻址。 9种存储器寻址方式种存储器寻址方式(1)直接寻址方式(2)寄存器间接寻址方式(3)基址寻址方式(4)变址寻址方式(5)带比例因子的变址寻址方式(6)基址变址寻址方式(7)基址加带比例因子的变址寻址方式(8)带位移量的基址加变址寻址方式(9)带位移量的基址加带比例因子的变址寻址方

59、式(1)直接寻址方式直接寻址方式位移量就是操作数的有效地址,此位移量包含在指令中。例:DEC WORD PTR 200 ;有效地址为200偏移量偏移量= =基址变址基址变址比例因子位移量比例因子位移量(2)寄存器间接寻址方式寄存器间接寻址方式基址寄存器的内容为操作数的有效地址。例: MOV EBX,EAX;有效地址在EBX偏移量偏移量= =基址变址基址变址比例因子位移量比例因子位移量(3)基址寻址方式基址寻址方式基址寄存器的内容和位移量相加形成有效地址。例如:MOV EBX+100,EAX;有效地址为EBX的内容加100 偏移量偏移量= =基址变址基址变址比例因子位移量比例因子位移量(4)变址

60、寻址方式变址寻址方式变址寄存器的内容和位移量相加形成有效地址。例:SUB EAX,ESI,20;有效地址为ESI的内容加20偏移量偏移量= =基址变址基址变址比例因子位移量比例因子位移量(5)带比例因子的变址寻址方式带比例因子的变址寻址方式变址寄存器的内容乘以比例因子,再与位移量相加形成有效地址。例:SUB EAX,ESI*8,7;有效地址为ESI的内容乘以8再加7偏移量偏移量= =基址变址基址变址比例因子位移量比例因子位移量(6)基址变址寻址方式基址变址寻址方式基址寄存器的内容加上变址寄存器的内容组成有效地址。例:SUB EAX,ESIEBX ;有效地址为EBX内容加ESI内容偏移量偏移量=

61、 =基址变址基址变址比例因子位移量比例因子位移量(7)基址加带比例因子的变址寻址方式基址加带比例因子的变址寻址方式变址寄存器的内容乘以比例因子再加上基址寄存器的内容组成有效地址。例:MOV ECX,EDI*2EBX;有效地址为EDI内容乘以2再加EBX内容偏移量偏移量= =基址变址基址变址比例因子位移量比例因子位移量(8)带位移量的基址加变址寻址方式带位移量的基址加变址寻址方式基址寄存器的内容加位移量,再加上变址寄存器的内容组成有效地址。例:MOV EDX,ESIEBP+200H;有效地址为EBP内容加200H加ESI内容偏移量偏移量= =基址变址基址变址比例因子位移量比例因子位移量(9)(9

62、)带位移量的基址加带比例因子的变址寻址方带位移量的基址加带比例因子的变址寻址方带位移量的基址加带比例因子的变址寻址方带位移量的基址加带比例因子的变址寻址方式式式式变址寄存器的内容乘以比例因子,再加上基址寄存器内容与位移量之和组成有效地址。例:MOV ECX,EDI*2EBX+20 ;有效地址为EDI内容乘以2,再加EBX内容再加20偏移量偏移量= =基址变址基址变址比例因子位移量比例因子位移量3.4.2 80386的指令系统的指令系统80386的指令系统完全兼容8086指令系统80386指令系统扩展了数据宽度,对存储器寻址方式也进行了扩充,另外还增加了少量指令。分为:数据传送类指令数据传送类指

63、令1算术运算类指令算术运算类指令2逻辑运算类指令逻辑运算类指令3串操作指令串操作指令4转移、循环和调用指令转移、循环和调用指令5条件设置指令条件设置指令6系统设置和测试指令系统设置和测试指令71.数据传送类指令数据传送类指令通用数据传送指令通用数据传送指令标志寄存器传送指令标志寄存器传送指令目标地址传送指令目标地址传送指令输入输入/输出指令输出指令1)通用数据传送指令通用数据传送指令使用MOV指令时,两个操作数的位数必须相同,如不同,可以选用新增的MOVZX和MOVSX指令。如:MOVZX AX,BL;该指令将BL的内容带符号扩展为一个字送入AX。另外PUSH指令的功能有所扩展,其源操作数可以

64、是立即数。如:PUSH 0204H另外,80386指令系统还提供了PUSHA指令,可以将全部16位寄存器一次压入堆栈,提供的PUSHAD指令可以全部32位寄存器一次压入堆栈。2)标志寄存器传送指令标志寄存器传送指令在LAHF、SAHF、PUSHF和POPF的基础上,增加了两条指令,即:PUSHFD;将标志寄存器的内容作为双字压入堆栈POPFD ;从堆栈弹出双字送标志寄存器 3)目标地址传送指令目标地址传送指令80386的地址传送指令实现字节的地址指针传送。地址指针来自存储单元,目的地址为两个寄存器,其中一个为段寄存器,一个为双字的通用寄存器。nLDS EBX,DATA;将DATA开始的指针送D

65、S、EBX寄存器nLSS ESP,DATA;将DATA开始的指针送SS、ESP寄存器这这些些指指令令适适合合32位位微微机机系系统统的的多多任任务务操操作作,因因为为在在任任务务切切换换时时,需需要要同同时时改改变变段段寄寄存存器器和和偏偏移移量量指指针针的值的值。 4)输入输入/输出指令输出指令输入/输出指令和8086完全相同,端口地址可以在指令中给出,也可以由DX寄存器给出。 2.算术运算类指令算术运算类指令算术运算指令的用法和8086中基本一致,只是在80386指令系统中,运算支持32位。n例如: ADD EAX,0FF200A0H;将EAX 内容加0FF200A0H送回EAX寄存器nS

66、UB EAX,EBX;将EAX 内容减去EBX内容送回EAX寄存器在80386指令系统中,对IMUL指令给出两种扩充形式,n例如: IMUL DX,BX,100;将BX的内容乘以100,结果送DX寄存器u这类指令是用一个立即数去乘一个放在寄存器或存储器中的数,结果放入指定的寄存器。n例如: IMUL EDX,ECX;将EDX的内容乘以ECX内容,结果送EDXu这类指令是一个寄存器操作数乘一个同样长度的放在寄存器或存储器的数,结果放入该寄存器。但由于这两类指令的乘积和被乘数、乘数的长度一样,有时会产生溢出,如溢出,OF标志被自动置1。 3.逻辑运算类指令逻辑运算类指令逻辑运算指令包括逻辑运算和移

67、位指令。这两组指令的用法和8086中基本一致,只是在80386指令系统中,运算和移位支持32位。n例如:AND EAX,EBX;将EAX 内容与EBX内容相与,结果送回EAXnROL EBX,CL;按CL指定的次数将EAX内容循环左移在80386指令系统中,还增加了两条专用的双精度移位指令,即双精度左移指令SHLD和双精度右移指令SHRD。n例如: SHRD EAX,EBX,10;这条指令将EAX的内容右移10位,高10位由EBX的低10位来补充,而EBX的内容不变。4.串操作指令串操作指令80386的串操作指令和8086中基本一致,包括MOVS、CMPS、SACS、LODS和STOS。此外,

68、80386指令系统还增加了字符串输入指令INS和字符串输出指令OUTS,来处理输入/输出端口的数据块的读写。INS指令可以从一个输入/输出端口读入数据送到一串连续的存储单元;OUTS指令可以将一串连续的存储单元的内容顺序输出到一个输入/输出端口。INS指令使用时有INSB、INSW 和INSD三种形式,分别对应字节串、字串和双字串。OUTS与之类似。5.转移、循环和调用指令转移、循环和调用指令80386的转移指令在形式和意义上和8086相同,唯一不同的是条件转移的地址不再受范围的限制,可以到达存储空间的任何地方。循环指令LOOP、LOOPE、LOOPNE等与8086完全相同,转移范围仍然在-1

69、28+127。调用指令CALL和返回指令RET在用法和含义上与8086类同,只是在80386中,由于EIP是32位,故在堆栈操作时,对于EIP的操作是4个字节。 6.条件设置指令条件设置指令条件设置是80386中新增加的,用来帮助高级语言估价布尔表达式。n例如:SETZ AL;若ZF=1,则AL设置为1,否则设置为0nCMP AX,1000 SETBE BX;若AX低于等于1000,则BX设置为1,否则设置为0 7.系统设置和测试指令系统设置和测试指令这组指令也是80386中新增加的,它们一般出现在操作系统中,用来对系统设置和测试。1)CLTS清TS标志指令2)SGDT/SLDT/SIDT 指

70、令3)LTR 装入任务寄存器指令4)STR 存储任务寄存器指令5)LAR 装入访问权指令6)LSL 装入段界限值指令7)LGDT/LLDT/LIDT 指令8)VERR/VERW 检测段类型指令9)LMSW 装入机器状态字指令10)SMSW 存储机器状态字指令11)ARPL 调整请求权级指令2)SGDT/SLDT/SIDT 指令指令这条指令将全局描述符表寄存器、局部描述符表寄存器或中断描述符表寄存器的内容送到存储器。例如:SGDT MEM1;其中MEM1为字节存储器操作数 SLDT MEM2;其中MEM2为2字节存储器操作数 SIDT MEM3;其中MEM3为6字节存储器操作数3)LTR 装入任

71、务寄存器指令装入任务寄存器指令这条指令一般用在多任务操作系统中,它将内存中2个字节装入任务寄存器TR,执行该指令后,相应的任务状态段TSS 标上“忙”标志。例如:LTR MEM2;其中MEM2为2字节存储器操作数4)STR 存储任务寄存器指令存储任务寄存器指令这条指令一般用在多任务操作系统中,它将任务寄存器TR的内容送入内存中2个字节。例如: STR MEM2 ;其中MEM2为2字节存储器操作数5)LAR 装入访问权指令装入访问权指令本指令将2字节选择子中的访问权字节送目的寄存器。例如:LAR AX,SELECT;将选择子中的访问权字节送AH,AL清 6)LSL 装入段界限值指令装入段界限值指

72、令本指令将描述符中的段界限值送目的寄存器。在指令中,由选择子来指出段描述符。例如: LSL BX,SELECT2;将SELECT2选择子所对应的描述符中的段界限值送BX7)LGDT/LLDT/LIDT 指令指令这3条指令分别将存储器的内容送全局描述符表寄存器、局部描述符表寄存器或中断描述符表寄存器的内容。例如:LGDT MEM1;其中MEM1为字节存储器操作数 LLDT MEM2;其中MEM2为2字节存储器操作数 LIDT MEM3;其中MEM3为6字节存储器操作数8)VERR/VERW 检测段类型指令检测段类型指令VERR指令检测选择子所对应的段是否可读,VERW指令则检测一个选择子所对应的

73、段是否可写。例如:VERR SELECT1;将SELECT1选择子所对应的段是否可读 VERW SELECT2;将SELECT2选择子所对应的段是否可写9)LMSW 装入机器状态字指令装入机器状态字指令本指令将存储器中的2个字节送到机器状态字MSW。通过这种方式,可以使CPU切换到保护方式。例如:LMSW SP ;将堆栈指针SP所指出的2个字节送MSW 10)SMSW存储机器状态字指令存储机器状态字指令本指令将个字节机器状态字MSW存入内存中。例如:SMSW MEM2;其中MEM2为2字节存储器操作数11)ARPL调整请求权级指令调整请求权级指令本指令可以调整选择子的RPL字段,由此常用来阻止

74、应用程序访问操作系统中涉及安全的高级别的子程序。ARPL的第一个操作数可由存储器或寄存器给出,第二个操作数必须是寄存器。如前者的RPL(最后2 位)小于后者的RPL,则ZF置1,且将前者的RPL增值,使其等于后者的RPL;否则,ZF清0,并不改变前者的RPL。例如:ARPL MEM_WORD,BX3.5 Pentium新增加的指令新增加的指令Pentium一共增加了3条处理器专用指令和5条系统控制指令。处理器专用指令处理器专用指令1系统控制指令系统控制指令21.处理器专用指令处理器专用指令CMPXCHG8B m 8字节比较指令字节比较指令RDSTC 读时钟周期数指令读时钟周期数指令CPUID

75、读读CPU的标识等有关信息的标识等有关信息1)CMPXCHG8B m 8字节比较指令字节比较指令指令将EDX:EAX中的8个字节与m所指的存储器中的8个字节比较:n若相等,则ZF置1,并将EDX:EAX中的8个字节送到目的存储单元。n若不相等,则ZF清0,并将目的存储单元8个字节送EDX:EAX中。2)RDSTC 读时钟周期数指令读时钟周期数指令本指令读取CPU中用来记录时钟周期数的64位计数器的值,并将读取的值送EDX:EAX,供一些应用软件通过两次执行该指令来确定某段程序需要多少时钟周期。3)CPUID 读读CPU的标识等有关信息的标识等有关信息本指令用来获得Pentium处理器的类型等有

76、关信息。在执行此指令前,EAX中如为0,则指令执行后,EAX、EBX、ECX、EDX的内容合起来即为Intel产品的标识字符串,如此前EAX中为1,则指令执行后,在EAX、EBX、ECX、EDX 中得到CPU级别、工作模式、可设置的断点数等。2.系统控制指令系统控制指令1)RDMSR 读取模式专用寄存器指令读取模式专用寄存器指令n本指令用来读出Pentium处理器的模式专用寄存器中的值。在执行该指令前,在ECX中设置寄存器号,可以为014H,指令执行后,读取的内容存放EDX:EAX。2)WRMSR 写入模式专用寄存器指令写入模式专用寄存器指令n本指令将EDX:EAX中的64位数写入模式专用寄存器。同样在执行该指令前,必须在ECX中设置寄存器号,可以为014H。3)RSM 复位到系统管理模式复位到系统管理模式4)MOV CR4,R32 将将32位寄存器的内容送控制寄存器位寄存器的内容送控制寄存器CR5)MOV R32,CR4 将控制寄存器将控制寄存器CR内容送内容送32位寄存器位寄存器

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号