- 1、本文档共58页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第3章 AT89S51单片机的指令系统 在前面章节中介绍了单片机的基础知识和AT89S51单片机的主要结构,本章主要介绍AT89S51单片机的指令系统。 3.1 指令系统概述 单片机的指令系统是一套控制单片机执行操作的编码,通常称为机器语言,机器语言指令是单片机唯一能够识别和执行的指令。为了容易理解和编程,通常使用汇编语言指令(符号指令)和高级语言(用自然语言描述)来描述计算机的指令系统。 汇编指令需通过汇编程序或人工方法汇编成机器能够识别和执行的机器语言指令,高级语言需要经过编译或解释成机器能识别和执行的机器语言指令。本章采用Intel公司的标准格式汇编指令来分析AT89S51指令系统的功能和使用方法。 3.1.1 指令格式 汇编语言指令是能汇编成机器语言代码的指令。 AT89S51的汇编指令格式兼容MCS-51,其汇编语言指令的格式如下。 标号:操作码【操作数1】,【操作数2】,【操作数3】;注释 整个语句必须在一行内写完,分为四个部分。 (1)第1部分 标号,可以省略,它是用户定义的符号,标号实际上是符号地址,标号值代表这条指令在程序存储器中的存放地址。 标号可以从字母开始,后跟1~8个英文字母或数字,并以冒号“:”结尾。 3.1.1 指令格式 (2)第2部分 第二部分为指令操作,由2~5个英文字符组成,根据不用的指令而不同,它反映了指令的功能,不同功能的指令,可以查阅AT89S51的汇编手册。 (3)第3部分 第三部分为操作数,根据不同的指令,可以有1个、2个、3个操作数,或根本没有操作数。它与操作助记符之间至少有一个空格,可以由多个空格,操作数之间用逗号“,”分开。它反映的是指令的对象。 (4)第4部分 第四部分为注释,注释也可以省略,它以分号“;”开始,是用户对该条指令或程序的说明,注释必须在一行之内写完,换行时需另外以分号“;”开始,注释内容可以为任何字符。 3.1.2 AT89S51的伪汇编指令 汇编语言除了定义了汇编指令外,还定义了一些汇编伪指令,以支持汇编的运行。伪指令是汇编时不产生机器语言代码的指令,是CPU不能执行的指令,仅提供汇编用的某些控制信息。AT89S51汇编语言常用的伪指令有如下几条。 (1)ORG定位伪指令 格式:ORG m m一般是16位二进制数,m指出在该指令后的(伪)指令的汇编地址,即生成的机器指令的起始存储器地址。它必须放在每段源程序或数据段的开始行,在一个汇编语言的源程序中允许存在多条定位伪指令,但其中每一个m值都应和前面生成的机器指令存放地址不重叠。 3.2 AT89S51单片机的寻址方式 所谓寻址方式就是如何寻找存放操作数的空间地址,并把操作数提取出来的方法,它是单片机的重要性能指标之一,也是汇编语言程序设计的最基本的内容之一。 在汇编程序设计中,数据的存放、传送、运算都要通过指令来完成,编程必须自始至终都十分清楚操作数的位置,以便将它们传送到适当的空间去操作,这些都要针对系统的硬件环境编程。因此,如何寻找存放操作数的空间位置和提取操作数就十分重要。 MCS-51单片机有8中寻址方式:寄存器寻址、直接寻址、立即寻址、寄存器间接寻址、基寄存器加变址寄存器间接寻址、相对寻址、位寻址和页面寻址,下面作详细讲解。 3.2.1 立即寻址 立即寻址方式中操作数包含在指令字节中,操作码后面紧跟的是1B或2B操作数(称为立即数),即操作数以指令字节的形式存放于程序存储器中,在编写成程序时用“#”号表示,以区别于直接地址。 例如下面的代码。 MOV A, #5AH ;5AH A MOV DPTR, #2000H ;2000H DPTR 3.2.2 直接寻址 直接寻址方式在指令中直接给出操作数所在存储单元的地址,该地址指出了参与运算或传送的数据所在的字节单元或位的地址。 直接寻址方式访问以下3种存储空间: (1)特殊功能寄存器(特殊功能寄存器只能用直接寻址方式访问,即可以用它们的地址,也可以用它们的名字); (2)内部数据存储器的低128B(对于8032系列芯片,其内部数据存储器高128B(80H~0FFH)不能用直接寻址方式访问); 3.2.2 直接寻址 (3)位地址空间。 例如下面的代码。 MOV A, 5AH ;(5AH) →A 是把片内RAM中的5AH这个地址单元的内容送入累加器A。 MOV A, P1 ;(P1) →A 是把SFR中P1口的内容送入累加器A,它也可以写成: MOV A, 90H 其中90H就是P1口的地址。 直接寻址的地址需占1个字节,所以一条直接寻址方式的指令至少需要占内存两个单元。 3.2.3 寄存器寻址 寄存器寻址就是由指令指出某一个寄存器的内容为操作数,对所选的工作寄存器组R0~R7进行操作,累加器ACC、B寄存器、数据指针DPTR
文档评论(0)