您当前的位置:五五电子网电子知识电子学习基础知识电脑-单片机-自动控制AT89S51的指令系统的寻址方式 正文
AT89S51的指令系统的寻址方式

AT89S51的指令系统的寻址方式

点击数:7526 次   录入时间:03-04 11:57:28   整理:http://www.55dianzi.com   电脑-单片机-自动控制
      大多数指令在执行时,都需要使用操作数。寻址方式就是在指令中说明操作数所在地址的方法。一般来说,寻址方式越多,单片机的功能就越强,灵活性则越大,指令系统也就越复杂。寻址方式所要解决的主要问题就是如何在整个存储器和寄存器的寻址空间内,灵活方便、快速地找到指定的地址单元。AT89S51单片机的指令系统有7种寻址方式,下面分别予以介绍。
  
  1.寄存器寻址方式
  
  寄存器寻址方式,就是指令中的操作数为某一寄存器的内容。
  
  例如指令:
  
  是把Rn中的源操作数送入到累加器A中。由于在指令中指定了从寄存器Rn中取得源操作数,所以称为寄存器寻址方式。
  
  寄存器寻址方式的寻址范围包括:
  
  (1)4组通用工作寄存区共32个工作寄存器。但只对当前工作寄存器区的8个工作寄存器寻址,因此指令中的寄存器名称只能是RO~R7。
  
  (2)部分特殊功能寄存器,如累加器A、寄存器B以及数据指针寄存器DPTR等。
  
  2.直接寻址方式
  
  在这种寻址方式中,指令中直接给出操作数的单元地址,该单元地址中的内容就是操作数,直接的操作数单元地址用“direct”表示。例如某一直接寻址方式指令:
  
  指令中的“direct”就是操作数的单元地址,例如:
  
  表示把内部RAM 40H单元(direct)的内容传送到A。指令中源操作数(右边的操作数)采用的是直接寻址方式。
  
  指令中的两个操作数都可由直接寻址方式给出,例如指令:
  
  其具体指令:
  
  表示把片内RAM中62H单元的内容送到片内RAM中的42H单元中。
  
  直接寻址方式是对片内所有特殊功能寄存器访问的唯一寻址方式,也是访问内部RAM的128个单元的一种寻址方式。
  
  3.寄存器间接寻址方式
  
  前述的寄存器寻址方式在寄存器中存放的是操作数,而寄存器间接寻址方式在寄存器中存放的是操作数的地址,即先从寄存器中找到操作数的地址,再按该地址找到操作数。由于操作数是通过寄存器间接得到的,因此称为寄存器间接寻址。
  
  为了区别寄存器寻址和寄存器间接寻址,在寄存器间接寻址方式中,应在寄存器名称前面加前缀标志“@”。例如指令:
  
  其中,Ri中的内容为40H,即从R/中找到源操作数所在单元的地址40H,然后把内部RAM40H地址单元中的内容传送给A。
  
  4.立即数寻址方式
  
  立即数寻址方式就是直接在指令中给出操作数。出现在指令中的操作数也称立即数。为了与直接寻址指令中的直接地址加以区别,需在操作数前面加前缀标志“#”。例如指令:
  
  表示把立即数40H送给A,40H这个常数是指令代码的一部分。采用立即数寻址方式的指令是双字节的。第一个字节是操作码,第二字节是立即数。因此,立即数就是放在程序存储器内的常数。
  
  5.基址寄存器加变址寄存器间址寻址方式
  
  这种寻址方式是以DPTR或PC作为基址寄存器,以累加器A作为变址寄存器,并以两者内容相加形成的16位地址作为目的地址进行寻址的方式。例如指令:
  
  其中,A的原有内容为05H,DPTR的内容为0400H。该指令执行的结果是把程序存储器0405H单元的内容传送给A。
  
  本寻址方式的指令只有3条:
  
  前两条指令适用于读程序存储器中固定的数据。例如,将固定的且按一定顺序排列的表格参数存放在程序存储器中,在程序运行中由A的动态参量来确定读取对应的表格参数。
  
  第3条指令为散转指令,A中的内容为程序运行后的动态结果,执行该指令,可根据A中的不同内容,来实现跳向不同程序入口的跳转。
  
  6.相对寻址方式
  
  相对寻址方式是为解决程序转移而专门设置的,为转移指令所采用。
  
  相对寻址是以该转移指令的地址(PC值)加上它的字节数,再加上相对偏移量(rel),形成新的转移目的地址,从而程序转移到该目的地址。转移的目的地址可用下式来计算:
  
  目的地址=转移指令所在的地址+转移指令字节数+rel
  
  其中,偏移量rel是单字节的带符号的8位二进制数补码数。它所能表示的数的范围是-128~+127。因此,程序的转移范围是以转移指令的下条指令首地址为基准地址,相对偏移在-128~+127单元之间。
  
  例如,跳转指令:
  
  在执行时,程序要转移到该指令的PC值加3再加上rel的目的地址处。其中,3为本跳转指令的字节数,rel为8位带符号的补码。
  
  用户在编写程序时,只需在转移指令中直接写上要转向的地址标号就可以了。例如:
  
  LOOP即为要转向的目的地址标号。程序汇编时,由汇编程序自动计算和填入偏移量。但是手工汇编时,偏移量的值需编程人员手工计算。
  
  7.位寻址方式
  
  位寻址是指对内部RAM和特殊功能寄存器具有位寻址功能的某位内容进行置1和清0操作。位地址一般以直接位地址给出,位地址符号为“bit”。例如指令:
  
  其某一具体指令:
  
  该指令的功能就是把位地址为40H的值送到进位位C。
  
  由于AT89S51具有位处理功能,可直接对数据位方便地实现置l、清O、求反、传送、判跳和逻辑运算等操作,为测控系统的应用提供了最佳代码和速度,大大增强了实时性。
  
  至此7种寻址方式已介绍完毕,但是存在一个问题:当一条指令给定后,如何来确定该指令的寻址方式?例如指令:MOV A,#40H,它究竟是属于立即数寻址还是寄存器寻址?这要看以哪个操作数作为参照系了。因为操作数可分为源操作数(右边的操作数)和目的操作数(左边的操作数)。对于源操作数“#40H”来说,是立即数寻址方式,但对目的操作数“A”来说,是寄存器寻址方式。一般而言,寻址方式指的是源操作数,所以此例为立即数寻址方式。
  
  AT89S51指令系统的7种寻址方式总结见表3-1。
  
  表3-1 7种寻址方式及其寻址空间


本文关键字:暂无联系方式电脑-单片机-自动控制电子学习 - 基础知识 - 电脑-单片机-自动控制