您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 第三章 8086的寻址方式和指令系统[3-1]
There’salwaysmoretolearn,andtherearealwaysbetterwaystodowhatyou’vedonebefore.—DONANLDE.KNUTH微型计算机原理与接口技术第三讲佘青山86919130qsshe@hdu.edu.cn2第三章8086的寻址方式和指令系统8086的寻址方式微机系统指令的机器码表示方法(自学)8086的指令系统内容提要3§3-18086的寻址方式一、概述1、有关定义指令(Instruction)——指示CPU执行某种规定操作的命令指令集或指令系统(InstructionSet)——某一CPU所能执行的全部指令的集合定义了程序员能使硬件完成的基本操作。机器指令(机器码)——指令的二进制代码形式。例如:CD21H汇编指令——利用指令的助记符(MnemonicSymbol)、符号地址、标号来编写的语言。例如:MOVAX,21H4§3-18086的寻址方式一、概述举例:MOVAL,7;立即数取入累加器ADDAL,10;加立即数HLT;停机汇编指令(助记符形式)机器码(二进制形式)说明MOVAL,710110000(MOVAL,n)一条两字节指令,把指令第二个字节的立即数送到累加器AL00000111(n=7)ADDAL,1000000100(ADDAL,n)一条两字节指令,累加器AL中的内容与指令第二字节的立即数相加,结果放在AL中00001010(n=10)HLT11110100(HLT)停止操作指令与机器码5§3-18086的寻址方式一、概述2、指令通常应提供的信息通知微处理器做什么操作操作数从哪里来操作结果放在哪里对于调用和转移指令,还要涉及转移或调用地址的提供方式3、指令的组成操作码(Opcode)——通知微处理器执行什么操作操作数(Operand)——指出指令在执行过程中所需要的操作数(其值为多少或者放在什么地方),以及操作结果送到哪里。操作数可以存放在寄存器、存储器、I/O端口地址中,也可以是在指令中(立即数)。6§3-18086的寻址方式一、概述4、指令的一般格式操作数可以有零个,一个或两个。示例:(1)单操作数指令:INCAX;只需要指出加1的操作数,它是单操作数指令。(2)双操作数指令:如ADDAX,BX大多数运算型指令都是双操作数指令。(3)无操作数指令:如NOP(空操作指令)操作码操作数……操作数7§3-18086的寻址方式MOVAX,BX双操作数指令形式:操作码目的操作数,源操作数数据流动方向:从右移向左注意:目的与源操作数总是用逗号分隔目的操作数源操作数操作码5、现代微型计算机中多采用双操作数指令,两个操作数分别称为“目的操作数”和“源操作数”。指令执行后,把运算结果放到目的操作数的地址之中。8§3-18086的寻址方式一、概述三类操作数(分别对应三种可能的存放位置):立即数,寄存器操作数,存储器操作数(1)立即数:操作数以常量的形式出现指令中,称为立即数。立即数只能作为指令的源操作数,如:MOVAX,0FA00H;正确MOV8000H,DX;错误8位16位无符号数00H~FFH(0~255)0000H~FFFFH(0~65535)带符号数80H~7FH(-128~+127)8000H~7FFFH(-32768~+32767)9§3-18086的寻址方式一、概述(2)寄存器操作数:指令要使用的数据存放在CPU内部寄存器中,在指令中给出寄存器的名称。说明:放在8个通用寄存器(AX,BX,CX,DX,SI,DI,SP,BP)或4个段寄存器(CS,DS,SS,ES)中的操作数既可以作为源操作数,也可以用作目的操作数通用寄存器可存放字节操作数(如AL),也可存放字操作数(如AX)SI,DI,BP及SP只能存放字操作数段寄存器只能存放当前操作数的段基地址不允许将立即数传送到段寄存器:×MOVDS,200H10§3-18086的寻址方式一、概述(3)存储器操作数:指令要使用的数据存放在内存单元中,在指令中给出内存地址或访问存储器的方法。一般不允许两个操作数同时为存储器操作数如何寻找存储器操作数?段基地址+偏移地址指令中的某个操作数可能是上述三种中的任意一种形式,为了明确具体操作数的存在位置,必须首先明确操作数的寻址方式。存储器操作数字节字双字124类型存储单元个数11§3-18086的寻址方式一、概述6、寻址方式定义:指令中用于说明操作数所在地址的方法。一个指令系统能够提供哪些寻址方式,能否为编制程序提供方便,这是指令系统设计的关键。说明:在不同的计算机系统中,寻址方式的名称和分类并不统一。各种寻址方式指令执行速度不同:操作数在寄存器中指令执行速度快:在CPU内部立即执行立即数寻址指令执行速度较快:直接从指令队列中取数操作数在存储器中指令执行速度较慢:通过总线与CPU交换数据12§3-18086的寻址方式一、概述各种寻址方式指令执行速度不同:CPU进行读/写存储器的操作:把一个偏移量送到BIU,计算出20位物理地址;执行总线周期存取操作数。注意:尽量使用寄存器作为操作数若有可能,用移位代替乘除法尽量使用简单的寻址方式13§3-18086的寻址方式在8086指令系统中,寻址方式可分为8种:一、立即寻址二、寄存器寻址三、直接寻址四、寄存器间接寻址五、寄存器相对寻址六、基址变址寻址七、相对基址变址寻址八、其它寻址方式即隐含寻址、I/O端口寻址、控制转移类指令寻址等14§3-18086的寻址方式一、立即寻址(DirectAddressing)定义:指令中直接给出操作数,操作数紧跟在操作码之后,作为指令的一部分存放在代码段里,在取出指令的同时也就取出了操作数,立即有操作数可用,所以称之为立即寻址。特点:立即数可以为8位,也可以为16位。如果是16位数,则“高字节存放在代码段的高地址单元中,低字节存放在代码段的低地址单元中”。作用:常用于给寄存器赋初值,将立即数字节或字传送到寄存器或存储单元。15§3-18086的寻址方式一、立即寻址(DirectAddressing)例:MOVAX,3102H;AX3102H执行后,AH=31H,AL=02H立即数操作码低8位高8位代码段立即寻址指令在存储器中的存放形式存储器操作码02H31HAHAL代码段AX16§3-18086的寻址方式一、立即寻址(DirectAddressing)注意:(1)在所有指令中,立即数只能用于源操作数,而不能作目的操作数。(2)以A~F打头的数字出现在指令中时,前面一定要加一个数字0,以免与其它符号混淆。例:MOVAX,2A00HMOVAL,‘A’MOV[BX+2100H],0FA50H×MOV2A00H,AX;错误!17§3-18086的寻址方式二、寄存器寻址(RegisterAddressing)定义:操作数在寄存器中,指令中指明寄存器的名称,这种寻址方式叫寄存器寻址。特点:(1)对于8位操作数,寄存器可以是AH,AL,BH,BL,CH,CL,DH,DL。对于16位操作数,寄存器可以是AX,BX,CX,DX,SI,DI,SP和BP。(2)操作数就在寄存器中,不需要访问存储器来取得操作数(指令执行时,操作就在CPU的内部进行),因而执行速度快。(3)在编程中,如有可能,尽量使用这种寻址方式的指令。作用:寄存器之间传递数据,寄存器与存储单元之间传送数据数据。18§3-18086的寻址方式二、寄存器寻址(RegisterAddressing)例:MOVDX,AX;DXAX指令执行前:AX=2233H指令执行后:AX=2233H,DX=2233HAXDX2233H2233HAX内容不变19§3-18086的寻址方式二、寄存器寻址(RegisterAddressing)注意:(1)源操作数与目的操作数的长度要相同。(2)寄存器寻址与段地址无关。例:MOVAX,BXMOV[3F00H],AXMOVCL,AL×MOVAX,BL;源、目操作数长度不一致!×MOVES:AX,DX;寄存器寻址与段地址无关!20§3-18086的寻址方式注意:除以上两种寻址方式(立即寻址:操作数包含在指令中,而寄存器寻址:操作数包含在寄存器中)外,下面将要介绍的几种寻址方式的操作数均在存储器中,通过采用不同的寻址方式取得操作数的物理地址,从而取得操作数。21§3-18086的寻址方式三、直接寻址(DirectAddressing)定义:当指令中的源操作数或目的操作数,采用直接给出操作数的偏移地址时,这种寻址方式称直接寻址。特点:(1)在讨论寻址方式时,通常把操作数的偏移地址称为有效地址EA(EffectiveAddress),EA可通过不同的寻址方式来得到。(2)在直接寻址方式中,指令中直接给出操作数的有效地址。操作数的有效地址(不是操作数本身)存放在代码段中指令的操作码之后,而操作数总是存放在存储器中。(3)操作数一般存放在数据段中,也允许存放在数据段以外的其它段(如CS、ES、SS),此时应在指令中给出“跨越段前缀”。(4)偏移地址也可用符号地址(即给存储单元起个名字)来表示。作用:在存储单元和寄存器之间直接传送字节或字,实现对存储器单元的读/写操作。22§3-18086的寻址方式三、直接寻址(DirectAddressing)例:MOVAX,[2A00H]MOVDX,ES:[2A00H]MOVES:[2000H],ALMOVSI,TABLE_PTR存储器存取时约定段符号地址23§3-18086的寻址方式三、直接寻址(DirectAddressing)例:MOVAX,[3102H]如果DS=2000H,(23102H)=1234H则操作数的物理地址为:DS×10H+EA=2000H×10H+3102H=20000H+3102H=23102H指令执行后:AX=1234H注意:如用AL代替AX,则AL=34H操作码02H31HAHAL23102H34H12H存储器代码段数据段..24§3-18086的寻址方式用符号地址代替数值地址(即给存储单元起个名字)比如:MOVAX,AREA1AREA1代表符号地址,还是表示一个立即数?例1:伪指令EQU(定义符号)AREA1EQU1234H;AREA1代表立即数……MOVAX,AREA1则AX=1234H25§3-18086的寻址方式用符号地址代替数值地址(即给存储单元起个名字)例2:伪指令DW(定义变量)AREA1DW1234H;AREA1代表符号地址……MOVAX,AREA1;(或MOVAX,[AREA1])如右图所示,假设(0711DH)=34H,(0711EH)=12H,则执行指令后AX=1234H操作码XXXXAHAL0711DH34H12H存储器代码段数据段..26§3-18086的寻址方式三、直接寻址(DirectAddressing)注意:(1)指令中有效地址的表示:[立即数],以便与立即数相区别。(2)如果没有用“段跨越前缀”标明操作数在哪一段,就默认段寄存器为数据段寄存器(DS)。(3)如数据在数据段以外的其它段(即CS、SS、ES)中,则应指明“段跨越前缀”。如MOVAX,ES:[100H],冒号“:”称为修改属性运算符。(4)为了使指令字不要过长,规定双操作数指令不能两个操作数都用直接寻址方式。例:MOVAX,[2000H]MOVAX,ES:[3000H]×MOV[2000H],[3000H];两个操作数均用直接寻址方式!不允许存储单元←存储单元27§3-18086的寻址方式四、寄存器间接寻址(RegisterIndirectAddressing)定义:操作数的有效地址通过寄存器间接给出。特点:(1)采用寄存器间接寻址方式时,被指定的寄存器中存放着操作数的有效地址,而操作数在存储器中(以寄存器的内容为操作数的有效地址)。(2)只有基址寄存器BX、BP和变址寄存器SI、DI可作
本文标题:第三章 8086的寻址方式和指令系统[3-1]
链接地址:https://www.777doc.com/doc-3304707 .html