第3章MCS-51指令系统3.1 简介.ppt

上传人:priceawful190 文档编号:388513 上传时间:2018-10-12 格式:PPT 页数:101 大小:739KB
下载 相关 举报
第3章MCS-51指令系统3.1 简介.ppt_第1页
第1页 / 共101页
第3章MCS-51指令系统3.1 简介.ppt_第2页
第2页 / 共101页
第3章MCS-51指令系统3.1 简介.ppt_第3页
第3页 / 共101页
第3章MCS-51指令系统3.1 简介.ppt_第4页
第4页 / 共101页
第3章MCS-51指令系统3.1 简介.ppt_第5页
第5页 / 共101页
亲,该文档总共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种寻址方式。,3.2

4、寻 址 方 式,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 ;将寄存器R4的内

5、容送到P1口CLR A ;将累加器A清0CPL 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所示。,实训3中,采用直接寻址的

6、指令如下:MOV P1,20H ;将20H单元的内容传送到P1口3. 立即数寻址立即数寻址是指将操作数直接写在指令中。例如,指令MOV A,#3AH执行的操作是将立即数3AH送到累加器A中,该指令就是立即数寻址。注意:立即数前面必须加“#”号,以区别立即数和直接地址。该指令的执行过程如图3.3所示。,图3.3 立即数寻址示意图,实训3中,采用立即数寻址的指令如下:MOV P1,#55H ;将立即数55H送P1口MOV 20H,#55 ;将立即数55H送20H 单元MOV A,#0F0H ;将立即数0F0H送累加器AMOV R4,#0FH ;将立即数0FH送寄存器R4中MOV R0,#20H ;

7、将立即数20H送寄存器R0口,AND A,#0FH ;累加器A的内容与立即数0FH进行逻辑与操作OR A,#0F0H ;累加器A的内容与立即数0F0H进行逻辑或操作MOV A,#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是变址寄存器。该类寻址方式主要用于查表操作。例如,指令MOVC A,A+DPTR

9、执行的操作是将累加器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中的两个区域:一是内部RAM的位寻址区,

11、地址范围是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条) 算术运算指令(24条)逻辑运算指令(24条)控制转

12、移指令(17条)位操作指令(17条),3.3.1 指令系统中的符号说明指令的书写必须遵守一定的规则,为了叙述方便,我们采用表3.2的约定。,表3.2 指令描述约定,3.3.2 数据传送类指令数据传送指令是MCS-51单片机汇编语言程序设计中使用最频繁的指令,包括内部 RAM、寄存器、外部RAM以及程序存储器之间的数据传送。数据传送操作是指把数据从源地址传送到目的地址,源地址内容不变。,数 据,目的地址 源地址,1. 内部8位数据传送指令(15条)内部8位数据传送指令共15条,主要用于MCS-51单片机内部RAM与寄存器之间的数据传送。指令基本格式: MOV ,1) 以累加器A为目的地址的传送指

13、令(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标志。 3) 以直接地址为目的地址的传送指令(5条),注意:以上传送指

14、令的结果不影响程序状态字寄存器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) MOV 40H,R0执行后(40H)=60H。 (5)

15、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,#2040HMOVX A,DPTR ;先将2040H单元的内容传送到累加器A中MOV DPTR,#2560HMOVX D

16、PTR,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 A,R0 ;将2AH单元的内容传送到累加器A中SWAP

17、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中的一块专用存储区,使用时一定先设堆栈指针,堆栈指针缺省为SP=07H。,

18、堆栈遵循后进先出的原则安排数据。 堆栈操作必须是字节操作,且只能直接寻址。将累加器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=31H,ACC (SP)PUSH DPH ;SP+1SP,SP=32H,

19、DPH (SP),PUSH DPL ;SP+1SP,SP=33H,DPL (SP) POP DPL ;(SP)DPL,SP-SP,SP=32H POP DPH ;(SP)DPH,SP-SP,SP=31H POP 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条),注意: 减法指令中没有不带借位的减法指令,所以在需要时,必须先将CY清0。 指令执行

20、结果均在累加器A中。 减法指令结果影响程序状态字寄存器PSW的CY、OV、AC和P标志。例3.6 编写计算12A4H+0FE7H的程序,将结果存入内部RAM 41H和40H单元,40H存低8位,41H存高8位。解:单片机指令系统中只提供了8位的加减法运算指令,两个16位数(双字节)相加可分为两步进行,第一步先对低8位相加,第二步再对高8位相加。,高8位 低8位 1 2 A 4 H A4H + E7H = 8BH 进位1+ 0 F E 7 H 12H + 0FH + 1 = 22H2 2 8 B进位 1 1 1 加法指令 ADDC ADD程序如下:MOV A,#0A4H ;被加数低8位A,ADD

21、 A,#0E7H ;加数低8位E7H与之相加,A=8BH,CY=1MOV 40H,A ;A(40H),存低8位结果MOV A,#12H ;被加数高8位AADDCA,#0FH ;加数高8位+A+CY,A=22HMOV 41H,A ;存高8位运算结果 3) BCD码调整指令(1条),注意: 结果影响程序状态字寄存器PSW的CY、OV、AC和P标志。 BCD(Binary Coded Decimal)码是用二进制形式表示十进制数,例如十进制数45,其BCD码形式为45H。BCD码只是一种表示形式,与其数值没有关系。BCD码用4位二进制码表示一位十进制数,这4位二进制数的权为8421,所以BCD码又称

22、为8421码。十进制数码09所对应的二进制码如表3.3所示。,表3.3 十进制数码与BCD码对应表,在表3.3中,用4位二进制数表示一个十进制数位,例如56D和87D的BCD码表示为0101 0110 (56D)1000 0111 (87D)0001 0100 0011 (143D), DAA指令将A中的二进制码自动调整为BCD码。DAA指令只能跟在ADD或ADDC加法指令后,不适用于减法。例3.7 说明指令MOV A,#05H和ADD A,#08H及DA A的执行结果。解:MOV A,#05H ;05HAADD A,#08H ;05H+08HA,A=0DHDA A ;自动调整为BCD码,A=

23、13H,4) 加1减1指令(9条),注意:以上指令结果通常不影响程序状态字寄存器PSW。例3.8 分别指出指令INC R0和INC R0的执行结果。设R0=30H,(30H)=00H。解: INC R0 ;R0+1=30H+1=31HR0,R0=31HINCR0 ;(R0)+1=(30H)+1(R0),(30H)=01H,R0中内容不变2. 乘、除法指令,1) 乘法指令(2条),注意:乘法结果影响程序状态字寄存器PSW的OV(积超过0FFH则置1,否则为0)和CY(总是清0)以及P标志。2) 除法指令(1条),注意: 除法结果影响程序状态字寄存器PSW的OV(除数为0则置1,否则为0)和CY(

24、总是清0)以及P标志。 当除数为0时结果不能确定。,3.3.4 逻辑运算及移位类指令 1. 逻辑运算指令(20条) 1) 逻辑与指令(6条),注意: 以上指令结果通常影响程序状态字寄存器PSW的P标志。 逻辑与指令通常用于将一个字节中的指定位清0,其它位不变。2) 逻辑或指令(6条),注意: 以上指令结果通常影响程序状态字寄存器PSW的P标志。 逻辑或指令通常用于将一个字节中的指定位置1,其余位不变。3) 逻辑异或指令(6条),注意: 以上指令结果通常影响程序状态字寄存器PSW的P标志。 “异或”原则是相同为0,不同为1。4) 累加器A清0和取反指令(2条),2. 循环移位指令(4条),注意:

25、执行带进位的循环移位指令之前,必须给CY置位或清0。,3.3.5 控制转移类指令控制转移类指令的本质是改变程序计数器PC的内容,从而改变程序的执行方向。控制转移指令分为:无条件转移指令、条件转移指令和调用/返回指令。1. 无条件转移指令(4条)1) 长转移指令(1条),注意: 该指令结果不影响程序状态字寄存器PSW。 该指令可以转移到64 KB程序存储器中的任意位置。2) 绝对转移指令 (1条),注意: 该指令结果不影响程序状态字寄存器PSW。 该指令转移范围是2 KB。例3.9 指令KWR: AJMP KWR1的执行结果。解:设KWR标号地址=1030H,KWR1标号地址=1100H,该指令

26、执行后PC首先加2变为1032H,然后由1032H的高5位和1100H的低11位拼装成新的PC值0001000100000000B,即程序从1100H开始执行。,3) 相对转移指令 (1条),注意: 该指令结果不影响程序状态字寄存器PSW。 该指令的转移范围是以本指令的下一条指令为中心的-128+127字节以内。 在实际应用中,LJMP、AJMP和SJMP后面的addr16、addr11或rel都是用标号来代替的,不一定写出它们的具体地址。,4) 间接寻址的无条件转移指令(1条),注意: 该指令结果不影响程序状态字寄存器PSW。 该指令通常用于散转(多分支)程序。2. 条件转移指令(8条),1

27、) 累加器A判0指令(2条),注意: 以上指令结果不影响程序状态字寄存器PSW。 转移范围与指令SJMP相同。,2) 比较转移指令(4条),注意: 以上指令结果影响程序状态字寄存器PSW的CY标志。 转移范围与SJMP指令相同。,3) 减1非零转移指令(2条),注意: DJNZ指令通常用于循环程序中控制循环次数。 转移范围与SJMP指令相同。 以上指令结果不影响程序状态字寄存器PSW。,3. 调用和返回指令(5条)1) 绝对调用指令(1条),注意: 该指令结果不影响程序状态字寄存器PSW。 调用范围与AJMP指令相同。,2) 长调用指令(1条),注意: 该指令结果不影响程序状态字寄存器PSW。

28、 调用范围与LJMP指令相同。,3) 返回指令(2条),注意:该指令结果不影响程序状态字寄存器PSW。,4) 空操作(1条),注意:该指令结果不影响程序状态字寄存器PSW。,3.3.6 位操作类指令位操作指令的操作数是“位”,其取值只能是0或1,故又称之为布尔操作指令。位操作指令的操作对象是片内RAM的位寻址区(即20H2FH)和特殊功能寄存器SFR中的11个可位寻址的寄存器。片内RAM的20H2FH共16个单元128个位,我们为这128个位的每个位均定义一个名称:00H7FH,称为位地址,如表3.4所示。对于特殊功能寄存器SFR中可位寻址的寄存器的每个位也有名称定义,如表3.5所示。,表3.

29、4 片内RAM位寻址区的位地址分布,位地址/位名称 字节地址 D7 D6 D5 D4 D3 D2 D1 D0 7F 7E 7D 7C 7B 7A 79 78 2FH 77 76 75 74 73 72 71 70 2EH 6F 6E 6D 6C 6B 6A 69 68 2DH 67 66 65 64 63 62 61 60 2CH 5F 5E 5D 5C 5B 5A 59 58 2BH 57 56 55 54 53 52 51 50 2AH 4F 4E 4D 4C 4B 4A 49 48 29H 47 46 45 44 43 42 41 40 28H,3F 3E 3D 3C 3B 3A 39

30、38 27H 37 36 35 34 33 32 31 30 26H 2F 2E 2D 2C 2B 2A 29 28 25H 27 26 25 24 23 22 21 20 24H 1F 1E 1D 1C 1B 1A 19 18 23H 17 16 15 14 13 12 11 10 22H 0F 0E 0D 0C 0B 0A 09 08 21H 07 06 05 04 03 02 01 00 20H,续表(2),表3.5 SFR中的位地址分布,SFR 位地址/位名称 字节 地址D7 D6 D5 D4 D3 D2 D1 D0 B F7H F6H F5H F4H F3H F2H F1H F0H

31、F0H ACC E7H E6H E5H E4H E3H E2H E1H E0H E0HACC.7 ACC.6 ACC.5 ACC.4 ACC.3 ACC.2 ACC.1 ACC.0 PSW D7H D6H D5H D4H D3H D2H D1H D0H D0HCY AC F0 RS1 RS0 OV F1 P,续表(2),IP BFH BEH BDH BCH BBH BAH B9H B8H B8H PS PT1 PX1 PT0 PX0 P3 B7H B6H B5H B4H B3H B2H B1H B0H B0HP3.7 P3.6 P3.5 P3.4 P3.3 P3.2 P3.1 P3.0 IE

32、AFH AEH ADH ACH ABH AAH A9H A8H A8HEA ES ET1 EX1 ET0 EX0 P2 A7H A6H A5H A4H A3H A2H A1H A0H A0HP2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0,续表(3),SCON 9FH 9EH 9DH 9CH 9BH 9AH 99H 98H 98HSM0 SM1 SM2 REN TB8 RB8 TI RI P1 97H 96H 95H 94H 93H 92H 91H 90H 90HP1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 TCON 8FH 8E

33、H 8DH 8CH 8BH 8AH 89H 88H 88HTF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 P0 87H 86H 85H 84H 83H 82H 81H 80H 80HP0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0,对于位寻址,有以下三种不同的写法。第一种是直接地址写法, 如 MOV C,0D2H,其中,0D2H表示PSW中的OV位地址。第二种是点操作符写法,如 MOV C , 0D0H.2。第三种是位名称写法,在指令格式中直接采用位定义名称,这种方式只适用于可以位寻址的SFR,如MOV C,OV。1. 位传送指令(2条),注意:位

34、传送指令的操作数中必须有一个是进位位C,不能在其它两个位之间直接传送。进位位C也称为位累加器。 2. 位置位和位清零指令(4条),3. 位运算指令(6条),注意: JBC与JB指令的区别是:前者转移后并把寻址位清0,后者只转移不清0寻址位。 以上指令结果不影响程序状态字寄存器PSW。,5. 判CY标志指令(2条),注意:以上结果不影响程序状态字寄存器PSW。例3.10 用位操作指令编程计算逻辑方程P1.7=ACC.0(B.0+P2.1)+ ,其中“+”表示逻辑或,“”表示逻辑与。,解: 程序段如下: MOV C,B.0 ;B.0C ORL C,P2.1 ;C或P2.1C ANL C,ACC.0

35、 ;C与ACC.0C,即ACC.0(B.0+P2.1) C ORL C,/P3.2 ;C 或/P3.2, 即ACC.0(B.0+P2.1)+ C MOV P1.7,C ;C P1.7,3.3.7 常用伪指令单片机汇编语言程序设计中,除了使用指令系统规定的指令外,还要用到一些伪指令。伪指令又称指示性指令,具有和指令类似的形式,但汇编时伪指令并不产生可执行的目标代码,只是对汇编过程进行某种控制或提供某些汇编信息。下面对常用的伪指令作一简单介绍。,1. 定位伪指令ORG格式:标号: ORG 地址表达式功能:规定程序块或数据块存放的起始位置。例如:ORG 1000H ;表示下面指令MOV A,#20H

36、存放于1000H开始的单元MOV A,#20H2. 定义字节数据伪指令DB格式:标号: DB 字节数据表功能:字节数据表可以是多个字节数据、字符串或表达式,它表示将字节数据表中的数据从左到右依次存放在指定地址单元。,例如: ORG 1000HTAB:DB 2BH,0A0H,A,2*4 ;表示从1000H单元开始的地方存放数据2BH,0A0H,;41H(字母A的ASCII码),08H3. 定义字数据伪指令DW格式:标号: DW 字数据表功能:与DB类似,但DW定义的数据项为字,包括两个字节,存放时高位在前,低位在后。例如:ORG 1000HDATA:DW 324AH,3CH ;表示从1000H单

37、元开始的地方存放数据32H,4AH,00H,;3CH(3CH以字的形式表示为003CH),4. 定义空间伪指令DS格式:标号: DS 表达式功能:从指定的地址开始,保留多少个存储单元作为备用的空间。例如: ORG 1000HBUF:DS 50TAB:DB 22H ;表示从1000H开始的地方预留50(1000H1031H)个存储字节空间,;22H存放在1032H单元,5. 符号定义伪指令EQU或=格式:符号名 EQU 表达式 或 符号名=表达式功能:将表达式的值或某个特定汇编符号定义为一个指定的符号名,只能定义单字节数据,并且必须遵循先定义后使用的原则,因此该语句通常放在源程序的开头部分。例如

38、: LEN=10SUM EQU 21HMOV A,#LEN ;执行指令后,累加器A中的值为0AH,6. 数据赋值伪指令DATA格式:符号名 DATA 表达式功能:将表达式的值或某个特定汇编符号定义为一个指定的符号名,只能定义单字节数据,但可以先使用后定义,因此用它定义数据可以放在程序末尾进行数据定义。例如: MOV A,#LENLEN DATA 10尽管LEN的引用在定义之前,但汇编语言系统仍可以知道A的值是0AH。,7. 数据地址赋值伪指令XDATA格式:符号名 XDATA 表达式功能:将表达式的值或某个特定汇编符号定义为一个指定的符号名,可以先使用后定义,并且用于双字节数据定义。例如:DE

39、LAY XDATA 0356HLCALL DELAY ;执行指令后,程序转到0356H单元执行8. 汇编结束伪指令END格式:标号: END 功能:汇编语言源程序结束标志,用于整个汇编语言程序的末尾处。,ORG 0000H MAIN: MOV P1,#00HACALL DELAYMOV P1,#0FFHACALL DELAYMOV P1,#55HACALL DELAYMOV P1,#0AAHACALL DELAYAJMP MAIN,DELAY: MOV R6,#250 DEL1: MOV R7,#200 DEL2: DJNZ R7,DEL2 DJNZ R6,DEL1 RET END,ORG 0000H MAIN: MOV P1,#01H ACALL DELAY MOV P1,#02H ACALL DELAY MOV P1,#04H ACALL DELAY MOV P1,#08H ACALL DELAY MOV P1,#10H ACALL DELAY AJMP MAIN,ORG 0000H MAIN: MOV A,#01H LOOP: MOV P1,A ACALL DELAY RL A AJMP LOOP,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 教学课件 > 大学教育

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1