第3章 MCS-51指令系统.ppt
《第3章 MCS-51指令系统.ppt》由会员分享,可在线阅读,更多相关《第3章 MCS-51指令系统.ppt(101页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第3章 MCS-51指令系统3.1 简 介,3.1.1 指令概述一台微机所具有的所有指令的集合,就构成了指令系统。指令系统越丰富,说明CPU的功能越强。例如,Z80 CPU中,没有乘法和除法指令,乘法和除法运算必须用软件来实现,因此执行速度相对较慢;而MCS-51单片机提供了乘法和除法指令,实现乘法和除法运算时就要快得多。,一台微机能执行什么样的操作,是在微机设计时确定的。一条指令对应着一种基本操作。由于计算机只能识别二进制数,所以指令也必须用二进制形式来表示,称为指令的机器码或机器指令。 MCS-51单片机指令系统共有33种功能,42种助记符,111条指令。,3.1.2 指令格式 在实训中看
2、到,不同指令翻译成机器码后字节数也不一定相同。按照机器码个数,指令可以分为以下三种:,MCS-51单片机指令系统包括49条单字节指令、46条双字节指令和16条三字节指令。 采用助记符表示的汇编语言指令格式如下:,标号是程序员根据编程需要给指令设定的符号地址,可有可无;标号由18个字符组成,第一个字符必须是英文字,不能是数字或其它符号;标号后必须用冒号。,操作码表示指令的操作种类,如MOV表示数据传送操作,ADD表示加法操作等。 操作数或操作数地址表示参加运算的数据或数据的有效地址。操作数一般有以下几种形式:没有操作数项,操作数隐含在操作码中,如RET指令;只有一个操作数,如CPL A指令;有两
3、个操作数,如MOV A,#00H指令,操作数之间以逗号相隔;有三个操作数,如CJNE A,#00H,NEXT指令,操作数之间也以逗号相隔。 注释是对指令的解释说明,用以提高程序的可读性;注释前必须加分号。,操作数是指令的重要组成部分,指出了参与操作的数据或数据的地址。寻找操作数地址的方式称为寻址方式。一条指令采用什么样的寻址方式,是由指令的功能决定的。寻址方式越多,指令功能就越强。 MCS-51指令系统共使用了7种寻址方式,包括寄存器寻址、直接寻址、立即数寻址、寄存器间接寻址、变址寻址、相对寻址和位寻址等。实训中,我们初步接触了寄存器寻址、立即数寻址、直接寻址和寄存器间接寻址等4种寻址方式。,
4、3.2 寻 址 方 式,1. 寄存器寻址 寄存器寻址是指将操作数存放于寄存器中,寄存器包括工作寄存器R0R7、累加器A、通用寄存器B、地址寄存器DPTR等。例如,指令MOV R1,A的操作是把累加器A中的数据传送到寄存器R1中,其操作数存放在累加器A中,所以寻址方式为寄存器寻址。 如果程序状态寄存器PSW的RS1RS0=01(选中第二组工作寄存器,对应地址为08H0FH),设累加器A的内容为20H,则执行MOV R1,A指令后,内部RAM 09H单元的值就变为20H,如图3.1所示。,实训3中,采用寄存器寻址的指令如下: MOV P1,A;将累加器A的内容送 到P1口 MOV P1,R4 ;将
5、寄存器R4的内容送到P1口 CLR A;将累加器A清0 CPL A;将累加器A中的内容取反 RL A;将累加器A的内容循环左移,图3.1 寄存器寻址示意图,图3.2 直接寻址示意图,2. 直接寻址 直接寻址是指把存放操作数的内存单元的地址直接写在指令中。在MCS-51单片机中,可以直接寻址的存储器主要有内部RAM区和特殊功能寄存器SFR区。 例如,指令MOV A,3AH执行的操作是将内部RAM 中地址为3AH的单元内容传送到累加器A中,其操作数3AH就是存放数据的单元地址,因此该指令是直接寻址。 设内部RAM 3AH单元的内容是88H,那么指令MOV A,3AH的执行过程如图3.2所示。,实训
6、3中,采用直接寻址的指令如下: MOV P1,20H ;将20H单元的内容传送到P1口 3. 立即数寻址 立即数寻址是指将操作数直接写在指令中。 例如,指令MOV A,#3AH执行的操作是将立即数3AH送到累加器A中,该指令就是立即数寻址。注意:立即数前面必须加“#”号,以区别立即数和直接地址。该指令的执行过程如图3.3所示。,图3.3 立即数寻址示意图,实训3中,采用立即数寻址的指令如下: MOVP1,#55H;将立即数55H送P1口 MOV20H,#55;将立即数55H送20H 单元 MOVA,#0F0H;将立即数0F0H送累加器A MOVR4,#0FH;将立即数0FH送寄存器R4中 MO
7、VR0,#20H;将立即数20H送寄存器R0口,AND A,#0FH;累加器A的内容与立即数0FH进行逻辑与操作 OR A,#0F0H;累加器A的内容与立即数0F0H进行逻辑或操作 MOVA,#01H ;将立即数01H送累加器A中 MOV A,#55H ;将立即数55H送累加器A中,4. 寄存器间接寻址 寄存器间接寻址是指将存放操作数的内存单元的地址放在寄存器中,指令中只给出该寄存器。执行指令时,首先根据寄存器的内容,找到所需要的操作数地址,再由该地址找到操作数并完成相应操作。 在MCS-51指令系统中,用于寄存器间接寻址的寄存器有R0、R1和DPTR,称为寄存器间接寻址寄存器。 注意:间接寻
8、址寄存器前面必须加上符号“”。例如,指令MOV A,R0执行的操作是将R0的内容作为内部RAM的地址,再将该地址单元中的内容取出来送到累加器A中。,设R0=3AH,内部RAM 3AH中的值是65H,则指令MOV A,R0的执行结果是累加器A的值为65H,该指令的执行过程如图3.4所示。 实训3中,采用寄存器间接寻址的指令如下: MOV P1,R0;将R0所指的存 储单元的内容送P1口,图3.4 寄存器间接寻址示意图,5. 变址寻址 变址寻址是指将基址寄存器与变址寄存器的内容相加,结果作为操作数的地址。DPTR或PC是基址寄存器,累加器A是变址寄存器。该类寻址方式主要用于查表操作。 例如,指令M
9、OVC A,A+DPTR执行的操作是将累加器A和基址寄存器DPTR的内容相加,相加结果作为操作数存放的地址,再将操作数取出来送到累加器A中。 设累加器A=02H,DPTR=0300H,外部ROM中,0302H单元的内容是55H,则指令MOVC A,A+DPTR的执行结果是累加器A的内容为55H。该指令的执行过程如图3.5所示。,图3.5 变址寻址示意图,6. 相对寻址 相对寻址是指程序计数器PC的当前内容与指令中的操作数相加,其结果作为跳转指令的转移地址(也称目的地址)。该类寻址方式主要用于跳转指令。 例如,指令SJMP 54H执行的操作是将PC当前的内容与54H相加,结果再送回PC中,成为下
10、一条将要执行指令的地址。 设指令SJMP 54H的机器码80H 54H存放在2000H处,当执行到该指令时,先从2000H和2001H单元取出指令,PC自动变为2002H;再把PC的内容与操作数54H相加,形成目标地址2056H,再送回PC,使得程序跳转到2056H单元继续执行。该指令的执行过程如图3.6所示。,图3.6 相对寻址示意图,7. 位寻址 位寻址是指按位进行的寻址操作,而上述介绍的指令都是按字节进行的寻址操作。MCS-51单片机中,操作数不仅可以按字节为单位进行操作,也可以按位进行操作。当我们把某一位作为操作数时,这个操作数的地址称为位地址。位寻址区包括专门安排在内部RAM中的两个
11、区域:一是内部RAM的位寻址区,地址范围是20H2FH,共16个RAM单元,位地址为00H7FH;二是特殊功能寄存器SFR中有11个寄存器可以位寻址,参见有关章节中位地址定义。,例如,指令SETB 3DH执行的操作是将内部RAM位寻址区中的3DH位置1。 设内部RAM 27H单元的内容是00H,执行SETB 3DH后,由于3DH对应内部RAM 27H的第5位,因此该位变为1,也就是27H单元的内容变为20H。该指令的执行过程如图3.7所示。,图3.7 位寻址示意图,3.3 指 令 系 统 MCS-51单片机指令系统包括111条指令,按功能可以划分为以下5类 数据传送指令(29条) 算术运算指令
12、(24条) 逻辑运算指令(24条) 控制转移指令(17条) 位操作指令(17条),3.3.1 指令系统中的符号说明 指令的书写必须遵守一定的规则,为了叙述方便,我们采用表3.2的约定。,表3.2 指令描述约定,3.3.2 数据传送类指令 数据传送指令是MCS-51单片机汇编语言程序设计中使用最频繁的指令,包括内部 RAM、寄存器、外部RAM以及程序存储器之间的数据传送。 数据传送操作是指把数据从源地址传送到目的地址,源地址内容不变。,数 据,目的地址 源地址,1. 内部8位数据传送指令(15条) 内部8位数据传送指令共15条,主要用于MCS-51单片机内部RAM与寄存器之间的数据传送。指令基本
13、格式: MOV , 1) 以累加器A为目的地址的传送指令(4条),注意:以上传送指令的结果均影响程序状态字寄存器PSW的P标志。 例3.1 已知相应单元的内容如下,请指出每条指令执行后相应单元内容的变化。,(1) MOV A,#20H (2) MOV A,40H (3) MOV A,R0 (4) MOV A,R0解:(1) MOV A,#20H执行后A=20H。 (2) MOV A,40H执行后A=30H。 (3) MOV A,R0执行后A=50H。 (4) MOV A,R0执行后A=10H。,2) 以Rn为目的地址的传送指令(3条),注意:以上传送指令的结果不影响程序状态字寄存器PSW标志。
14、3) 以直接地址为目的地址的传送指令(5条),注意:以上传送指令的结果不影响程序状态字寄存器PSW标志。 4) 以寄存器间接地址为目的地址的传送指令(3条),注意:以上传送指令的结果不影响程序状态字寄存器PSW标志。 例3.2 已知相应单元的内容如下,请指出下列指令执行后各单元内容相应的变化。,(1) MOV A,R6 (2) MOV R6,70H(3) MOV 70H,50H(4) MOV 40H,R0(5) MOV R1,#88H解:(1) MOV A,R6执行后A=30H。(2) MOV R6,70H执行后R6=40H。(3) MOV 70H,50H执行后(70H)=60H。(4) MO
15、V 40H,R0执行后(40H)=60H。(5) MOV R1,#88H执行后(66H)=88H。,2. 16位 数据传送指令(1条),注意:以上指令结果不影响程序状态字寄存器PSW标志。 3. 外部数据传送指令(4条),注意: 外部RAM只能通过累加器A进行数据传送。 累加器A与外部RAM之间传送数据时只能间接寻址方式,间接寻址寄存器为DPTR,R0,R1。 以上传送指令结果通常影响程序状态字寄存器PSW的P标志。 例3.3 把外部数据存储器2040H单元中的数据传送到外部数据存储器2560H单元中去。,解:MOV DPTR,#2040H MOVX A,DPTR;先将2040H单元的内容传送
16、到累加器A中 MOV DPTR,#2560H MOVX DPTR,A;再将累加器A中的内容传送到2560H单元中,4. 交换和查表类指令(9条)1) 字节交换指令(3条),注意:以上指令结果影响程序状态字寄存器PSW的P标志。2) 半字节交换指令(1条),注意:上面指令结果影响程序状态字寄存器PSW的P标志。,3) 累加器A中高4位和低4位交换(1条),注意:上面指令结果不影响程序状态字寄存器PSW标志。 例3.4 设内部数据存储区2AH、2BH单元中连续存放有4个BCD码(1个BCD码占,2AH 2BH 2AH 2BH,解:MOV R0,#2AH ;将立即数2AH传送到寄存器R0中 MOV
17、A,R0 ;将2AH单元的内容传送到累加器A中 SWAP A ;将累加器A中的高4位与 低4位交换 MOV R0,A ;将累加器A的内容传送到2AH单元中 MOV R1,#2BH,MOV A,R1 ;将2BH单元的内容传送到累加器A中 SWAP A ;将累加器A中的高4位与低4位交换 XCH A,R0 ;将累加器A中的内容与2AH单元的内容交换 MOV R1,A ;累加器A的内容传送到2BH单元,4) 查表指令(2条),注意: 以上指令结果影响程序状态字寄存器PSW的P标志。 查表指令用于查找存放在程序存储器中的表格。,5) 堆栈操作指令(2条),注意: 堆栈是用户自己设定的内部RAM中的一块
18、专用存储区,使用时一定先设堆栈指针,堆栈指针缺省为SP=07H。, 堆栈遵循后进先出的原则安排数据。 堆栈操作必须是字节操作,且只能直接寻址。将累加器A入栈、出栈指令可以写成: PUSH/POP ACC 或 PUSH/POP 0E0H而不能写成: PUSH/POP A 堆栈通常用于临时保护数据及子程序调用时保护现场和恢复现场。 以上指令结果不影响程序状态字寄存器PSW标志。,例3.5 设堆栈指针为30H,把累加器A和DPTR中的内容压入,然后根据需要再把它们弹出,编写实现该功能的程序段。 解:MOV SP,#30H ;设置堆栈指针,SP=30H为栈底地址 PUSH ACC ;SP+1SP,SP
19、=31H,ACC (SP) PUSH DPH ;SP+1SP,SP=32H,DPH (SP),PUSH DPL ;SP+1SP,SP=33H,DPL (SP)POP DPL ;(SP)DPL,SP-SP,SP=32HPOP DPH ;(SP)DPH,SP-SP,SP=31HPOP ACC ;(SP)ACC,SP-SP,SP=30H,3.3.3 算术运算类指令 1. 加、减法指令(22条) 1) 加法指令(8条),注意: ADD与ADDC的区别为是否加进位位CY。 指令执行结果均在累加器A中。 以上指令结果均影响程序状态字寄存器PSW的CY、OV、AC和P标志。 2) 减法指令(4条),注意:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- mcs 51 指令系统
限制150内