第3章16位/32位微处理器指令系统指令:要求计算机执行各种特定操作的命令。指令系统:微机能够识别和执行的全部指令集合。不同的微处理器所对应的指令系统也不相同。指令的基本格式3.18086/8088的寻址方式3.28086/8088的指令系统3.380386的寻址方式和指令系统3.4Pentium新增加的指令3.5作业自学3.1指令的基本格式指令的构成3.1.18086/8088的指令格式3.1.23.1.1指令的构成包括两部分:操作码:表示操作性质或类型编码操作数:操作对象。一般来说,第一字节表示操作码,第二字节表示寻址方式,第三、四字节表示操作数在内存的位移量或者是立即数(在指令中没有位移量时),第五、六字节表示立即数。指令、数据在存储器中的存放3.1.28086/8088的指令格式基本格式:[标号:]操作码助记符目的操作数,源操作数[;注释]标号:为该条指令所在内存单元的符号地址,后面要跟冒号。标号一般由字母开头,后跟字母、数字或特殊字符,不允许使用保留字。操作码助记符:指示CPU执行什么样的操作。操作数:分目的操作数和源操作数两种。目的操作数是指令结果存放的位置,源操作数是指令操作的对象。注释:说明本条指令或一段程序的功能,使程序可读性强。汇编程序对其不进行处理。3.28086/8088的寻址方式操作数的寻址方式就是指寻找操作数位置的方式。立即寻址1寄存器寻址2直接寻址3寄存器间接寻址4基址寻址和变址寻址5基址变址寻址6固定寻址7思考题存储器寻址1.立即寻址操作数包含在指令中,这种操作数称为立即数可以是8位数值(00H~FFH)也可以是16位数值(0000H~FFFFH)MOVAL,80H;将80H送入ALMOVAX,306AH;将306AH送入AX立即数寻址方式常用来给寄存器和存储单元赋值。操作数直接在指令中取得,不需要使用另外的总线周期,执行时间短、速度快。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中,不需要访问存储器来取得操作数,执行速度快。另外寄存器名比内存地址短,指令所占内存空间少。3.直接寻址有效地址EA(EffectiveAddress):操作数的偏移地址。EA可通过不同的寻址方式来得到。直接寻址方式的有效地址在指令中直接给出。默认的段基址在DS段寄存器,可使用段前缀改变。用方括号包含有效地址,如:MOVAX,[1000H]。如果有效地址是以符号地址形式提供,则可不加方括号。MOVAX,BUFA;BUFA为符号地址,这时不加跨段前缀,默认仍为DS数据段。如BUFA变量在附加段中,就必须书写为:MOVAX,ES:BUFA例子例子段基址:2000H有效地址:1000H物理地址:21000HAX已知:(DS)=2000H,(21000H)=12H,(21001H)=34H。试给出指令MOVAX,[1000H]执行后AX的内容。20000H数据段2FFFFH21000H21001H12H34H存储器指令执行后,(AX)=3412H。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中。5.基址寻址和变址寻址有效地址是寄存器内容与有符号8位或16位位移量之和,寄存器可以是BX、BP或SI、DI。有效地址=BX/BP/SI/DI+8/16位位移量如果寄存器为BX或BP,则为基址寻址如果寄存器为SI或DI,则为变址寻址段基址对应BX/SI/DI寄存器默认是DS,对应BP寄存器默认是SS;可用段前缀改变。例子例子段基址:4000H有效地址:5000H物理地址:45000HAX已知:(DS)=4000H,(SI)=2000H,内存单元(45000H)=34H,(45001H)=12H。试给出指令MOVAX,[SI+3000H]执行后AX的内容。40000H数据段4FFFFH45000H45001H34H12H存储器指令执行后,(AX)=1234H。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];操作数在附加段中7.固定寻址固定寻址又叫隐含寻址。指令码中不包含指明操作数地址的部分,而其操码本身隐含地指明了操作数地址。如:十进制调整指令DAA,该指令的功能是对AL寄存器中的内容进行十进制调整,调整后的内容仍存放到AL中。隐含寻址的指令,不需要计算EA,执行速度快,而且大多为单字节指令。思考题8086指令MOVAX,1234H,该指令源操作数的寻址方式为。A.立即寻址B.寄存器寻址C.直接寻址D.寄存器间址答案:A思考题使用直接寻址方式时,操作数总是在中。A.通用寄存器B.堆栈C.主存单元D.段寄存器答案:C思考题寄存器间接寻址方式中,操作数在中。A.通用寄存器B.堆栈C.主存单元D.段寄存器答案:C思考题8086指令MOVAX,[BX],该指令源操作数的寻址方式为。A.立即寻址B.寄存器寻址C.直接寻址D.寄存器间址答案:D思考题8086指令MOVAX,[3000H],该指令源操作数的寻址方式为。A.立即寻址B.寄存器寻址C.直接寻址D.寄存器间址答案:C思考题8086在基址加变址的寻址方式中,基址寄存器可以为,变址寄存器可以为SI或DI。A.AX或CXB.BX或BPC.SI或BXD.DX或DI答案:B思考题8086CPU在基址加变址的寻址方式中,基址寄存器可以为BX或BP,变址寄存器可以为。A.AX或CXB.BX或BPC.SI或BXD.SI或DI答案:D思考题8086/8088可用于寄存器间接寻址的寄存器有个。A.1B.2C.3D.4答案:D思考题采用寄存器间接寻址时,存储单元的有效地址由寄存器指出,这些寄存器为。A.AX,BX,CX,DXB.CS,ES,DS,SSC.BX,BP,SI,DID.SP,BP,SI,DI答案:C思考题如果以BP寄存器对操作数进行间接寻址,则操作数默认在。A.代码段B.数据段C.堆栈段D.扩展段答案:C思考题如果以BX寄存器对操作数进行间接寻址,则操作数默认在。A.代码段B.数据段C.堆栈段D.扩展段答案:B思考题MOVAX,ES:[BX][SI]的源操作数的物理地址是。A.16×(DS)+(BX)+(SI)B.16×(ES)+(BX)+(SI)C.16×(SS)+(BX)+(SI)D.16×(CS)+(BX)+(SI)答案:B思考题(DS)=2000H,(SS)=1500H,(ES)=3200H,(SI)=00A0H,(BX)=0100H,(BP)=0010H,数据段中的变量名VAL(偏移量)值为50H,指出下列各条指令中源操作数的寻址方式是什么?对存储器操作,其物理地址是多少?(1)MOVAX,[100H](2)MOVAX,ES:[BX](3)MOVAX,[BP](4)MOVAX,VAL[SI](5)MOVAX,[BX][SI](6)MOVAX,VAL[BX][SI]3.38086/8088的指令系统符号的约定:OPD:目的操作数(8/16位)OPS:源操作数(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输入/输出指令41.通用数据传送指令MOV传送指令★XCHG交换指令★XLAT换码指令★堆栈操作指令★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。注意思考题注意立即数、CS和IP不能作为目的操作数。两个段寄存器之间不能相互传送数据。两个存储单元之间不能直接传送。不能将立即数直接传送到段寄存器。两个操作数的类型和长度必须一致。思考题指出下列指令的错误所在。MOVBX,ALMOV100,CLMOVSS,2400HMOV[BX],[SI]MOVAX,[SI][DI]MOVMEM[BX],ES:AXMOVAL,[CX]MOVCS,AX思考题假设V1和V2是用DW定义的变量,下列指令中正确的是。A.MOVV1,V2B.MOVV1,20HC.MOV2000H,V2D.MOVAL,V1答案:B思考题下列指令中,格式正确的是。A.MOVDX,[AX+BX]B.MOVAX,[SI+DI]C.MOVCX,[BP+BX]D.MOVAX,[SI+BP]答案:D思考题设(20010H)=3FH,(20011H)=B2H,则执行下列指令后BX=。MOVAX,2000HMOVDS,AXMOVBX,[0010H]A.3FB2HB.B23FHC.3F3FHD.B2B2H答案:B思考题下面格式不正确的指令是。A.MOVAX,38B.MOVSP,38C.MOVDS,38D.MOVAL,38答案:C思考题设M/IO,WR,RD在某时刻分别为1,0,1时,在下列指令中与其对应的是。A.MOVAX,[BX+10]B.INAL,110C.MOVES:[DI],AXD.OUT40H,AL答案:C2)XCHG交换指令格式:XCHGOPD,OPS操作数的类型可以为字节或字。交换只能在通用寄存器之间、通用寄存器与存储器之间进行。XCHGAX,BX;AX和BX的内容互换3)XLAT换码指令格式:XLAT或XLAT表首址功能:使AL中的值变换为内存表格中的对应值。它是一条隐含寻址方式的指令。将数据段内有效地址为(BX)+(AL)的内存字节单元中数据送入AL。该指令常用来查表,即将表头地址赋予BX,再将需求的表内位移地址赋予AL,最后运用XLAT指令即可以将该地址处的表值送到AL。功能图XLAT换码指令的功能图数据段存储器表BXAL+BX+ALAL4)PUSH入栈指令与POP出栈指令堆栈是一个“后进先出LIFO”(或说“先进后出FILO”)的主存区域,位于堆栈段中;SS段寄存器记录其段基址。堆栈的存取操作都发生在栈顶;用堆栈指针寄存器SP指定。入栈指令PUSH★出栈指令POP★思考题入栈指令PUSH格式:PUSHOPS