资源描述
1第三章第三章第三章第三章 8088/8086 8088/8086 指令系统指令系统指令系统指令系统1.8086/8087CPU的指令系统基本指令92条,8种寻址方式。8087协处理器,25条基本运算指令,可以进行18位十进制运算、浮点运算、三角函数运算、指数运算等等运算。2.80286/287指令系统CPU 具有实地址和保护虚地址两种方式。在实地址方式下与8086兼容,8086的程序可以不经汇编而直接在80286中运行;在虚地址方式下增加了25条指令。23.1 3.1 概述概述概述概述8088和8086的指令系统是完全相同的;8086的指令系统共包含92种基本指令,按照功能分为 6大类:1、数据传送Data Transfer2、算术运算Arithmetic3、逻辑运算和移位logic4、串操作string manipulation5、控制转移类control transfer6、处理器控制processor control 3指令类型指令类型助记符助记符数数据据传传送送一般数据传送一般数据传送MOV,PUSH,XCHG,XLAT,CBW,CWD输入输出指令输入输出指令IN,OUT地址传送指令地址传送指令LEA,LDS,LES标志传送指令标志传送指令LAHF,SAHF,PUSHF,POPF算算术术运运算算加法指令加法指令ADD,ADC,INC减法指令减法指令SUB,SBB,DEC,NEG,CMP乘法指令乘法指令MUL,IMUL除法指令除法指令DIV,IDIV十进制调整指令十进制调整指令DAA,AAA,DAS,AAS,AAM,AAD4逻辑运算和移位指令逻辑运算和移位指令AND,OR,NOT,XOR,TEST,SHL,SAL,SHR,SAR,ROL,ROR,RCL,RCR串操作串操作MOVS,CMPS,SCAS,LODS,STOS控制转移指令控制转移指令JMP,CALL,RET,LOOPE,INT,INTO,IRET 各类条件转移指令各类条件转移指令处理器控制指令处理器控制指令见表见表 3-853.1.1 3.1.1 指令的基本构成指令的基本构成指令的基本构成指令的基本构成一条8088指令包含有操作码和操作数两部分,指令的长度在16个字节之间。操作码操作数操作数12字节16字节立即操作数、立即操作数、寄存器操作数、寄存器操作数、存储器操作数存储器操作数8086808680868086指令格式()指令格式()指令格式()指令格式()8086/80888086/8088指令是由指令是由1 16 6个字节组成。个字节组成。第一字节通常为指令的操作码。它表示该条指令要进行什么样的操作。第一字节通常为指令的操作码。它表示该条指令要进行什么样的操作。DATAHDATALDISPHDISPLR/MREGMODwDOPcode操作码字节字节1字节2字节3、4字节5、67210765432107070707寻址方式字节位移量立即数OP codeOP code为操作码,表示该指令要完成的操作。为操作码,表示该指令要完成的操作。D=0D=0:第一个操作数第一个操作数是目的操作数,是目的操作数,1 1:第二个操作数第二个操作数是目的操作数是目的操作数w=0w=0:8 8位操作数,位操作数,1 1:1616位操作数位操作数MODMOD指明寻址方式:指明寻址方式:MODMOD11 11 寄存器寻址寄存器寻址 MOD11MOD11存储器寻址存储器寻址0000没有偏移量没有偏移量 0101 8 8位偏移量位偏移量 10101616位偏移量位偏移量REGREG用编码方式指明操作中所使用的寄存器。用编码方式指明操作中所使用的寄存器。R/MR/M用编码方式指出存储器有效地址计算方法。用编码方式指出存储器有效地址计算方法。DISPDISP表示地址偏移量。表示地址偏移量。DATADATA则指明立即数。则指明立即数。8086808680868086指令格式(指令格式(指令格式(指令格式(2 2 2 2)R/M(R/M(寄存器寄存器/存储器)编码及有效地址计算方法存储器)编码及有效地址计算方法例:例:ADD DISPBXDI,DX DISP=2145HADD DISPBXDI,DX DISP=2145H000000 0 1 10 010 001 01000101 00100001000000 0 1 10 010 001 01000101 00100001操作码操作码 D W MOD REG R/M D W MOD REG R/M 位移量低位移量低 位移量高位移量高D=0 D=0 源操作数是寄存器操作数源操作数是寄存器操作数 W=1 W=1 操作数是操作数是1616位位操作码是操作码是:01914521H:01914521H MOD=11MOD11(存储器操作数)REGW=0W=1R/MMOD=00MOD=01MOD=10000ALAX000BX+SIBX+SI+D8BX+SI+D16001CLCX001BX+DIBX+DI+D8BX+DI+D16010DLDX010BP+SIBP+SI+D8BP+SI+D16011BLBX011BP+DIBP+DI+D8BP+DI+D16100AHSP100SISI+D8SI+D16101CHBP101DIDI+D8DI+D16110DHSI110直接地址BP+D8BP+D16111BHDI111BXBX+D8BX+D168立即操作数、寄存器操作数、存储器操作数立即操作数、寄存器操作数、存储器操作数立即操作数、寄存器操作数、存储器操作数立即操作数、寄存器操作数、存储器操作数立即操作数即常数;可以是字节(8位)、字(16位);立即操作数只能用作源操作数,不能用作目的操作数;8位数16位数无符号数00H0FFH(0255)0000H0FFFFH(065535)带符号数80H7FH(-128+127)8000H7FFFH(-32768+32767)92 2、寄存器操作数、寄存器操作数、寄存器操作数、寄存器操作数寄存器操作数存放在CPU的8个通用寄存器或4个段寄存器中,既可以用作源操作数也可以用作目的操作数;但CS一般不作为目的操作数;个别指令将FLAGS作为操作数;AHALBLCLDLDHCHBHDXCXBXAXSPBPDISI目的变址寄存器源变址寄存器基址指针寄存器堆栈指针寄存器通用寄存器通用寄存器中AX、BX、CX、DX、SI、DI、BP、SP存放字操作数;AH、AL、BH、BL、CH、CL、DH、DL存放字节操作数;103 3、存储器操作数、存储器操作数、存储器操作数、存储器操作数存储器操作数可以是字节、字、双字,分别存在1个、2个、4个存储单元中;它既可以用作源操作数也可以用作目的操作数;注意:对大多数指令,不允许源操作数和目的操作数同时为存储器操作数,即不允许存储器到存储器的操作。存储器单元的地址由两部分组成:段基址和偏移地址(也叫有效地址),所以各种存储器操作,都涉及到段寄存器;1180888088对寄存器使用的约定对寄存器使用的约定对寄存器使用的约定对寄存器使用的约定内存访问类型默认段寄存器可指定段寄存器段内偏移地址来源堆栈操作SS无SP源串DSCS.ES.SS SI目的串ES无DIBP用作基址寻址SSCS.ES.DS按寻址方式计算得到的有效地址一般数据存取DSCS.ES.SS按寻址方式计算得到的有效地址123.1.2 3.1.2 指令的执行时间指令的执行时间指令的执行时间指令的执行时间一条指令的执行时间应包括取指令、取操作数、执行指令及传送结果4部分时间,通常用时钟周期数来表示;不同的指令在执行时间上有很大差别;指令所需时钟周期数访问内存次数MOV寄存器到寄存器20MOV立即数到内存10(14)+EA1ADD寄存器到内存16(24)+EA213寄存器操作数的指令执行速度最快;立即操作数作为指令的一部分存放在指令队列中,因此执行指令时不需要访问内存;存储器操作数放在内存单元中,首先由BIU计算出20位物理地址,然后再执行存储器的读写操作,指令的执行速度最慢。例如:CPU的时钟频率为5MHz,即一个时钟周期为0.2微秒,则寄存器到寄存器之间的传送指令的执行时间为:t=2X0.2=0.4微秒再如:立即操作数传送到寄存器的指令执行时间为:t=4X0.2=0.8微秒143.2 CPU3.2 CPU的寻址方式的寻址方式的寻址方式的寻址方式获得操作数所在地址的方法,叫寻址方式,共有8种寻址方式;一般是针对源操作数而言;寻址方式分为两大类:q寻找操作数的地址q寻找要执行的下一条指令的地址主要在程序转移(JMP)或过程调用(CALL)时用来寻找目的地址或程序入口地址153.2.1 3.2.1 立即寻址立即寻址立即寻址立即寻址1、立即寻址(Immediate Addressing)源操作数是一个立即数,8位或16位的整数;操作数直接放在操作码的后面;若为16位则低8位在低地址单元,高8位在高地址单元存放。指令在内存中的存放形式:例如:MOV AX,3102H操作码低8位高8位代码段MOV02H31HAHAL162 2、直接寻址(、直接寻址(、直接寻址(、直接寻址(Direct AddressingDirect Addressing)在指令的操作码后面直接给出操作数的16位偏移地址,与操作码一起存放在内存的代码段;低8位在前,高8位在后;默认段为DS数据段,允许段超越。16位偏移地址必须用 括起来。MOV AL,4000H ;将DS:4000H之内容送入AL(字 节操作)MOV 2000H,BX;将BL之内容送入DS:2000H 将BH之内容送入DS:2001H 注意:MOV AX,2510H与MOV AX,2510H的区别!17MOV操作码02H31H011101011001101123102H23103H代码段数据段AHAL例如:MOV AX,3102HMOV AX,3102H(字操作)设DS=2000H,则物理地址为:2000H*10H+3102H=23102H功能:将DS:3102H之内容送入AL将DS:3103H之内容送入AH18段超越段超越段超越段超越如果操作数不是存放在数据段DS中,则在指令中要用段超越符号加以说明;如下例:MOV BX,ES:1200H将ES段中偏移地址为1200H和1201H两单元的内容送到BX寄存器中;有时也用一个符号来代替数值以表示操作数的偏移地址,通常把这个符号称为符号地址符号地址;如:MOV BX,ES:BUFFERBUFFER必须在程序开始时予以定义。193 3、寄存器寻址(、寄存器寻址(、寄存器寻址(、寄存器寻址(Register AddressingRegister Addressing)操作数存放在CPU的寄存器中。寄存器可以是AX、BX、CX、DX、SI、DI、BP;也可以是AL、AH、BL、BH、CL、CH、DL、DH;也可以是段寄存器;如:MOV AL,BL MOV AX,DXMOV DS,AX MOV SI,BP204 4、寄存器间接寻址、寄存器间接寻址、寄存器间接寻址、寄存器间接寻址(Register Indirect Addressing)(Register Indirect Addressing)与寄存器的寻址方式不同,指令中指定的寄存器的内容不是操作数而是操作数的偏移地址;能做这种用途的寄存器叫做地址指针地址指针寄存器。它们是。它们是SI、DI、BX、BP,也简称为间址寄存器;间址寄存器;选择SI、DI、BX作间址寄存器时,操作数在数据段,段基址由DS决定;如果用BP,则操作数在堆栈段,段基址由SS决定;但是,无论选择哪一个间址寄存器,都允许段超越;SI、DI、BX、BP在作为间址寄存器使用时表示为;如:MOV AX,SIMOV AX,ES:SI2144H33H数据段AX61200HMOV CX,DI-EA=(DI)DS:DIMOV DX,BP-EA=(BP)SS:BPMOV BX,BP-EA=(BP)SS:BP注意:MOV AX,SI和MOV AX,SI的区别!已知:
展开阅读全文
温馨提示:
金锄头文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
相关搜索