指令系统 微型计算机系统原理及应用.pptx
3.1 8086的指令格式指令系统与指令格式指令系统与指令格式 计计算算机机可可以以执执行行的的各各种种操操作作命命令令称称为为指指令令。通通常常一一条条指指令令对对应应一一种种基基本本操操作作,例例如如加加、减减、传传送送、移移位位等等。计计算算机机所所能能执执行行的的全全部部命令的集合即为该计算机的命令的集合即为该计算机的指令系统指令系统。计计算算机机指指令令是是完完成成特特定定操操作作的的命命令令,CPUCPU能能直直接接识识别别和和执执行行的的指指令令是是用用二二进进制制代代码码表表示的,这种代码称为示的,这种代码称为机器代码机器代码。第1页/共29页 计计算算机机中中的的指指令令由由操操作作码码字字段段和和操操作作数字段两部分组成。数字段两部分组成。(1)操作码字段)操作码字段 说说明明计计算算机机要要执执行行的的具具体体操操作作,如如传传送送、运运算算、移移位位、跳跳转转等等操操作作,是是指指令令中中必必不不可少的组成部分。可少的组成部分。汇编指令:操作码 操作数第2页/共29页(2)操作数字段)操作数字段 说明在指令执行的过程中需要的操作数,说明在指令执行的过程中需要的操作数,它可以是操作数本身,也可以是操作数地址它可以是操作数本身,也可以是操作数地址或是地址的一部分,还可以是指向操作数的或是地址的一部分,还可以是指向操作数的地址指针或其它有关操作数据的信息。单地地址指针或其它有关操作数据的信息。单地址指令的操作只需一个操作数,如加址指令的操作只需一个操作数,如加1指令:指令:INC AX。大多数运算型指令都需要两个操。大多数运算型指令都需要两个操作数,如加法指令:作数,如加法指令:ADD AX,BX;运算;运算的结果送到的结果送到AX中,中,AX称为目的操作数,称为目的操作数,BX称为源操作数。称为源操作数。第3页/共29页 8086 8086系列指令包括无操作数指令、单操作系列指令包括无操作数指令、单操作数指令和双操作数指令。数指令和双操作数指令。如如 HLT ;无操作数指令;无操作数指令 INC CX ;单操作数指令;单操作数指令 ADD AX,BX ;双操作数指令。第一操;双操作数指令。第一操作数为作数为目的操作数目的操作数,第二操作数为,第二操作数为源操作数。源操作数。第4页/共29页 寻址及寻址方式的概念寻址及寻址方式的概念 计算机中的指令有些不需要操作数,大多计算机中的指令有些不需要操作数,大多数指令采用一个或两个操作数。一般来说,操数指令采用一个或两个操作数。一般来说,操作数可以跟随在指令操作码之后,称为作数可以跟随在指令操作码之后,称为立即数立即数;操作数也可以存放在操作数也可以存放在CPUCPU内部的寄存器中,称内部的寄存器中,称为为寄存器操作数寄存器操作数;绝大多数的操作数存放在内;绝大多数的操作数存放在内存储器中,称为存储器中,称为存储器操作数存储器操作数。3.2 8086指令的操作数寻址方式第5页/共29页 寻址及寻址方式的概念寻址及寻址方式的概念 指令指定操作数的位置,即给出地址指令指定操作数的位置,即给出地址信息,在执行时需要根据这个地址信息找信息,在执行时需要根据这个地址信息找到需要的操作数。这种寻找操作数的过程到需要的操作数。这种寻找操作数的过程称为称为寻址寻址,而寻找操作数的方法称为,而寻找操作数的方法称为寻址寻址方式方式。第6页/共29页 操作数的存放 指令中进行操作的数据存放位置三种情况:指令中进行操作的数据存放位置三种情况:)立即数立即数 操作数包含在指令中,即操作数直接表示在操作数包含在指令中,即操作数直接表示在指令的操作数字段中。指令的操作数字段中。例:例:MOV AL,08HMOV AL,08H 这种操作数称为这种操作数称为立即数立即数。)寄存器操作数)寄存器操作数 操作数存放在操作数存放在的一个寄存器中。的一个寄存器中。例:例:INC CXINC CX第7页/共29页)存储器操作数)存储器操作数 操作数在内存中或在操作数在内存中或在I/OI/O端口中,操作数的端口中,操作数的偏移地址偏移地址以某种方式表示在指令中。以某种方式表示在指令中。如:如:MOV AX,2500H MOV AX,BX 操作数字段指示此操作数的偏移地址,而操作数字段指示此操作数的偏移地址,而段地址由某个段寄存器提供。此例中默认为数段地址由某个段寄存器提供。此例中默认为数据段据段DSDS。第8页/共29页 1 1)立即寻址)立即寻址操作数为立即数,直接存放在指令的操作数字操作数为立即数,直接存放在指令的操作数字段中。段中。只能作为源操作数。只能作为源操作数。寻址方式寻址方式寻址方式寻址方式Institute of Electrical Engineering第9页/共29页例:例:MOV AL,05H指令执行后指令执行后:(AL)=05H例:例:MOV AX,3064H指令执行后指令执行后:(AX)=3064H第10页/共29页操作数在指令所指示的寄存器中。操作数在指令所指示的寄存器中。表示格式:直接在指令中写出寻址寄存器名称。表示格式:直接在指令中写出寻址寄存器名称。对于对于16位操作数,寄存器可以是位操作数,寄存器可以是AX、BX、CX、DX、SI、DI、SP和和BP等;对于等;对于8位操作数,位操作数,寄存器可以是寄存器可以是AH、AL、BH、BL、CH、CL、DH和和DL等。等。如如 MOV AX,BX 若指令执行前,若指令执行前,AX=30AAH,BX=7255H则指令执行后,则指令执行后,AX=7255H,BX=7255H 寄存器寻址寄存器寻址寄存器寻址寄存器寻址Institute of Electrical Engineering第11页/共29页操作数存放在内存中,操作数的偏移地址直操作数存放在内存中,操作数的偏移地址直接表示在指令中。接表示在指令中。默认操作数默认操作数存放在内存的存放在内存的数据段数据段中。中。表示格式:表示格式:偏移地址偏移地址 直接寻址直接寻址直接寻址直接寻址Institute of Electrical Engineering第12页/共29页例:例:MOV AX,3100H若若(DS)=6000H (63100H)=3050H 则则(AX)=3050H.操作码00003131.50H50H30H30H.6 0 0 0 06 0 0 0 03 1 0 03 1 0 0+6 3 1 0 06 3 1 0 063100H63100H30H30H50H50HAHAHALAL代码段数据段第13页/共29页 操作数也允许存放在其它段中操作数也允许存放在其它段中(SS(SS,ES)ES),此,此时应在指令中指明时应在指令中指明段超越段超越。段超越段超越 若操作数不在指令默认的段中,而是在其若操作数不在指令默认的段中,而是在其它某个段中,则需要在指令中加以表示,这种它某个段中,则需要在指令中加以表示,这种情况称为段超越。情况称为段超越。表示表示 如直接寻址方式中操作数在附加段中,则如直接寻址方式中操作数在附加段中,则应表示为应表示为 MOV AX,ES:3100H第14页/共29页必须从代码段取指令在串操作中的目的串必须存储在由ES寄存器指向的数据段推入和弹出操作必须总是引用SS段注意:以下的默认段选择,不能被超越第15页/共29页立即寻址与直接寻址的比较立即寻址与直接寻址的比较在指令的代码中,直接寻址的操作数字段是偏移地在指令的代码中,直接寻址的操作数字段是偏移地址,而立即数寻址的操作数是立即数。址,而立即数寻址的操作数是立即数。由于操作数在正常情况下是存放在数据段中,所以由于操作数在正常情况下是存放在数据段中,所以必须先求出操作数的物理地址,然后再按照此地址必须先求出操作数的物理地址,然后再按照此地址访问存储器才能取得数据或存入数据。这种寻址方访问存储器才能取得数据或存入数据。这种寻址方式寻找存储器的操作示意图如图所示。式寻找存储器的操作示意图如图所示。+段地址段地址EA操作数操作数段寄存器段寄存器指令指令存储器物理地址物理地址=DS*16+EA直接寻址方式示意图直接寻址方式示意图第16页/共29页例例 指令指令 MOV AX,2000H 假定假定DS=3000H于是存储单元的物理地址于是存储单元的物理地址=30000+2000=32000H指指 令令 执执 行行 前前,AX=7850H,(32000H)=50H,(32001H)=30H指令执行后,指令执行后,AX=3050H,(32000H)=50H (32001H)=30H DS=3000H。第17页/共29页例例 指令指令 MOV AX,ES:2000H MOV AX,SS:VAL第一条指令的源操作数的存储单元在附加段中第一条指令的源操作数的存储单元在附加段中如如ES=4000H,物理地址物理地址=40000H+2000H=42000H即将即将42000H地址单元的内容传送给地址单元的内容传送给AL寄存器寄存器 42001H地址单元的内容传送给地址单元的内容传送给AH寄存器寄存器第二条指令的源操作数的存储单元在堆栈段中第二条指令的源操作数的存储单元在堆栈段中VAL是存放源操作数的符号地址,用是存放源操作数的符号地址,用EQU伪指令伪指令来赋值。来赋值。假定假定SS=8000H,VAL=178EH源操作数的物理地址:源操作数的物理地址:80000H+178EH=8178EH 第18页/共29页操作数在存储器中操作数在存储器中,操作数偏移地址在操作数偏移地址在BX、SI、DI的某个寄存器中。的某个寄存器中。以以SI、DI、BX作为间接寻址寄存器作为间接寻址寄存器 默认操作数默认操作数存放在存放在数据段数据段中,用中,用DS寄存器的寄存器的内容作为段地址。内容作为段地址。操作数物理地址为操作数物理地址为 (DS)24+(SI)(DS)24+(DI)(DS)24+(BX)寄存器间接寻址寄存器间接寻址寄存器间接寻址寄存器间接寻址Institute of Electrical Engineering第19页/共29页如如 MOV BX,DI若(若(DS)=6000H (DI)=2000H (62000H)=50A0H则则(BX)=50A0H 表示格式:表示格式:寻址寄存器寻址寄存器 第20页/共29页有效地址是寄存器内容与有符号有效地址是寄存器内容与有符号8位或位或16位位位位移量之和,寄存器可以是移量之和,寄存器可以是BX、BP或者或者SI、DI。段地址对应段地址对应BX、SI、DI寄存器默认是寄存器默认是DS。BP则则默认操作数默认操作数存放在存放在堆栈段堆栈段中,用中,用SS寄存寄存器的内容作为段地址。操作数物理地址为器的内容作为段地址。操作数物理地址为 (SS)24+(BP)寄存器相对寻址寄存器相对寻址寄存器相对寻址寄存器相对寻址Institute of Electrical Engineering第21页/共29页如如 MOV BX,DI+06H若(若(DS)=6000H (DI)=2000H 8位位移量=06H (62006H)=51A1H则则(BX)=51A1H 表示格式:表示格式:寻址寄存器寻址寄存器+8+8位位/16/16位位移量位位移量 第22页/共29页寄存器间接寻址和寄存器相对寻址方式也允寄存器间接寻址和寄存器相对寻址方式也允许段超越。许段超越。如如 MOV AX,SS:SI MOV AX,DS:BP+06H MOV AX,SS:SI+06H 第23页/共29页 例 指令MOV AX,SS:BX与MOV AX,BX 比较,两指令的操作数存放的段区是不同的。MOV AX,SS:BX 指令中的源操作数是存放在堆栈段中,操作数的物理地址=16*SS+BX。而MOV AX,BX 源操作数是存放在数据段中此时源操作数的物理地址=16*DS+BX。假定:SS=5A00H,BX=2800H物理地址:5C800H(低字节),5C801H(高字节)第24页/共29页操作数的偏移地址是以寄存器操作数的偏移地址是以寄存器BX/BP的内容与变址的内容与变址寄存器寄存器SI/DI的内容之和的内容之和。表示格式表示格式:基址寄存器基址寄存器+变址寄存器变址寄存器 如如 MOV AX,BX+SI MOV AX,BP+DI若以若以SI、DI、BX寻址,则默认在寻址,则默认在数据段数据段中;若以中;若以BP寻址,则默认在寻址,则默认在堆栈段堆栈段中。中。基址变址寻址基址变址寻址基址变址寻址基址变址寻址Institute of Electrical Engineering第25页/共29页操作数的有效地址是一个基址寄存器操作数的有效地址是一个基址寄存器BX或或BP和和一个变址寄存器一个变址寄存器SI或或DI的内容之和加上给定的内容之和加上给定的的8位或位或16位位偏移量偏移量。默认段同上默认段同上表示格式:表示格式:基址基址+变址变址+位移量位移量 如如 MOV CX,BX+SI+10H相对基址变址寻址相对基址变址寻址相对基址变址寻址相对基址变址寻址Institute of Electrical Engineering第26页/共29页第27页/共29页第28页/共29页感谢您的观看!第29页/共29页