11寻址方式和指令系统..docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
11寻址方式和指令系统.

11 寻址方式和指令系统 一、寄存器 1.1 工作寄存器 有R0、R1、R2、R3、R4、R5、R6、R7共8个,都是8位的寄存器。其中R0、R1可以做数据指针,可以做间接地址空间的数据指针,也可以做外部数据区的指针,以间接寻址的方式对RAM中的数据据进行读取。当然,R0、R1也可以像R2、R3、R4、R5、R6、R7一样,做普通的寄存器来用。 在物理上,工作寄存器共有四组,分别占用内部RAM的00H~07H、08H~0FH、10H~17H、18H~1FH四组地址。当前使用的通用寄存器组,是由程序状态字PSW的第四位和第三位(RS1、RS0)来决定的。四组寄存器,在中断程序中,可以通过切换寄存器的方式,来快速实现现场保护。在C51中,可以用using 0、using 1、 using 2、 using 3 来指明某函数所用的寄存器组。如: Void int0pro(void) interrupt 0 using 2 //这个函数用第二组工 {………. //作寄存器 } 对通用寄存器的访问,是最快速的访问。比下面的两条指令: MOV A,R7 MOV A,07H 都是将内部RAM空间的07H单元存储的数据,赋给寄存器A,但是前者是寄存器寻址,比后者直接寻址,更快一些。 1.2 累加器A 寄存器A是一个特殊的寄存器,所有算术运算类指令中的一个操作数,必须在寄存器A中,其运算结果,也一定存入该寄存器。由于加法是最基本的运算,所以称寄存器A为累加器,它是8051家族单片机所有的寄存器中最重要的一个。 如: ADD A,@R1 SUBB A,#23 MUL AB DIV AB 累加器A不占用存储单元,有一个专门的硬件电路。但是它可以映射到SFR空间,占用地址:0E0H,此时,写做ACC,在栈操作可以使用。比较下面代码: MOV A,#0 MOV ACC,#0 虽然执行后的结果,没有区别,但是后者执行时间要长一倍。 1.3 辅助寄存器B 寄存器B,用于乘除法的第二个操作数,运算的部分结果,也存在该寄存器中。B是一个SFR,占用地址:0F0H。 1.4 程序状态字PSW 程序状态字PSW,是一个SFR,来指明当前指令的执行情况、累加器A的数据状态、工作寄存器组的选择等。F0、F1可做为普通的位变量来使用。这个寄存器在运算类操作、条件转移、中断时寄存器组切换时,是非常有用的。CY,也称C,在位传送指令中使用,如: MOV C,P2.0 MOV P1.0,C 1.5 数据指针DPTR DPTR是一个16位寄存器,也可当成两个8位寄存器DPH、DPL。外部数据不能直接访问,必须通过数据指针DPTR或R0、R1来间接访问。但是R0、R1的访问范围,只能限定在一页(256字节)内,限定在哪一页,由页寄存器EMI0CN来确定。如: MOV EMI0CN, #12h ; 将地址的高字节装入 EMI0CN MOV R0, #34h ; 将地址的低字节装入 R0 MOVX A, @R0 ; 将地址 0x1234 的内容装入累加器 以上三句,和下面两句是等价的: MOV DPTR,#1234 MOVX A,@DPTR 上面三句,好像并没有下面的两句简洁,但是如果我们在一页内频繁操作的话,页寄存器,并不需要重新赋值,这样,通过R0(R1)来对外部RAM进行访问,在速度上,就占优势了。另一方面,我们也拥有三个指针指向外部数据区,在程序设计上,也会更加便利。 1.6 堆栈指针SP SP总是指向当前栈顶。在每次执行 PUSH 操作前,堆栈指针加 1。执行 POP操作后,堆栈指针减 1,SP 寄存器复位后,其值是07H,堆栈区占用第一组工作寄存器的位置,一般说来,这样是不能容忍的,须将SP重新赋给一个大于30H的值,使堆栈区不占用寄存器空间、也不占用位寻址空间。我们常将SP赋于一个大于一个80H的值,使堆栈区位于间接寻址区,以释放更多的可直接寻址的RAM空间。 1.7 程序指针PC 程序当前的位置,PC的值不能由软件赋值,它根据程序指令情况自动变化。我们可以用PC间址寻址,来读取存在程序空间的数据。 二、寻址方式 所谓寻址方式,就是把操作数取出来的方式。应该叫寻数方式。 2.1 寄存器寻址 操作数在寄存器中。如下列指令: INC R0 INC DPTR 2.2 立即寻址 操作数,是一个常数,如下列指令: MOV R0,#23H ADD A,#34H 2.3 直接寻址 操作数,在直接寻址空间,如下列指令:

文档评论(0)

dashewan + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档