第3章微型计算机指令系统3.180X86/Pentium的寻址方式立即寻址、寄存器寻址、直接寻址、寄存器间接寻址、变址寻址、基址寻址、基址-变址寻址3.28086/8088指令系统数据传送指令、算术运算指令、逻辑运算和移位指令、串操作指令、控制转移指令、处理器控制指令*3.380X86/Pentium指令系统第3章微型计算机指令系统3.180X86/Pentium的寻址方式立即寻址寄存器寻址直接寻址寄存器间接寻址基址寻址变址寻址基址加变址寻址*比例变址寻址*基址加比例变址寻址*带偏移量的基址加比例变址寻址第3章微型计算机指令系统寻址方式寻址方式:指CPU指令中规定的寻找操作数所在的地址的方式。操作数:MOVAL,05H操作码目的操作数,源操作数立即数:操作数包含在指令中寄存器寻址:操作数包含在CPU的某个内部寄存器中存储器寻址:操作数包含在内存的数据区操作数引用时的字节顺序:1.若存放的信息是字节,则按顺序存放2.若存放的信息是字,则将字的低位字节存放在低地址,高位字节存放在高地址第3章微型计算机指令系统寻址方式之一:立即寻址操作数作为立即数直接存在指令中,可为字节或字。MOVAX,3100H低地址高地址CS段操作码00H31H34H12HAX00H31H第3章微型计算机指令系统寻址方式之二:寄存器寻址操作数包含在指令规定的8位、16位寄存器中。寄存器寻址由于无需从存储器中取操作数,故执行速度快。MOVSS,AX34H12HSS34H12HAX第3章微型计算机指令系统寻址方式之三:直接寻址在指令的操作码后面直接给出操作数的16位偏移地址。这个偏移地址也称为有效地址EA。操作数默认在DS段中。MOVAX,[3000H]低地址高地址CS段操作码00H30H34H12H34H12HAXDS段5000053000DS50000300053000+第3章微型计算机指令系统寻址方式之三:直接寻址如果操作数在DS以外的其他段(CS,SS,ES)中,指令中必须指明段寄存器(段超越)MOVAX,ES:[3000H]低地址高地址CS段操作码00H30H34H12H34H12HAXES段2000023000ES20000300023000+第3章微型计算机指令系统寻址方式之四:寄存器间接寻址低地址高地址CS段操作码34H12H34H12HAXSS段7000073000SS70000300073000+MOVAX,[BP]BP操作数地址的偏移量(有效地址EA)存放在寄存器中。以SI,DI,BX间接寻址,默认操作数在DS段中;以BP间接寻址,默认操作数在SS段中。可以加段超越前缀的方法进行其他段进行寻址第3章微型计算机指令系统寻址方式之五:基址寻址EA=[基址寄存器]+偏移量基址寄存器:BX(默认DS)和BP(默认SS)。低地址高地址CS段操作码00H15H34H12H34H12HAXDS段7000073500BX150073500+MOVDX,[BX+1500H]或MOVDX,1500H[BX]DS700002000第3章微型计算机指令系统寻址方式之六:变址寻址EA=[变址寄存器]+偏移量变址寄存器:源变址寄存器SI、目的变址寄存器DI(默认DS)。MOVAL,TABLE[SI]MOVAL,[SI]+TABLEMOVAL,[SI+TABLE]第3章微型计算机指令系统寻址方式之七:基址-变址寻址基址加变址:EA=[基址寄存器]+[变址寄存器]带偏移量的基址加变址:EA=[基址寄存器]+[变址寄存器]+偏移量低地址高地址CS段操作码50H02H34H12H34H12HDXDS段3000033250BX025033250+MOVDX,[BX+SI+0250H]DS300002000SI1000第3章微型计算机指令系统*寻址方式之八:32位机的寻址方式比例变址寻址EA=[变址寄存器]*比例因子+偏移量MOVEAX,TABLE[ESI*4]基址加比例变址寻址EA=[基地址寄存器]+[变址寄存器]*比例因子+偏移量MOVECX,[EDX*4][EAX]带偏移量的基址加比例变址寻址EA=[基地址寄存器]+[变址寄存器]*比例因子+偏移量MOVAX,[EDI*8+ECX+40]8个32位通用寄存器均可作寄存器间接寻址、基址寄存器和变址寄存器(除ESP外),EBP、ESP缺省为SS段,其他缺省为DS段第3章微型计算机指令系统寻址方式总结寻址方式:1.立即寻址MOVAX,1234H2.寄存器寻址MOVAX,BX3.直接寻址MOVAX,[1234H]4.寄存器间接寻址MOVAX,[BX]5.基址寻址MOVAX,[BX+100H]6.变址寻址MOVAX,[SI+100H]7.基址加变址寻址MOVAX,[BX+SI+100H]8.比例变址寻址MOVEAX,TABLE[ESI*4]9.基址加比例变址寻址MOVECX,[EDX*4][EAX]10.带偏移量的基址加比例变址寻址MOVAX,[EDI*8+ECX+40]第3章微型计算机指令系统操作数的分类立即数操作数:绿注1:立即数只能作为源操作数,不能作为目标操作数。注2:不能用一条指令简单地将立即数传送到段寄存器。寄存器操作数:红注3:有些指令没有指定使用的寄存器,但实际上隐含这特定的寄存器操作数。存储器操作数:黄注4:不允许源操作数和目标操作数同时为存储器操作数。注5:存储器操作数的物理地址的计算是将段基地址左移四位加上有效地址EA(偏移地址)得到的。但是段寄存器和有效地址的配对是有规定的,如表3-2(P99)注6:执行速度:寄存器操作数立即数操作数存储器操作数第3章微型计算机指令系统指令的机器码和执行时间机器码:任何一条指令都是以特定的若干个(1~6)字节的代码形式存在存储器的码段中。同样的指令(如MOV)由于寻址方式和操作数的不同,机器码的长度也不同。执行时间:指令的指令时间包括取址、译码和执行的时间,跟该指令的机器码的长短没有直接关系。指令机器码字节数时钟数MOVAL,15HB0H15H24MOVAX,BX8BHC3H22第3章微型计算机指令系统3.28086/8088指令系统数据传送指令算术运算指令逻辑运算和移位指令串操作指令控制转移指令处理器控制指令第3章微型计算机指令系统数据传送指令之一:通用传送指令(1)MOV指令•MOVdest,src;(dest)(src)1)源操作数可以是8/16/32位的立即数、寄存器操作数、内存操作数。目标操作数不允许为立即数,其余同源操作数。2)源、目操作数类型必须匹配MOVBYTEPTR[BX],12H3)不能向段寄存器写立即数MOVAX,2000MOVDX,AX4)以CS为目标的一切传送指令都是非法的5)段寄存器之间不能直接传送数据第3章微型计算机指令系统数据传送指令之一:通用传送指令例:合法指令MOVAL,30H;立即数传送到寄存器MOVAL,BL;寄存器之间传送字节数据MOVSI,[BX+62H];寄存器和存储器之间传送数据例:不合法的指令MOV6234H,AX;立即数不能用于目的操作数MOVCS,AX;CS不能用于目的操作数MOVIP,AX;IP不能用于目的操作数MOVDS,4234H;立即数不能直接传送给段寄存器MOVAL,BX;源操作数与目的操作数的位数必须一致MOVBUF1,BUF2;不能在两个存储器单元之间传送数据MOVDS,ES;不能在两个段寄存器之间传送数据第3章微型计算机指令系统数据传送指令之一:通用传送指令(2)堆栈操作指令•PUSHsrc;(SP)(SP)-2((SP)+1:(SP))(src)进栈指令,先调整堆栈指针,再把源操作数压栈PUSHAX•POPdest;(dest)((SP)+1:(SP))(SP)(SP)-2出栈指令,先将栈顶2/4字节送目标操作数,再调整堆栈指针POPAX注:堆栈指令指对字或双字进行操作,不对字节进行操作,一般成对使用。操作数为16位寄存器、段寄存器或存储单元第3章微型计算机指令系统数据传送指令之一:通用传送指令PUSHAX低地址高地址12H34H34H12HAX堆栈段SSSP指向栈顶SP-1SP-1第3章微型计算机指令系统数据传送指令之一:通用传送指令POPAX低地址高地址12H34H34H12HAX堆栈段SSSP指向栈顶SP+1SP+1第3章微型计算机指令系统数据传送指令之一:通用传送指令(3)交换指令•XCHGdest,src;(dest)(src)•交换指令,源、目不能同为内存操作数,只能在寄存器之间、寄存器和存储器之间交换,段寄存器不能作为一个操作数进行交换。合法交换指令XCHGAL,CL;字节交换XCHGBX,SI;字交换XCHGAX,[BX+SI];寄存器和存储器之间交换数据非法的交换指令XCHGAX,6234H;寄存器与立即数之间不能交换XCHGBUF1,BUF2;存储器单元与存储器单元之间不能交换XCHGADDR,4234H;存储器单元与立即数之间不能交换XCHGCS,DAT[BX];不能与CS(或IP)寄存器进行交换第3章微型计算机指令系统数据传送指令之一:通用传送指令(4)XLAT查表指令•XLATsrc_table;(AL)((BX)+(AL))查表指令,用来取表中某指定数的值执行指令前:序号AL表首址BX执行指令后:AL表中序号对应的字节内容TABLEDB48,49,50,51,52,53,54,55,56,57MOVBX,OFFSETTABLEMOVAL,5XLAT(或XLATTABLE)执行后AL=53第3章微型计算机指令系统数据传送指令之二:地址传送指令•LEAreg16,mem16有效地址传送指令,源操作数为内存操作数内存单元的有效地址目标寄存器LEASI,AREA1=MOVSI,OFFSETAREA1•LDS/LESreg16,mem32地址指针传送指令,[EA]reg16,[EA+2]DS/ES例:TABLEDD12345678HLDSBX,TBALE5678BX,1234HDS第3章微型计算机指令系统数据传送指令之三:标志传送指令•LAHF标志寄存器低字节AH,不影响标志位•SAHFAH标志寄存器低字节,影响标志寄存器低8位•PUSHF:16位标志寄存器内容入栈•POPF:16位标志寄存器出栈SZAPCODITAHFLAGLAHFSAHF第3章微型计算机指令系统数据传送指令之四:输入输出指令完成累加器AL/AX和I/O端口之间的数据传送•INacc,port;(acc)(port)当端口地址小于256时,直接寻址,最多可访问256个端口例:INAL,60H(将60H口地址的字节送给AL)INAX,60H(将60H口地址的字送给AX)端口地址大于或等于256时,间接寻址,端口地址必须放在DX寄存器中,最多可访问65536个端口例:MOVDX,3DAHINAL,DX(将3DAH口地址的字节送给AL)•OUTport,acc;(port)(acc)例:MOVDX,3DAHOUTDX,AX第3章微型计算机指令系统算术运算指令之一:加法运算指令•ADDdest,src;(dest)(dest)+(src)加法指令例不带进位加法指令ADDCL,20H;(CL)←(CL)+20HADDAX,SI;(AX)←(AX)+(SI)ADDDATA[BX],AL;((BX)+DATA)←((BX)+DATA)+(AL)ADDDX,[BX+SI];(DX)←(DX)+((BX)+(SI))•ADCdest,src;(dest)(dest)+(src)+(CF)带进位位加法例带进位加法指令ADCAX,SI;(AX)←(AX)+(SI)+CFADCBX,3000H;(BX)←(BX)+3000H+CFADCAX,DAT[SI];(AX)←(AX)+(SI+DAT)+CF以上两条指令影响A,C,O,P,S,Z6个标志位。注意带进位位加法中的进位位的值是上一条