- 1、本文档共118页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[物理]第3章 MCS-51系列单片机的寻址方式及指令系统
第3章 MCS—51系列单片机的寻址方式及指令系统 【学习目标】 掌握单片机的寻址方式 掌握单片机的指令及其应用 掌握汇编语言程序设计的思想并学会编制汇编语言程序 【引例】 由第2章我们得知单片机存储器的一些配置情况,那么,我们如何方便灵活快捷的找到存储在存储器中我们需要的数据或把数据存储在存储器中的任何位置呢? 总体存储器空间好比一个大的教学楼,教学楼中的房间可分成老师的办公室和普通的教室,同样,存储器中也分成专用的和通用的地方;老师的办公室有具体的名字也有房间号,而专用存储空间有专用寄存器的名字也有具体的地址。因此,寻找存储在存储器中我们需要的数据或把数据存储在存储器中的某一具体单元就有不同的方式方法,这也是本章第一部分的内容—寻址方式。 请编写一个汇编语言程序:将单片机内部RAM中从20H单元开始的地方存放的20个字节型数据,传送到片外RAM中2345H单元开始的地方。 编写此程序,不但需要了解单片机中内部、外部数据存储器的配置情况,而且还需要掌握在不同的存储区域中数据传送的指令也不一样。学习指令,首先要搞清楚51系列单片机中有哪些寻址方式?另外,学习指令还要从两个方面入手,就是指令的格式和执行过程,指令搞清楚后,同时还要掌握汇编语言中循环程序的编写方法。这些也是本章的主要内容。 【正文】 本章是学习的重点之一,主要介绍MCS—51系列单片机的寻址方式及指令系统。通过大量的编程练习,进一步掌握MCS—51系列单片机编程的方法和技巧。 MCS—51系列单片机的一个典型代表是8051,8051单片机指令系统共有33种功能,同一种功能可以用几种助记符表示,例如传送指令可用MOV、MOVX、MOVC等助记符来表示,所以整个指令系统共有42种助记符。不同的助记符与不同的“目的”、“源”地址相结合可组成111条指令。 8051单片机指令系统的特点是指令的字节少,其中很多是单字节指令。所以,占用的机器周期少,速度快,节省存储器空间。指令系统中有46条是单字节指令,45条是双字节指令,只有17条是三单字节指令。指令系统中有64条指令只用了一个机器周期(12个振荡周期),45条指令用了两个机器周期,只有乘法和除法指令用了四个机器周期。 MCS—51系列单片机的指令系统比较丰富,功能强,用起来十分方便。特别是MCS—51的硬件结构中有一个布尔处理机,所以指令系统中也相应地设计了一个处理布尔变量的指令子集。这个子集在设计大量处理位变量的程序时十分有效、方便,它是51系列指令系统的一大特色。 3.1 MCS—51系列单片机的寻址方式 指令的操作对象大多是各类数据,数据在寄存器、存储器中可以用多种方式来存取。 指令执行过程中寻址操作数的方式称为指令的寻址方式。一般来说,寻址方式越多,计算机功能就越强,编程的灵活性也就越大。 MCS-51 系列单片机的指令系统共有5 种寻址方式,即立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、基址寄存器加变址寄存器间接寻址。此外,因为在指令操作中有从右向左传送数据的约定,所以常把左边的操作数称为目的操作数,而把右边的操作数称为源操作数。以下所讲的各种寻址方式都是针对源操作数的,但实际上目的操作数也有寻址的问题。 3.1.1 立即寻址 采用这种方式时,指令中直接给出了参与操作的8位或16位二进制常数,并在此常数前面加“#” 号作为标志。例如:MOV A,#30H,执行完这条指令后,A中的值是确定的,就是十六进制数30H。在形式上,立即数前面总有一个“#”符号作为标志。 3.1.2 直接寻址 在直接寻址方式中,指令直接给出操作数所在的存储单元地址。例如:MOV A,20H,其功能是把内部RAM中地址为20H的单元中的数送到累加器A中。执行完这条指令后,累加器A中的值并不确定,但可以肯定它一定与地址为20H的单元中的值相同。在形式上,20H前面没有“#”符号。 3.1.3 寄存器寻址 寄存器寻址就是操作数存放在寄存器中,因此,指定了寄存器就能得到操作数。例如:MOV A,R0,其功能就是把寄存器R0中的内容传送到累加器A中。指令执行后,累加器A中的内容与R0中的内容相同。 3.1.4 寄存器间接寻址 首先考虑这样一个问题:如何从片内RAM的20H单元开始,连续取10个数,依次送入累加器A中。显然,要从20H单元取数,可以用指令MOV A, 20H;然后取21H 单元中的数,可以用MOV A, 21H。依次类推,取10个数就要用10条类似的指令,这样的做法显然不聪明。出现这种情况的原因是把地址的具体数值写在指令中了,或者说,每条指令中的地址值是一个常数,它不能改变。如果能把单元地址用一个变量来表示,其值可增可减,那么问题即可简便地解决。 寄存器间接寻址的方式就是用于解决这种问题的。它是以指令中给出的某
文档评论(0)