
微机原理与应用:第八讲 指令系统中的寻址方式.ppt
19页第八讲指令系统中的寻址方式1第三章 MCS-51系列指令系统u指令是CPU控制系统各部件执行相关操作的指示或命令u指令系统是CPU能识别、能执行的指令的集合u51系列单片机的指令系统共有111条指令,它们是程序设计的基础23.1指令格式和寻址方式指令的表示形式有两种,一种是以二进制数的形式,比如00100100B、01101000B(24H、68H),这就是指令的机器代码由这些机器代码组成的程序叫目的程序或可执行程序另外一种指令形式是以一些助记符号组成的形式,比如“ADD A, #68H”这条指令对应的指令代码就是24H、68H由助记符号组成的程序叫源程序3指令格式然而,不管是以上哪一种形式的指令,每一条指令要表示的内涵是一样的抽象地说,每一条指令包含着操作码和操作数这两部分内容这也称为指令格式,如下所示操作码操作数41、操作码操作码是表示指令的种类和功能的二进制代码,如上面例子中的24H,而“ADD”是其对应的助记符号2、操作数操作数是指令的操作对象,表示指令操作的数据和地址,它也是用二进代码表示比如上面例子中的68H5特别要提醒注意的是:操作数不仅仅表示指令所需要处理的数据,而且还可以表示下一条执行指令的地址。
寻址方式指令如何找到操作数?采用什么方式找到操作数就是所谓寻址方式问题寻址方式就是寻找操作数的方式,也就是寻找数据或地址的方式为了适应各种各样方式对数据的操作,数据存放形式也是各种各样的,数据可以存放在寄存器中,可以存放在数据存储器中,有的还可以存放在程序存储器中等等有时数据有两个、三个,这些数据的存放地点和个数信息都必须在指令的操作数代码段里加以表示63.1.1 立即寻址方式所谓立即寻址是指CPU需要操作的数据包含在指令中,也就是说需要操作的数据成为指令代码的一部分比如上面例子中“ADD A, #68H”中68H就是指令需要操作的数据,它包含在指令代码(24H、68H)中指令代码在程序存储器中的存放形式如图3-1所示程序存储器PC+101101000操作数PC00100100操作码7例3-1具有立即寻址方式的指令,经常用于给一些存储器和寄存器赋初值,MOV P1,#0FFH;将数据FFH传送至P1口MOVSP,#70H;将地址70H传送至堆栈指针SPMOVR0,#30H;将30H传送至工作寄存器R0这3条指令中,每一条指令都有两个操作数,一个叫源操作数,表示数据的来源;一个叫目的操作数,表示数据存放的目的地,目的操作数源操作数83.1.2 直接寻址方式所谓直接寻址是指指令中“直接”给出了数据的地址,而不是数据。
指令中包含CPU需要操作的数据在内存的地址,例3-2:MOVR0,30H;将内部数据存储器30H单元中的内容传送至R09例3-3直接寻址方式主要用于传送变量数据 X DATA40H;定义40H为变量X单元MOVX,#46H; 将立即数46H传送至变量XMOVA,X;将变量X的内容传送至累加器AMOVX,#38H; 将立即数38H传送至变量XMOVA,X;将变量X的内容传送至累加器A注意立即寻址与直接寻址指令在书写上的区别,前者操作数前面有#符号,后者操作数前无#符号103.1.3 寄存器寻址方式所谓寄存器寻址方式是指CPU需要操作的数据在工作寄存器(R0R7)中寄存器号(07)由3位二进制数表示,这3位二进制数作为指令操作码的一部分例3-4:MOVA,R0;将R0的内容送A,指令代码为11101000MOVA,R3;将R3的内容送A,指令代码为11101011MOVA,R7;将R7的内容送A,指令代码为11101111采用寄存器寻址方式传送数据有利于缩短指令代码,节省存储器资源113.1.4 寄存器间接寻址方式所谓寄存器间接寻址方式是指CPU需要操作的数据在由寄存器指定的存储器之中也就是说指令中的寄存器,其内容不是需要操作的数据,而是数据的存储器单元地址。
例3-5:MOVA,R1寄存器间接寻址方式主要用于对存储器中数据块的访问,指令中的R1作为指针,指出需要访问的存储器地址,通过修改指针,可以方便地改变需要访问的存储器单元123.1.5 变址寻址方式所谓变址寻址方式是指操作数的地址是由“基址寄存器的内容+变址寄存器的内容”形成之所以叫变址寻址,就是因为操作数的地址可以根据累加器A内容的改变而变化13例3-6MOVCA,A+DPTR若以上指令执行前,A的内容为02H,DPTR的内容为2013H,程序存储器2015H单元的内容为28H,则该指令执行后,累加器A的内容为28H该指令执行的过程如图所示变址寻址方式访问的对象是程序存储器中的常量数据143.1.6相对寻址方式相对寻址方式与前几种寻址方式有一个重要的区别,前几种寻址方式CPU操作的对象是数据,不同的寻址方式只是不同的寻找数据的方式而已对于相对寻址方式而言,CPU操作的对象是指令的执行地址相对寻址只用于指令系统中的转移类指令,其转移地址形成的方法是,当前PC值加上一个“相对距离”(称为偏移量)用以下公式表示转移目的地址=当前PC值+偏移量(3-1)151、当前PC值当前PC值是指CPU在执行某指令时程序计数器PC内的值,更精确地说,当前PC值是CPU在执行某指令过程中,处在执行阶段时程序计数器PC内的值。
当前PC值=被执行的指令地址+被执行指令的字节数 (3-2)2、偏移量偏移量是表示转移目的地址与当前PC值之间关系的一个量,它有正有负从公式(3-1)中可知,当转移目的地址大于当前PC值时,它为正;当转移目的地址小于当前PC值时,它为负因此它是一个采用补码表示的一个二进制数,在51系列单片机的指令系统中,它是一个用8位二进制数表示的补码数据16相对转移指令51系列单片机指令系统中的相对转移指令是“SJMP 转移地址”,其指令代码是“80H rel”,80H是操作码,rel是偏移量指令代码存放形式如图所示173.1.7 位寻址方式所谓位寻址方式是指CPU需要操作的是位数据,而不是字节数据位地址包含在指令代码中例3-8:分析指令“CLR 36H”该指令是将内部数据存储器中36H位单元的内容清零,也就是将内部数据存储器26H单元中的D6位清零如图所示18作业三P67. 3-2。












