您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 第3章8086寻址方式与指令系统
第3章8086寻址方式与指令系统第3章8086寻址方式与指令系统本章主要内容概述18086寻址方式28086指令系统3第3章8086寻址方式与指令系统3.1概述指令是指挥计算机进行操作的命令。指令系统是指微处理器能执行的各种指令的集合。程序是一系列按一定顺序排列的指令。执行程序的过程就是计算机的工作过程。微处理器的主要功能由它的指令系统来体现。不同的微处理器有不同的指令系统,其中每一条指令对应着处理器的一种基本操作,这在设计微处理器时确定。第3章8086寻址方式与指令系统通常一条指令包括两部分:操作码:决定要完成的操作操作数:指参加运算的数据或是该数所在的内存单元的地址。指令的一般格式如下:操作码[操作数1,操作数2,……,操作数n]没有操作数的指令称为无操作数指令。有两个操作数的指令称为双操作数或二地址指令。操作码和操作数地址都由二进制数码表示,整条指令以二进制编码的形式存放在存储器中。第3章8086寻址方式与指令系统指令系统与寻址方式的重要性采用不同CPU的计算机的指令系统不同。采用不同CPU的计算机的指令的格式不同。采用不同CPU的计算机的各指令允许的寻址方式不同。要使用某种微处理器,必须先要掌握其指令系统和各指令允许的寻址方式。第3章8086寻址方式与指令系统3.28086寻址方式寻址方式:指令中给出的求出操作数有效地址的方法。寻址操作:计算机按照指令给出的寻址方式求出操作数有效地址的过程。第3章8086寻址方式与指令系统808的七种基本的数据寻址方式(1)立即寻址;(2)寄存器寻址;(3)直接寻址;(4)寄存器间接寻址;(5)寄存器相对寻址;(6)基址变址寻址;(7)相对基址变址寻址。存储器寻址方式第3章8086寻址方式与指令系统3.2.1立即寻址操作数直接出现在指令中,此时的操作数也叫立即数。立即数紧跟在操作码后面,一起存放在代码段中。例如:MOVAX,2010H在该指令格式中,AX是目标操作数,2010H是源操作数。第3章8086寻址方式与指令系统立即寻址方式的指令执行示意图20H操作码AX10H10H20H~~~~存储器00000HFFFFFH操作码~~~~代码段AHAL第3章8086寻址方式与指令系统立即寻址方式说明在所有的指令中,立即数只能作源操作数,不能作目标操作数。立即数应与目标操作数的长度一致。立即数默认采用十进制形式,以十六进制形式出现的立即数应以字母H为后缀,以八进制形式出现的立即数应以字母Q为后缀。以十六进制形式出现的立即数,若以字母开头,则必须以数字0为前缀。立即数还可以用表示+、-、×、/表示的算术表达式,也可以用圆括号改变运算顺序。立即数只能是整数,不能是小数、变量或其它类型的数据。第3章8086寻址方式与指令系统3.2.2寄存器寻址操作数在寄存器中,在指令中指定寄存器号。由于寄存器号短,因此,采用寄存器寻址方式的指令的机器码长度短。操作数在寄存器中,指令执行时,操作就在CPU的内部进行,不需要通过访问存储器来取得操作数,因而指令的执行速度快。在编程中,如有可能,应尽量在指令中使用这种寻址方式。例如:MOVAX,2010H第3章8086寻址方式与指令系统寄存器寻址方式可用的寄存器对于16位操作数,寄存器可以是:AX,BX,CX,DXSI,DI,SP,BPCS,DS,SS和ES对8位操作数,寄存器可以是:AH,ALBH,BLCH,CLDH,DL第3章8086寻址方式与指令系统寄存器寻址方式指令执行示意图20H操作码AX10H10H20H~~~~存储器00000HFFFFFH操作码~~~~代码段AHAL第3章8086寻址方式与指令系统寄存器寻址方式说明在一条指令中,寄存器寻址方式既可用于源操作数,也可用于目标操作数,还可以两者都用寄存器寻址方式。源操作数与目标操作数的长度应一致。例如,不能将寄存器AX的内容传送到寄存器BH中,也不能将寄存器BH的内容传送到寄存器AX中。两个操作数不能同时为段寄存器。目标操作数不能是代码段寄存器。第3章8086寻址方式与指令系统3.2.4直接寻址操作数在存储器中,指令中以具体数值的形式直接给出操作数所在存储单元的有效地址EA。为了与立即数区别,该有效地址必须用[]括起。例如:MOVAX,[2010H]该指令的源操作数采用直接寻址方式。若(DS)=2000H,那么指令执行后,(AX)=1225H。第3章8086寻址方式与指令系统直接寻址方式指令执行示意图12H操作码AX25H10H20H~~~~存储器00000H22010H操作码~~~~25H数据段~~~~FFFFFH12H代码段AHAL2000HDS×10H2010H+22010H第3章8086寻址方式与指令系统采用直接寻址方式时,如果指令中没有用前缀说明操作数存放在哪个段,则操作数默认存放在数据段。8086系统允许操作数存放在代码段、堆栈段或附加段。此时,就需要在指令中指明段超越。例如:MOVES:[1225H],AX该指令的目标操作数采用直接寻址方式。操作数存放在由ES指示的附加段中。物理地址=ES×10H+1225H。第3章8086寻址方式与指令系统在汇编语言指令中,可以用符号地址代替数值地址。例如:MOVAX,NUMA此时,NUMA是存放操作数的内存单元的符号地址。上面这条指令还可以写成如下的形式:MOVAX,[NUMA]如DATA1数据存放在附加段,则可以用如下的形式指定段跨越前缀:MOVAX,ES:NUMA或MOVAX,ES:[NUMA]第3章8086寻址方式与指令系统3.2.4寄存器间接寻址操作数的有效地址EA存放在基址寄存器BX、BP或变址寄存器SI、DI中。为了区别于寄存器寻址方式,指令中指定的寄存器名要用[]括起来。指令中使用SI、DI、BX寄存器时,操作数默认存放在数据段中;使用BP寄存器时,操作数默认存放在堆栈段中,允许段超越。操作数的物理地址=(DS)×10H+(SI)/(DI)/(BX)或(SS)×10H+(BP)第3章8086寻址方式与指令系统例如:MOVAX,[SI]该指令的源操作数采用寄存器间接寻址方式。若(DS)=2000H,(SI)=2010H,那么指令执行后,(AX)=1225H。如操作数不存放在间址寄存器默认的段,则指定段超越的指令可采用如下形式。MOVAX,ES:[SI]此时,操作数的物理地址=ES×10H+SI。第3章8086寻址方式与指令系统寄存器间接寻址方式指令执行示意图12H操作码AX25H~~~~存储器00000H22010H操作码~~~~25H数据段~~~~FFFFFH12H代码段AHAL2000HDS×10H+22010H2010HSI第3章8086寻址方式与指令系统3.2.5寄存器相对寻址操作数的有效地址EA是指令中指定的基址或变址寄存器的值与位移量之和。指令中使用SI、DI、BX寄存器时,操作数默认存放在数据段中;使用BP寄存器时,操作数默认存放在堆栈段中,允许段超越。操作数的物理地址=(DS)×10H+(SI)/(DI)/(BX)+8位或16位位移量或=(SS)×10H+(BP)+8位或16位位移量第3章8086寻址方式与指令系统例如:MOVAX,8[BX]该指令的源操作数采用寄存器相对寻址方式。若(DS)=2000H,(BX)=2008H,那么指令执行后,(AX)=1225H。第3章8086寻址方式与指令系统寄存器相对寻址方式的指令执行示意图12H操作码AX25H~~~~存储器00000H22010H操作码~~~~25H数据段~~~~FFFFFH12H代码段AHAL2000HDS×10H+22010H2008HBX8第3章8086寻址方式与指令系统寄存器相对寻址说明偏移量是符号数,8位偏移量的取值范围为:00~0FFH(即+127D~-128D);16位偏移量的取值范围为:0000~0FFFFH(即+32767D~-32768D)。8086汇编允许用下面三种形式表示相对寻址,它们是等效的。MOVAX,[BX]+8MOVAX,8[BX]MOVAX,[BX+8]第3章8086寻址方式与指令系统3.2.6基址变址寻址操作数的有效地址EA是指令中指定的基址寄存器的值与变址寄存器的值之和。指令中使用基址寄存器BX时,操作数默认存放在数据段中;使用基址寄存器BP时,操作数默认存放在堆栈段中,允许段超越。操作数的物理地址=(DS)×10H+(SI)/(DI)+(BX)或=(SS)×10H+(SI)/(DI)+(BP)第3章8086寻址方式与指令系统例如:MOVAX,[BX][SI]该指令的源操作数采用基址变址寻址方式。若(DS)=2000H,(BX)=2008H,(SI)=8H,那么指令执行后,(AX)=1225H。第3章8086寻址方式与指令系统基址变址寻址方式的指令执行示意图12H操作码AX25H~~~~存储器00000H22010H操作码~~~~25H数据段~~~~FFFFFH12H代码段AHAL2000HDS×10H+22010H2008HBX8HSI第3章8086寻址方式与指令系统3.2.7相对基址变址寻址操作数的有效地址EA是指令中指定的基址寄存器的值与变址寄存器的值以及8位或16位位移量之和。指令中使用基址寄存器BX时,操作数默认存放在数据段中;使用基址寄存器BP时,操作数默认存放在堆栈段中,允许段超越。操作数的物理地址=(DS)×10H+(SI)/(DI)+(BX)+8位或16位位移量或=(SS)×10H+(SI)/(DI)+(BP)+8位或16位位移量第3章8086寻址方式与指令系统例如:MOVAX,3[BX][SI]该指令的源操作数采用寄存器相对寻址方式。若(DS)=2000H,(BX)=2008H,(SI)=5H,那么指令执行后,(AX)=1225H。第3章8086寻址方式与指令系统相对基址变址寻址方式的指令执行示意图12H操作码AX25H~~~~存储器00000H22010H操作码~~~~25H数据段~~~~FFFFFH12H代码段AHAL2000HDS×10H+22010H2008HBX5HSI3H第3章8086寻址方式与指令系统3.38086指令系统8086指令系统包括六大类指令:数据传送指令算术运算指令逻辑运算和移位指令串操作指令控制转移指令处理器控制指令第3章8086寻址方式与指令系统8086汇编指令中的操作数可以有零个、一个或两个,通常称为零地址、一地址或二地址指令。二地址指令中的两个操作数分别称为源操作数和目标操作数。第3章8086寻址方式与指令系统3.3.1数据传送指令数据传送指令是将数据或地址传送到寄存器、存储单元或I/O端口中。包括5类:通用数据传送指令;累加器专用传送指令;地址传送指令;标志传送指令;数据类型转换指令。第3章8086寻址方式与指令系统数据传送指令的共同特点除了POPF和SAHF指令外,其他的数据传送指令的执行结果都不影响标志位。指令中如果列出两个操作数,则指令的执行过程是:目标操作数←源操作数。指令中如果仅列出一个操作数,则另一个操作数为隐含操作数。第3章8086寻址方式与指令系统1.通用数据传送指令1)传送指令格式:MOV目标操作数,源操作数功能:将源操作数的内容(一个字或一个字节)传送到目标操作数指定的寄存器或内存单元,源操作数内容不变。第3章8086寻址方式与指令系统MOV指令举例MOVAL,5;字节传送,立即数送通用寄存器MOVAX,BX;字传送,通用寄存器送通用寄存器MOVDS,AX;字传送,通用寄存器送段寄存器第3章8086寻址方式与指令系统MOV指令的使用说明源操作数可以是立即数、寄存器或内存操作数。目标操作数可以是寄存器或内存操作数。立即数和CS寄存器只能作为源操作数,不允许作为目标操作数。IP和PSW都不可作为源操作
本文标题:第3章8086寻址方式与指令系统
链接地址:https://www.777doc.com/doc-3351957 .html