微机原理与接口技术课件

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第三章寻址方式及指令系统3.1基本概念3.2寻址方式操作数的寻址方式转移指令的寻址方式3.3指令系统传送指令算术运算指令位运算指令CPU控制指令I/O类指令串操作指令REP前缀指令转移类指令3.4常用DOS系统功能调用和BIOS中断调用DOS系统功能调用常用DIOS中断3.1基本概念•指令是CPU可以理解并执行的操作命令。指令系统是某种CPU的所有指令的集合。不同的CPU有不同的指令系统,相互不一定兼容。例如8088/86与Z80就完全不兼容,但86系列高档的CPU是兼容低档的CPU,如80286、80386、80486包含8088/86的指令系统。•程序是为了解决某一问题而编写的有限指令序列,程序有三大特性:目的性、有限性、有序性。电子计算机从1946年发明至今依旧未摆脱冯·诺依曼的工作原理即存储程序的工作原理。计算机执行程序实质上是CPU依次取出已存储在内存中的程序的各条指令并执行的过程。一条指令的执行过程主要由两个阶段即取指阶段和分析执行阶段。其中CPU中有一指令指针指向待取出指令在内存所存放的地址,其值在当前指令取出后会自动加1(逻辑上加1)移向下一条指令。程序执行的流程图如图3.1。•大多数指令由操作码和操作数两部分构成,操作码是用于指出指令所要实现的操作即“做什么操作”,操作数部分是用于指出指令操作过程中所要用到的数据或数据所存放的位置即“对什么操作”。•指令可分为两个级别:机器级和汇编级。机器指令是指由二进制代码构成的可由CPU直接理解并执行的指令;汇编指令实质上是机器指令符号化的结果,它与机器指令是一对一的。机器指令最难理解、最难记忆、书写易出错,汇编指令则用英文助记符代表操作码部分,用相应的符号代表操作数部分,相对易于理解、记忆、书写不易出错。本书讲解主要基于汇编指令。•给出操作数的方式叫操作数的寻址方式。根据操作对象存放位置可将操作数分为四类:立即数(存于指令中)、寄存器操作数(存于寄存器中)、存储器操作数(存于存储器中)、端口操作数(存于端口中)。•对应的操作数寻址方式也就分为四大类:立即寻址方式、寄存器寻址方式、存储器寻址方式、端口寻址方式。操作数还可根据其在指令中的位置分为第一操作数和第二操作数以及隐含操作数(在指令中不会出现但会用到);根据操作数的作用分为源操作数(仅取出使用)和目的操作数(用于存放结果);根据操作数所对应的操作对象的字节数(也叫数据类型)分为字节操作数(Byte)、字操作数(Word)(8088/86字长为两个字节)、双字操作数(DoubleWord)、8字节操作数(Octalbyets,LongWord)、十字节操作数(TenBytes)。•指令的执行一般是顺序执行,即执行完一条指令接着执行物理上的下一条指令,但有时程序需要产生跳转,所以设置了一些转移指令。转移到某处的方式叫转移寻址方式。子程序调用和返回是一种特殊的转移指令,同样要考虑调用地址或返回地址的寻址方式。•指令分类有不同方式。按操作数的个数将指令分为零地址指令(无操作数)、一地址指令(只有一个操作数)、二地址指令(有二个操作数)、多地址指令(多于二个操作数);按指令级别分为机器指令和汇编指令;按是否转移分为转移指令和顺序指令;按功能分为七大类:传送类、算术运算类、位操作类、I/O类、串操作类、CPU控制类、转移类;按指令长度(即指令占用的字节数)分为一字节指令、二字节指令、……,8088/86指令长度是不同的,叫变字长,不同的指令有不同的指令长度,从一字节到六字节均有;按指令执行期间取操作数是否需要与总线打交道分为内部指令(不需)和外部指令(需要),类似功能的指令内部指令比外部指令执行速度快,所以在编程时尽量采用内部指令即多用寄存器优化程序。3.2寻址方式•3.2.1操作数的寻址方式•3.2.1.1立即寻址方式•指令中所包含的立即数对应的寻址方式叫立即寻址方式,操作对象就是这个操作数本身。•汇编指令所涉及的立即数有:各种进制的常数、字符常数、符号常量、地址(段名、段地址、偏移地址)、常数表达式等。•例3.1:(以下第二操作数为立即寻址方式,MOV指令功能是将第二操作数送给第一操作数)•MOVAL,5;5为十进制字节常数(“;”为注解开始标志)•MOVAX,5;5为十进制字常数•MOVAX,300H;300H为十六进制字常数•MOVCX,N;在此之前N已定义为常量•MOVAX,DATA;DATA为段名•MOVAX,5+2*3;5+2*3=11为常数表达式(表达式下一章详细讲解)•立即数只能作为源操作数,不能作为目的操作数。•立即数的数据类型可能是字节、也可能是字,由指令本身决定。如3.1例中的第一条指令“MOVAL,5”中的5为字节,第二条指令“MOVAX,5”中的5则为字。•字节数据的取值范围为-128-+255,字数据的取值范围为-32768-+65535。3.2.1.2寄存器寻址方式•指令中出现的寄存器名作为操作数的寻址方式叫寄存器寻址方式,操作对象实质上是寄存器中的内容。•汇编指令所涉及的寄存器操作数共有20个寄存器名。将其分二类:段寄存器(SR,SegmentRegister)和通用寄存器(UR,UniversalRegister)。•段寄存器(SR)有DS、ES、SS、CS四个,属于字类型,通用寄存器(UR)又分为8位通用寄存器和16位通用寄存器,8位通用寄存器(UR8)有AH、AL、BH、BL、CH、CL、DH、DL八个,属于字节类型;16位通用寄存器(UR16)有AX、BX、CX、DX、BP、SP、SI、DI八个,属于字类型。•例3.2:(例3.1中指令的第一操作数均为寄存器寻址方式;以下例子中第一、第二操作数均为寄存器寻址方式)•MOVAX,BX•MOVDH,CL•MOVDS,AX•寄存器操作数的类型是由其名决定,不同类型的不能混用,CS不能作为目的操作数,段寄存器只能在少许几条指令中可以使用。3.2.1.3存储器寻址方式•指令中操作数是操作对象在内存中的存放地址的寻址方式叫存储器寻址方式,操作对象实质上是内存地址所对应的存储单元中的内容。前面已讲过内存的地址是由段地址及段内偏移地址确定的,段地址的确定实质上是确定用哪个段寄存器,段寄存器除非在指令中特别指定(即段超越,用段寄存器名加“:”),其它情况下均为默认的,默认情况如表3.1所示(括号内代表可以使用的段超越)。•段内偏移地址如表3.1中前三种情况是固定不变的,后三种情况则需通过一定方法形成EA,根据形成EA的方法将存储器寻址方式分为五种:直接寻址方式、寄存器间接寻址方式、寄存器相对寻址方式、基址变址寻址方式、相对基址变址方式。1直接寻址方式•存储器操作数的内存偏移地址是一个数值的寻址方式叫直接寻址方式,即EA=n。主要有常数、常量或常数表达式加[]以及变量名或变量名加减常量形成的表达式。•例3.3:(以下第二操作数为直接寻址方式,常量、变量下一章详细讲解)•MOVAX,[2000H]•MOVBX,[N];N为常量名•MOVCX,ES:[2+3*5]•MOVDX,A;A为变量名•MOVSI,A+5;A为变量名,变量名加减常量依旧为变量2寄存器间接寻址方式(简称间接寻址)•存储器操作数的内存偏移地址部分是由某一个寄存器中的内容的寻址方式叫间接寻址方式,即EA=R。写在汇编指令中的内存偏移地址的寄存器只能是BX、BP、SI、DI四个寄存器之一,若为BP则默认相对SS段,其它则默认相对DS段。•例3.4:(以下第二操作数为间接寻址方式)•MOVAX,[BX]•MOVBX,[BP]•MOVBP,[SI]•MOVSP,SS:[DI]•例3.5:(以下第二操作数为相对寻址方式)•MOVAX,[BX+6]•MOVBX,DS:[BP+N];N为常量名•MOVBP,A[SI];A为变量名,变量名常写于“[”前•MOVSP,[DI][8];另一种书写格式•MOVCX,8[DI];另一种书写格式3相对寻址方式•存储器操作数的内存偏移地址部分是由某一个寄存器的内容再加上一个相对偏移量的寻址方式叫寄存器相对寻址方式,即EA=R+n。写在汇编指令中的内存偏移地址的寄存器只能是BX、BP、SI、DI四个寄存器之一,若为BP则默认相对SS段,其它则默认相对DS段。相对偏移量可以是常数、常量、常数表达式以及变量名等。•例3.5:(以下第二操作数为相对寻址方式)MOVAX,[BX+6]MOVBX,DS:[BP+N];N为常量名MOVBP,A[SI];A为变量名,变量名常写于“[”前MOVSP,[DI][8];另一种书写格式MOVCX,8[DI];另一种书写格式4基址变址寻址方式•存储器操作数的内存偏移地址部分是由某一个基址寄存器的内容再加上某一个变址寄存中的内容的寻址方式叫基址变址寻址方式,即EA=BR+IR。写在汇编指令中的BR只能为BX或BP,IR只能为SI或DI,所以它们只有四种组合:BX+SI、BX+DI、BP+SI、BP+DI,若用到BP则默认相对SS段,其它则默认相对DS段。例3.6:(以下第二操作数为基址变址寻址方式)MOVAX,[BX+SI]MOVBX,DS:[BP+SI]MOVBP,[BX+DI]MOVDX,[BP][DI];另一种书写格式5相对基址变址寻址方式•存储器操作数的内存偏移地址部分是由某一个基址寄存器的内容加上某一个变址寄存中的内容再加上一个相对偏移量的寻址方式叫基址变址寻址方式,即EA=BR+IR+n。写在汇编指令中的BR只能为BX或BP,IR只能为SI或DI,所以它们只有四种组合:BX+SI+n、BX+DI+n、BP+SI+n、BP+DI+n,若用到BP则默认相对SS段,其它则默认相对DS段。相对偏移量可以是常数、常量、常数表达式以及变量名等。例3.7:(以下第二操作数为相对基址变址寻址方式)MOVAX,[BX+SI+19]MOVBX,DS:[BP][SI][8];另一种书写格式MOVBP,[BP+DI+N];N为常量名MOVDX,A[BX][DI];A为变量名•五种存储器寻址方式可用图3.2来总结。存储器操作数的类型可能是字节、字、双字等,可由另外一个操作数类型或定义的类型或指明的类型决定。类型可由BYTEPTR、WORDPTR、DWORDPTR分别说明或强行指定。•存储器操作数可以是以上五种存储器寻址方式的一种,对任何一个存储单元可采用任一种存储器寻址方式,如图3.3所示。图3.3任一存储单元可采用五种存储器寻址方式任一种3.2.1.4端口寻址方式•端口操作数只能出现在I/O指令,即IN和OUT指令,端口操作数实质上是指明端口的地址,端口地址所对应的端口中的内容才是操作对象。端口地址给出的方式有两种:一种是常数(叫端口直接寻址方式),另一种只能是DX寄存器(端口间接寻址方式)。端口直接寻址方式的端口寻址范围为0-255(00H--FFH),即一个字节的地址值。端口间接寻址DX的取值范围为0-65535(0000H—FFFFH),很明显当端口地址超出255时,只能先将地址送给DX,然后再用DX间接寻址。例3.8:INAX,41H;41H为端口直接寻址OUTDX,AL;DX为端口间接寻址转移指令的寻址方式•前面讲解过程序的执行流程,指令指针IP会自动加1移向下一条指令,这便是程序的顺序执行,但程序执行过程中经常会发生转移,程序转移实质上是使指令指针指向待转移到的指令处。在8088/86中,除了指令指针还会涉及到代码段寄存器CS,CS:IP是控制程序执行流程的段地址:段内偏移。所以86系列微机中,转移指令实质上是对CS:IP的值进行改变。CS:IP值改变的方式就叫转移寻址方式。具体参看后面的转移指令的讲解部分。3.3指令系统•8088/86共有300多条机器指令,按前面汇编指令与机器指令一对一,也有300多条汇编指令,但后面的讲解是以汇编指令助记符一致及功能一致的情况下对汇编指令进行归类,所以只有97条指令也就好理解了。•分类记忆是一种非常好的方法,请大家务必掌握。按功能进行分类,把指令分为七大类:传送类指令、算术运算类指令、位运算类

1 / 131
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功