1、第 3章 单片机指令系统3.1 MCS-51单片机指令格式和寻址方式3.2 MCS-51单片机指令分类介绍3.3 MCS-51单片机指令汇总内容提要 :3.1 MCS-51单片机指令格式和寻址方式3.1.1 指令系统概述指令 是供用户使用的单片机的软件资源。指令系统 是一台计算机所能执行的指令集合。汇编语言 是用助记符表示的指令 汇编语言程序指令系统 无通用性 。指令机器指令1010 0011B (二进制数表示) A3H(十六进制数表示)汇编指令INC DPTR 3.1.2 MCS-51单片机指令格式指令的表示形式称 指令格式 。编写程序时必须严格按指令格式书写。MCS-51指令由 操作码 和
2、 操作数 组成。指令应具有以下功能:( 1)操作码指明执行什么性质和类型的操作。例如,数的传送、加法、减法等。( 2)操作数指明操作的数本身或者是操作数所在的地址。( 3)指定操作结果存放的地址。汇编语言指令格式如下:标号: 操作码助记符 第一操作数 ,第二操作数;注释 1. 一字节指令 (49条 )操作码与操作数信息同在一字节中。如: INC DPTR (1010 0011)MOV A , Rn (1110 1rrr)2. 二字节指令 (45条 )第一字节为操作码,第二字节为操作数。如: MOV A , #data (0111 0100 立即数 )#data表示一个 8位的二进制操作数,占一
3、个字节,称为 立即数 。3. 三字节指令 (17条 )第一字节为操作码,第二、三字节为操作数 (数据或地址 )。如: ANL direct , #data (0101 0011 直接地址 立即数 )direct为单元地址, #data为 8位 立即数 。3.1.3 寻址方式 寄存器寻址 直接寻址 寄存器间接寻址 立即寻址 变址寻址 位寻址 相对寻址指令中,操作数可能是具体的数据,也可能是具体的存放数据的地址或符号,无论何种情况,都可由操作数取得参与指令运行的二进制数据。这个过程叫作寻址 。 寄存器寻址 以寄存器的内容作为操作数的寻址方式。包括 A、 B 、 DPTR寄存器以及通用寄存器R0 R
4、7 。例如:CLR A ; A0INC DPTR ; DPTR(DPTR)+1ADD R5, # 20H ; R5#20H+(R5)直接寻址 指令中直接给出操作数地址的寻址方式,能进行直接寻址的存储空间有 SFR寄存器和内部数据RAM(因为是 8位地址 )。例如: MOV PSW , # 20H ; PSW#20HPSW 为直接寻址寄存器的符号地址。MOV A, 30H ; A 内部 RAM 30H单元中的内容 30H为直接给出的内部 RAM的地址。 注意: 这是访问大部分 SFR寄存器的唯一方法,可写成单元地址形式,也可写成寄存器符号形式。直接寻址方式示意图 思考问题:我们知道,工作寄存器就
5、是内存单元的一部分,如果我们选择工作寄存器组 0,则 R0就是RAM的 00H单元,那么这样一来, MOV A, 00H 和 MOV A, R0不就没什么区别了吗?的确,这两条指令执行的结果是完全相同的,都是将 00H单元中的内容送到 A中去,但是执行的过程不同,执行第一条指令需要 2个机器周期,而第二条则只需要 1个机器周期,第一条指令变成最终的目标码要两个字节( E5H 00H),而第二条则只要一个字节( E8H)就可以了。寄存器间接寻址以寄存器中的内容作为操作数的地址,通过该地址获得操作数的寻址方式。可间接寻址的存储器空间包括内部数据RAM和外部数据 RAM。能用于寄存器间接寻址的寄存器
6、有 R0,R1, DPTR, SP。其中 R0、 R1必须是工作寄存器组中的寄存器。 SP仅用于堆栈操作 (POP和 PUSH)。 为区别于寄存器寻址,使用时寄存器前面加 “”标志例如: MOV R0, A ;内部 RAM(R0)(A)其指令操作过程示意图如图 3-1所示。又如: MOVX A, R1; A 外部 RAM(R1)其指令操作过程示意图如图 3-2所示。再如: MOVX DPTR , A;外部 RAM(DPTR)(A)其指令操作过程示意图如图 3-3所示。片内 RAM30HR034HA30H 34H图 3-1 MOV R0, A间接寻址示意图片外RAM45HA10H 45H10HR
7、1片外RAM2000HDPTR30HA2000H 30H图 3-2 MOVX A, R1间接寻址示意图 图 3-3 MOVX DPTR, A间接寻址示意图例:( R1) 80H、( 80H) =33H,则执行指令MOV A, Ri后,累加器 A的内容为 33H而不是 80H 寄存器间接寻址方式示意图 立即寻址 指令中直接给出操作数的寻址方式。立即数用前面加有 #号的 8位或 16位数来表示,立即数只能是源操作数,不能作为目的操作数。例如:MOV A , # 60H ; A#60H MOV DPTR, # 3400H; DPTR#3400HMOV 30H , # 40H ; 30H单元 #40H
8、 上述三条指令执行完后,累加器 A中数据为立即数据 60H, DPTR寄存器中数据为 3400H,30H单元中数据为立即数 40H。立即寻址示意图 变址寻址 变址寻址只能对程序存储器中数据进行操作,寻址范围 64K。 以 DPTR或 PC作为基址寄存器, A作为变址寄存器 (其中的数看作无符号数 ),并以两者内容相加形成的 16位地址作为操作数地址。由于程序存储器是只读的,因此变址寻址只有读操作而无写操作,在指令符号上采用 MOVC的形式(如图 3-4所示)。例如: MOVC A, A+DPTR ; A (A)+(DPTR)又如, MOVC A, A+PC ; A (A)+(PC) 这条指令与
9、上条指令不同的是,基址寄存器是 PC。变址寻址的指令共 3条,并且均为一字节指令。另外一条是: JMP A+DPTR图 3-4 MOVC A, A+DPTR变址寻址示意图程序存储器2000HDPTR64H(10H)A2010H 64H10H 2000H例: MOVC A, A+DPTR变址寻址方式示意图位寻址 位寻址只能对有位地址的单元作位寻址操作。 位寻址其实是一种直接寻址方式,不过其地址是位地址。例如: SETB 10H ;将 10H位置 1如果 22H单元中存放着数据 40H, 22H单元的 D0位的位地址为 10H,执行上述指令后( 22H)=41H。又如: MOV 32H, C ;
10、32H (进位位 CY)ORL C , 32H ; CY(CY) (32H)相对寻址 以当前程序计数器 PC的内容为基础,加上指令给出的一字节补码数(偏移量 rel) 形成新的 PC值的寻址方式。 相对寻址用于修改 PC值,主要用于实现程序的分支转移。 转移的目的地址 =转移指令地址 +指令字节数 +rel例如, SJMP 08H ; PC(PC)+2+08H指令操作示意图如图 3-5所示。偏移量 rel是一带符号 8位二进数的补码数,范围为 -128 +127。实际书写程序时往往先用地址标号代替,在汇编为机器指令时再计算出来。程序存储器(2000H)200AHSJMP200AH08H 200
11、0H+208HPC2000H图 3-5 相对寻址示意图例 : 指出下列每一条指令的寻址方式。 MOV 2FH, #40H MOV A , R0 MOV DPTR, #2020H MOV 45H, P0 MOV A, R1 MOVC A, A+PC JC LOOP 中的源操作数为立即寻址,目的操作数为直接寻址。 中的源操作数为寄存器间接寻址,目的操作数为寄存器寻址。 中的源操作数为 16位立即寻址,目的操作数为寄存器寻址。 中的源操作数和目的操作数都是直接寻址。 中的源操作数和目的操作数都为寄存器寻址。 中的源操作数为基址加变址寻址,目的操作数为寄存器寻址。 中的操作数为相对寻址。例 : 判断下
12、列指令是否正确,若不正确请指出错误: MOV A , DPTR MOV DPTR, #03H MOV #80H, R7 MOV B, C 不正确。 A是 8位寄存器, DPTR为 16位寄存器,不匹配。 正确。 不正确。 #80H为立即数,不能作为目的地址。 不正确。 B为 8位字节寄存器, C为 1位位累加器,不匹配。 3.1.4 寻址方式 小结 片内外程序存储器的指令寻址只能使用变址寻址 内部数据存储器由于使用频繁,寻址方式多 外部数据存储器,只能使用 寄存器间接寻址 相对 寻址只用于程序转移 左边操作数称为目的操作数,右边操作数称为源操作数 目的 操作数只有寄存器寻址、直接寻址、寄存器间
13、接寻址和位寻址 4种方式巩固新课:1、 MCS 51系列指令有几种寻址方式?熟悉它们各自的特点及适用范围。3.2 指令分类 按指令功能, MCS-51指令系统分为数据传送 (29条 )、算术运算 (24条 )、逻辑运算及移位 (24条 )、控制转移 (17条 )、位操作(17条 )5大类。位操作指令又称布尔处理指令。3.2.1 指令描述符号介绍Rn 当前选中的寄存器区中的 8个工作寄存器R0 R7( n=0 7)Ri 当前选中的寄存器区中的 2个工作寄存器R0、 R1( i=0, 1)direct8 位的内部数据存储器单元中的地址#data 包含在指令中的 8位常数#data16 包含在指令中的 16位常数addr1616 位目的地址addr1111 位目的地址