1、单片机原理及应用,主讲教师:胡晓娟中国矿业大学理学院 物理系,2,第 3 章 MCS-51单片机的指令系统,3.1 单片机指令系统概述3.2 MCS-51单片机的寻址方式3.3 MCS-51单片机的指令系统,3,指令:规定计算机基本操作的语句或命令,一条指令代表一项基本操作,是供用户使用的单片机的软件资源。 指令系统:一个计算机所能执行的指令集合。它是由计算机生产厂商定义的,是用户必须理解和遵循的标准。 指令系统没有通用性,各种计算机都有自己专用的指令系统,因此由汇编语言编写的程序没有通用性,无法直接移植。,3.1 单片机指令系统概述,4,MCS-51单片机汇编语言语句格式 MCS-51单片机
2、汇编语言语句的标准格式如下: 方括号 表示该项是可选项,可有可无。 标号是用户设定的符号,它实际代表该指令所在的地址。标号由18个ASCII字符组成,必须以字母开头,其后跟字母、数字或其他特定字符,并以“:”与操作码进行间隔。 例如: LOOP: ADD A, #10H ; (A)(A)+10H, ; ,5,【关于标号的说明】: 不能使用本汇编语言已经定义的符号(保留字)作为标号,如指令助记符、伪指令助记符、寄存器的符号名称等。 同一标号在一个程序中只能定义1次,不能重复定义。 一条语句可以有标号,也可以没有标号,标号的有无取决于本程序中其他语句是否需要访问这条语句。, ; ,6,操作码是用英
3、文(或缩写)表示的指令功能助记符。它确定了CPU运行本条指令完成什么样的操作功能。如: ADD表示加法操作。 任何一条指令都必须有操作码项,不能省略。 注释部分是在编写程序时,为了增加程序的可读性,由用户拟写对该条指令或该段程序功能的说明。它与操作码或操作数之间以分号“;”间隔,可以用中文、英文或某些符号来表示,它不被编译成目标代码,只出现在源程序中。, ; ,7,操作数为指令操作提供数据,它与操作码之间必须以一个或几个空格分隔。 在一条语句中,可以没有操作数,可以有1、2、3个操作数,各操作数之间用逗号“,”分隔。对于两个操作数的指令,前面的操作数称为目的操作数,后面的操作数称为源操作数。
4、80C51的操作数有寄存器寻址、直接寻址、寄存器间接寻址、立即寻址、变址寻址、相对寻址、位寻址7种不同的寻址方式。, ; ,【注】指令与语句的关系:没有标号和注释的语句就是指令。,8,MCS-51单片机指令按字节的分类一条指令通常由两部分组成:操作码,操作数 MCS-51指令系统的111条指令中,共有 单字节指令(49条):只有一个字节,操作码和操作数信息同在其中。 双字节指令(45条):包括两个字节,第1个字节为操作码,第2个字节为操作数。 三字节指令(17条):操作码占1个字节,操作数占2个字节。其中操作数可能是数据,也可能是地址。,9,MCS-51单片机指令中常用符号的意义 Ri和Rn:
5、R表示当前工作寄存器区中的工作寄存器,当前工作寄存器的选定是由PSW的RS1和RS0位决定的。 i = 0 或 1,即R0和R1,可用作间接寻址的寄存器Ri。 n = 0 7,即R0 R7,当前工作寄存器组的8个寄存器。 #data: #表示立即数,data为8位常数。 #data是指包含在指令中的8位立即数。 #data16: 包含在指令中的16位立即数。,10,rel:相对地址。以补码形式表示的8位地址偏移量,范围为-128 +127,主要用于无条件相对短转移指令SJMP和所有的条件转移指令中。 addr16:16位目的地址。目的地址可在全部程序存储器的64KB空间范围内,主要用于无条件长
6、转移指令LJMP和子程序长调用指令LCALL中。 addr11:11位目的地址。目的地址应与下条指令处于相同的2KB程序存储器地址空间范围内,主要用于绝对转移指令AJMP和子程序绝对调用指令ACALL指令中。,MCS-51单片机指令中常用符号的意义,11,direct:表示直接寻址的地址,即内部数据存储器RAM单元的8位地址(0 127 或 0 255)或特殊功能寄存器SFR的地址。对于SFR可直接用其名称来代替其直接地址。 bit:位地址,指内部RAM和特殊功能寄存器SFR中可的直接寻址的位地址。 :间接寻址寄存器的前缀标志,如Ri,DPTR,表示寄存器间接寻址。,MCS-51单片机指令中常
7、用符号的意义,12,(X):表示某寄存器或某单元X中的内容。 (X):表示由X间接寻址的单元中的内容,即(X)作地址,该地址的内容用(X)表示。 / :表示对该位操作数取反,但不影响该位的原值。 :表示指令操作流程,将箭头右边的内容送入箭头左方所指的寄存器或单元中去。 :表示将箭头双方的内容相互交换。,MCS-51单片机指令中常用符号的意义,13,寻址方式:指定操作数存放位置的方法。,MCS-51单片机的 7 种寻址方式,3.2 MCS-51单片机的寻址方式,寄存器寻址方式 直接寻址方式 寄存器间接寻址方式 立即寻址方式 变址寻址方式 位寻址方式 相对寻址方式,14,操作数在寄存器中,只要指定
8、了寄存器就能得到操作数。(指令中以符号名称来表示寄存器) 寄存器寻址方式的寻址范围: 工作寄存器:4组共32个工作寄存器,但寄存器寻址只能使用当前寄存器组,因此指令中的寄存器名只能是R0 R7。当前工作寄存器组通过PSW中RS1、RS0位状态确定。 部分特殊功能寄存器:如累加器A、寄存器B、数据指针DPTR、位累加器CY等。,1. 寄存器寻址方式,15,指令中操作数直接以存储单元地址的形式给出。 直接寻址方式只能使用8位二进制数表示的地址,因此,该方式的对RAM的寻址范围只限于内部RAM。 低128单元:在指令中直接以单元地址形式给出; 特殊功能寄存器:可以单元地址形式给出,也可以寄存器符号形
9、式给出。例如: MOV A, 80HMOV A, P0,直接寻址是访问特殊功能寄存器的唯一方式,源操作均是特殊功能寄存器P0,2. 直接寻址方式,16,访问ROM时, 长转移指令LJMP addr16 与长调用指令LCALL addr16直接给出了ROM的16位地址,寻址范围64KB; 绝对转移指令AJMP addr11 与绝对调用指令ACALL addr11直接给出了ROM的11位地址,寻址范围2KB; 执行以上指令后,程序计数器PC的16位地址或低11位地址将更换为指令直接给出的地址,机器将改为访问以所给地址为起始地址的存储器区间取指令并依次执行。,2. 直接寻址方式,17,寄存器寻址方式
10、举例: MOV A, R3 ; 将R3内容送累加器A INC R0 ; R0 (R0)+1 直接寻址方式举例: MOV 65H, A ; 将累加器A的内容送内部RAM 65H单元中 MOV A, 3AH ; 将直接地址单元3AH中的内容送累加器A MOV 10H , 3AH ; 将3AH单元中的内容送10H单元 MOV IE , #85H ; 立即数85H送中断允许寄存器IE,18,以指定寄存器的内容为地址,由该寄存器所指定的单元内容作为操作数。(寄存器中存放的是操作数的地址) 寄存器间接寻址方式的寻址范围: 内部RAM低128单元:只能使用R0或R1作间址寄存器(地址指针),其通用形式为 R
11、i(i=0 或 1) 外部RAM 64KB:通常使用DPTR作间址寄存器,其形式为 DPTR 外部RAM的低256单元:既能用DPTR作间址寄存器寻址,也可使用R0或R1作间址寄存器寻址。 堆栈操作指令(PUSH和POP):以堆栈指针SP作间址寄存器寻址。,3. 寄存器间接寻址方式,19,76H,3AH,3AH,【例】:假定寄存器R0的内容是3AH,则指令MOVX A, R0 功能:以寄存器R0的内容3AH为地址,把该外部RAM地址单元中的内容送累加器A。,76H,寄存器R0,累加器A,外部RAM,20,操作数在指令中直接给出(立即数),作为指令的一部分与操作码一起存放在ROM内,取指后即得到
12、操作数本身,不需要另外去寄存器或存储器等处寻找和取数。 立即寻址方式主要用来给寄存器或存储单元赋初值,并且只能用作源操作数,不能用作目的操作数。 例如: MOV A, #70H ;A 70HMOV DPTR, #8200H ;DPH82H,DPL00H,4. 立即寻址方式,21,变址寻址是为了访问程序存储器(ROM)中的数据表格。(查表指令) 以DPTR或PC作为基址寄存器,以累加器A作为变址寄存器,并以两者内容相加形成的16位程序存储器地址,作为操作数所在的地址。 【注意】: 累加器A中的数为无符号数。 变址寻址是专门针对程序存储器的寻址方式,寻址范围可达64KB。,5. 变址寻址方式(基址
13、寄存器加变址寄存器间接寻址),22,变址寻址指令只有3条(均为1字节指令):MOVC A, A+DPTRMOVC A , A+PCJMP A+DPTR 第1条查表指令中DPTR在使用前可以赋值,查表范围可达64KB。 第2条指令中查表基址值PC是固定的,而A的内容是8位无符号数,因此只能在当前指令以下的256个地址单元范围内进行查表。 第3条指令是无条件转移指令。,23,变址寻址示意图,例如: MOVC A, A+DPTR ;(A)(A)+(DPTR),24,MCS-51单片机具有位处理功能,可以对数据位进行传送及逻辑操作,因此具有相应的位寻址方式。 位寻址的寻址范围: 内部RAM中的位寻址区
14、:20H 2FH。16个单元共128个位,位地址范围:00H 7FH。 位寻址区中的位有两种表示方法: 位地址。例:2FH单元的第0位表示为78H 单元地址加位。例:2FH单元的第0位表示为2FH.0,6. 位寻址方式,25,内部RAM位寻址区的位地址,26,位寻址的寻址范围: 特殊功能寄存器的可寻址位 可供位寻址的特殊功能寄存器共有11个。 特殊功能寄存器的可寻址位在指令中有 4 种表示方法: 直接使用位地址表示:PSW第5位地址为D5H 位名称表示:PSW第5位是标志位F0 ,可用F0表示该位 单元地址加位表示: PSW的单元地址为0D0H,第5位可表示为0D0H.5 特殊功能寄存器加位表
15、示:PSW.5,27,特殊功能寄存器地址映像,28,特殊功能寄存器地址映像(续),29,相对寻址方式是为了解决程序转移而专门设置的,只为转移指令所采用。 以PC的当前值加上指令中给出的相对地址偏移量(rel)就构成了程序转移的目的地址。 PC当前值是指该转移指令下面一条指令的首地址值,即转移指令的PC值加上它的字节数。 偏移量rel是一个带符号的8位二进制补码数,所能表示的数的范围是-128 +127。 转移的目的地址可用公式表示为:目的地址 = 转移指令地址(源地址)+ 转移指令字节数 + rel,7. 相对寻址方式,30,例如:假设以下双字节条件转移指令的源地址为2050H,若条件转移指令为 JZ 08H ,则程序将如何执行?若条件转移指令为 JZ 0F4H ,则程序将如何执行?,(b) 指令 JZ F4H 寻址示意图,(a) 指令 JZ 08H 寻址示意图,(a)表示满足累加器A为0的条件后,从源地址向下转移至205AH单元。 (b)表示满足累加器A为0的条件后,从源地址向上转移至2046H单元。,31,MCS-51单片机的 7 种寻址方式及相应的存储器空间,