- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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 直接寻址
操作数,在直接寻址空间,如下列指令:
您可能关注的文档
最近下载
- 人教版高中音乐课件我爱这土地.pptx VIP
- 中小学生认识基孔肯雅热预防健康教育PPT课件.pptx VIP
- 2025杭州电力设备制造有限公司招聘70人(第二批)笔试备考试题及答案解析.docx VIP
- 斯普瑞斯奥莱人力资源管理体系调研诊断报告-0601(定稿).pptx VIP
- 五年级上学期班主任工作总结.docx VIP
- 公司食堂管理方案.docx VIP
- 中国药学会团体标准医疗机构静脉用细胞毒性药物调配.PDF VIP
- 宏观专题:提振消费专项行动:海外和历史经验分析.docx VIP
- 《站点工程勘察与设计》课件 1.2.6 基站主设备及天馈介绍.pptx VIP
- HG_T 6228-2023《二氧化硫氧化制硫酸催化剂原粒度活性试验方法》.pdf VIP
文档评论(0)