3 MCS-51指令系统与汇编语言程序设计.ppt_第1页
3 MCS-51指令系统与汇编语言程序设计.ppt_第2页
3 MCS-51指令系统与汇编语言程序设计.ppt_第3页
3 MCS-51指令系统与汇编语言程序设计.ppt_第4页
3 MCS-51指令系统与汇编语言程序设计.ppt_第5页
已阅读5页,还剩117页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1,3 指令系统与汇编语言程序设计, 概述 寻址方式 数据传送指令 算术运算指令 逻辑操作指令 控制转移指令 位操作指令,2, 概述 基本概念 指令格式 80C51指令系统分类 程序设计基础,概述,3,一、基本概念 1.指令:指挥计算机(CPU)完成各种操作的命令。 2.机器语言指令:指令的二进制表示形式,是指令在程序存储器中的存放形式,是CPU可直接读取、识别和执行的唯一形式。 3.汇编语言指令(符号指令、指令助记符) * 汇编语言适合于对程序的空间和时间要求很高的场合。在很多需要直接控制硬件的应用场合,则更是非用汇编语言不可。,概述-基本概念,4,4.汇编语言(源)程序:用汇编语言指令书写

2、的程序。 【例】用MCS-51指令系统表示“10+6”运算的汇编语言程序为: MOV A,#10 ;将数10送入A中 ADD A,#6 ;常数6与A中内容相加,结果 ;存入A SJMP $ ;结束,源程序 (汇编语言程序),汇编程序 (把源程序翻译成目标程序),目标程序 (机器语言程序),概述-基本概念,5,【例】用MCS-51指令系统表示“10+6”运算的汇编语言源程序和机器语言目标程序为: 目标程序 汇编语言源程序 注释 74 0A MOV A,#10 ;将数10送入A中 24 06 ADD A,#6 ;常数6与A中内容 ;相加,结果存入A 80 FE SJMP $ ;结束,概述-基本概念

3、,6,二、 指令格式,【例】 操作码 操作数 ;注释 MOV A,#30H ;将数30H送入A中 MOV A,30H ;将片内RAM30H单元内容送入A INC A ;将A的内容加1 NOP ;空操作 其中:操作码表示指令的功能(进行什么操作) 操作数说明提供参与操作的数或数所在单元的地址,概述-指令格式,7,三、89C51指令系统分类,1.按照指令的功能划分,8051指令可分为以下五类: 数据传送类指令(29条) 算术运算类指令(24条) 逻辑运算类指令(24条) 控制转移类指令(17条) 位操作类指令(17条) 2.按照指令机器码字节数可分为: 单字节指令(49条) 双字节指令(45条)

4、三字节指令(17条) 3.按照指令的执行时间可分为: 单周期指令(64条) 双周期指令(45条) 四周期指令(2条,乘、除法指令),概述-指令系统分类,8,四、程序设计基础,1.汇编语言程序的书写格式 【例】将片内数据存储器3AH单元内容与3BH单元内容互换。 标号 操作码 操作数 注释 ORG0000H LJMPST ORG 0030H ;程序存放的起始地址 ST:MOV A,3AH ;3AH的内容暂存于A MOV 3AH,3BH MOV 3BH,A SJMP $ END ;汇编结束 其中:ORG、END为伪指令。 标号:指令的符号地址。,概述-程序设计基础,9,目标程序 源程序 地址 机器

5、码 ORG0000H 0000H 02 00 30LJMP ST ORG 0030H 0030H E5 3A ST:MOV A,3AH 0032H 85 3B 3AMOV 3AH,3BH 0035H F5 3B MOV 3BH,A 0037H 80 FE SJMP $ END,2. 源程序与目标程序,10,3.目标程序在存储器中的存储形式,LJMP 0030H,11,4.程序的基本结构 顺序结构 分支结构 循环结构 子程序,概述-程序设计基础,12,概述-程序设计基础,5.程序流程图,13,【例】编制实现符号函数的程序,流程图如下:,概述-程序设计基础,14,寻址方式 寻址方式就是在指令中说明

6、操作数所在地址的方法。 立即寻址 直接寻址 寄存器寻址 寄存器间接寻址 基址寄存器加变址寄存器间接寻址 (变址寻址) 位寻址 相对寻址,寻址方式,15,1. 立即寻址方式:指令中使用常数来参与指令操作,由于这些常数能立即传送或赋值,故称为立即数(data/data16)。 【例】 MOV A,#40H ;立即数40H赋给A MOV DPTR,#2100H ;立即数2100H赋给DPTR MOV A,#100 ;A=64H,寻址方式-立即寻址,16,2.直接寻址:指令中直接给出参加操作的数所在存储单元的地址(direct)。 【例】MOV A,50H ;将片内数据存储器50H ;单元的内容送入A

7、 MOV B,A ;A的内容送入B寄存器 访问的空间有片内RAM的低128字节和特殊功能寄存器SFR,SFR采用直接寻址时,指令中用寄存器符号表示。 【例】MOV A,B 相当于 MOV A,0F0H,寻址方式-直接寻址,17,3.寄存器寻址:指令中给出存放参加操作的数的寄存器。 寄存器包括R0R7,A,AB,DPTR。 【例】 MOV A ,R7 ;将R7内容送入A DIV AB ;A内容除以B寄存器内容,寻址方式-寄存器寻址,18,4.寄存器间接寻址:由指令给出某一个寄存器内容作为操作数的地址,该地址所指单元内容为参加操作的数。访问片内数据存储器,间接寻址寄存器可用R0、R1,访问片外数据

8、存储器可用DPTR。 【例】MOV A,R0 ;将R0所指单元内容送入A,寻址方式-寄存器间接寻址,19,5.基址寄存器加变址寄存器间接寻址方式 (变址寻址方式) 6. 位寻址方式 7. 相对寻址方式(与转移地址有关的寻址),寻址方式,20,寻址方式-寻址空间,21, 数据传送指令 内部数据传送指令 外部数据传送指令 查表指令 堆栈操作指令 交换指令,数据传送指令,22,一、内部数据传送指令,数据传送指令-内部数据传送指令,23,数据传送指令-内部数据传送指令,24,【例】已知R0=30H,片内数据存储器(30H)=50H,(40H)=60H,执行下列各指令后,A中内容是多少? MOV A,R

9、0 ;A=30H MOV A,R0 ;A =50H MOV A,40H ;A =60H MOV A,#40H ;A =40H,数据传送指令-内部数据传送指令,25,【例】分析执行下列程序段后,各相关存储单元和寄存器内容有何变化? MOV R0,#40H ;R0= MOV A,R0 ;A= MOV 30H,A ;(30H)= MOV 20H,30H ;(20H)= MOV R0,#30H ;(40H)= MOV 20H,R0 ;(20H)= MOV B,#10H ;B= MOV DPL,20H ;DPL= MOV DPH,B ;DPH=,40H,40H,40H,40H,30H,30H,30H,1

10、0H,10H,数据传送指令-内部数据传送指令,26,指令图解,数据传送指令-内部数据传送指令,27,二、外部数据传送指令,特点: 只能与A之间进行数据传送 只能采用寄存器间接寻址方式,数据传送指令-外部数据传送指令,28,【例】编程将片外数据存储器2040H单元的内容传送到3000H单元。 ORG 0030H MOV DPTR,#2040H MOVX A,DPTR ;2040H单元内容送入A MOV DPTR,#3000H MOVX DPTR,A ;A的内容送入3000H单元 LP: SJMP LP,数据传送指令-外部数据传送指令,29,三、查表指令, 程序存储器主要用来存放程序,也可存放表格

11、常数,要取出表格常数时,可以采用查表指令。 特点 只能将表格常数读入A中 表格常数采用变址寻址方式,数据传送指令-查表指令,30, 指令功能说明 【例】已知DPTR=2000H,A=E0H,则执行 MOVC A,A+DPTR过程如下图所示:,数据传送指令-查表指令,31,【例】用查表方法求片内数据存储器30H单元内容(09)的平方值,并存入31H单元。 分析:假设先将09的平方 值连续存放在程序存储器 0E00H开始的单元中。则 每个平方值存放的单元地 址=表格首地址+偏移量 (索引值),而该索引值 即为待求平方值的数。,数据传送指令-查表指令应用,32,数据传送指令-查表指令应用,方法1:用

12、 MOVC A,A+DPTR 指令 TB1: MOV A,30H ;取数 MOV DPTR,#TAB1 ;表格首地址送入DPTR MOVC A,A+DPTR ;查表取平方值 MOV 31H,A ;存结果 RET ORG0E00H TAB1: DB 0,1,4,9,16,25 DB 36,49,64,81 ;平方值表 DB-定义字节伪指令 格式: DB 8位二进制数表,33,方法2:用MOVC A,A+PC 指令 ORG 0100H TB2: MOV A,30H ;取数 ADD A,#TAB2-NPC ;加偏移量 MOVC A,A+PC ;查表 NPC: MOV 31H,A ;存结果 RET T

13、AB2:DB 0,1,4,9,16,25 DB 36,49,64,81 ;平方值表,数据传送指令-查表指令应用,34,*为什么要加上偏移量? ORG 0100H 0100H E5 30 TB2: MOV A,30H ;取数 0102H 24 04 ADD A,#04H ;加偏移量 0104H 83 MOVC A,A+PC ;查表 0105H F5 32 NPC:MOV 31H,A ;存结果 0107H 80 FE RET 0109H 00 TAB2:DB 0,1,4,9,16,25 010AH 01 DB 36,49,64,81 ;平方值表 偏移量=TAB-NPC=0109H-0105H=04

14、H,数据传送指令-查表指令应用,35,【例】设有一个巡回检测报警装置,需对16路输入进行检测,每路有一最大允许值,为双字节数。运行时,需根据测量的路数,找出每路的最大允许值。看输入值是否大于最大允许值,如大于就报警。根据上述要求,编一个查表程序。取路数为x(015),y为最大允许值,放在表格中。设进入查表程序前,路数x已放于40H中,查表后最大值y放于50H、51H中。本例中的x为单字节数,y为双字节数。 其中x与y对应关系如下:,数据传送指令-查表指令应用,36,假设将y值存入0F00H开始的程序存储器。,则每个y值第一字节所在单元地址=表格首地址+2x。,数据传送指令-查表指令应用,37,

15、TB3:MOV A,40H ;取x值 ADD A,40H ;求2x MOV R5,A ;暂存 MOV DPTR,#TAB3 ;表格首地址 MOVC A,A+DPTR ;取高字节 MOV 50H,A MOV A,R5 INC A ;2X+1 MOVC A,A+DPTR ;取低字节 MOV 51H,A RET ORG 0F00H TAB3:DW 05F0H,0E89H,0A695H DW 16EFH,33E4H,6CA0H *DW-定义字伪指令,38,【例】在一个以AT89C51单片机为核心的温度控制器中,温度传感器输出的电压与温度为非线性关系,传感器输出的电压已由A/D转换为10位二进制数。测得

16、的不同温度下的电压值数据构成一个表,表中温度值为y(双字节无符号数),x(双字节无符号数)为电压值数据。设测得的电压值x放入41H40H中,根据电压值x,查找对应的温度值y,仍放入43H42H中。,数据传送指令-查表指令应用,39,TB4: MOV DPTR,#TAB4 MOV A,40H CLR C RLC A MOV 40H,A XCH A,41H RLC A XCH A,41H ;(40H) x 2 ;(41H40H) ADD A,DPL MOV DPL,A MOV A,DPH ADDC A,41H MOV DPH,A ;(41H40H)+(DPTR)(DPTR),40,CLR A MO

17、VC A,A+DPTR;查第一字节 MOV 42H,A;第一字节存入R2中 CLR A INC DPTR MOVC A,A+DPTR;查第二字节 MOV 43H,A ;第二字节存入R3中 RET ORG0800H TAB4: DW;温度值表 *使用指令“MOVC A,A+DPTR”,表TAB4可放入64KB程序存储器空间的任何位置,此外表格的长度可大于256B。,数据传送指令-查表指令应用,41,四、堆栈操作指令,1. 入栈指令 PUSH direct ;SP (SP)+1 ;(SP) (direct) SP先加1,数据进栈 2.出栈指令 POP direct ;direct (SP) ;SP

18、 (SP)-1 数据出栈,SP减1,数据传送指令-堆栈操作指令,42,【例】DPTR=1234H,SP=70H,分析执行下面指令以后的结果。 PUSH DPL PUSH DPH POP ACC A= ;SP= 。,数据传送指令-堆栈操作指令,12H 71H,43,【例】A=20H,B=30H,分析执行下面指令以后的结果。 PUSH ACC PUSH B POP ACC POP B,*保护现场 PUSH ACC PUSH B POP ACC POP B RET,数据传送指令-堆栈操作指令应用,44,数据传送指令-交换指令,五、交换指令,45,【例】已知A=34H,R1=50H,片内数据存储器(5

19、0H)=56H,分析执行下列指令的结果。 XCH A,R1 ;A= ,R1= XCH A,R1 ;A = ,(50H)= XCHD A,R1;A = ,(50H)= SWAP A ;A =,50H,34H,56H,34H,36H,54H,43H,应用,数据传送指令-数据交换指令举例,46,小结:不同存储空间的操作,MOV指令,47, 算术运算指令 加法指令 带进位加法指令 加1指令 十进制数调整指令 带借位减法指令 减1指令 乘除指令,算术运算指令,48,程序状态字寄存器PSW PSW是一个8位寄存器,用来存放运算结果的一些特征信息。 CY:进位标志。在进行加法(或减法)运算时,若运算结果最高

20、位有进位(或借位)时CY=1,否则CY=0。 AC:半进位标志。在进行加法(或减法)运算时,若低半字节向高半字节有进位(或借位)时AC=1,否则AC=0。 OV:溢出标志。两个带符号数运算,若结果超出-128+127时为溢出,OV=1,否则OV=0。 P:奇偶标志。若A中内容“1”的个数为奇数个时P=1,否则P=0。,算术运算指令,49,RS1、RS0:工作寄存器组选择位。用于选择当前工作寄存器组。 F0:用户标志位。,算术运算指令,50,【例】 其中CS为D6向D7的进位标志。 分析:1.若将数据当作无符号数进行运算,则CY=1表示结果大于255。 2.若将数据当作带符号数进行运算,则OV=

21、1表示溢出,结果出错;OV=0,结果正确。,0 1 0 1 0 1 0 0 +)0 1 1 0 1 0 0 1 1 0 1 1 1 1 0 1 CY=0 AC=0 P=0 OV=CSCY=1,1 1 0 0 1 0 1 1 +)1 1 1 1 1 0 0 0 1 1 1 0 0 0 0 1 1 CY=1 AC=1 P=0 OV=CS CY=0,算术运算指令,51,1. 加法指令,算术运算指令-加法指令,52,【例】假设A=C3H,R0=AAH,求执行指令 ADD A,R0的结果。,1 1 0 0 0 0 1 1 B +)1 0 1 0 1 0 1 0 B 1 0 1 1 0 1 1 0 1 B

22、,结果: A=6DH,CY=1,AC=0,OV=1,P=1,算术运算指令-加法指令应用,53,2. 带进位加法指令,带进位加法指令常用于多字节数相加。,算术运算指令-带进位加法指令,54,【例】片内RAM 30H,31H和40H,41H分别存放一个两字节无符号数,编程将两数相加,并将结果存入30H开始的单元。 ORG 0030H MOV A,30H ;取第一数低字节 ADD A,40H ;加上第二数低字节 MOV 30H,A ;存结果低字节 MOV A,31H ;取第一数高字节 ADDC A,41H ;加上第二数高字节及进位 MOV 31H,A MOV A,#0 ADDC A,#0 ;高字节相

23、加的进位 MOV 32H,A SJMP $,算术运算指令-带进位加法指令应用,55,3. 加1指令, 加1指令仅操作数为A时会影响P标志,对其他标志均无影响。,算术运算指令-加1指令,56,4. 十进制调整指令,二-十进制编码(BCD码) BCD码是二进制编码的十进制数,用四位二进制数给09这10个数字编码,既考虑计算机的使用特点,又顾及人们使用十进制数的习惯。 例:94=1001 0100BCD 反之: 1 0010 0101BCD=125 BCD码与二进制码、十六进制码的互换均先转换为十进制数。 BCD码的运算,算术运算指令-十进制调整指令,57,【例】(1) (2),0 0 1 1 0

24、1 0 1BCD 35 +) 0 1 0 0 0 0 0 1BCD 41 0 1 1 1 0 1 1 0BCD 76,0 1 0 1 0 1 1 0BCD 56 +)0 0 1 1 1 0 0 0BCD 38 1 0 0 0 1 1 1 0非BCD码,必须进行调整。,算术运算指令-十进制调整指令,58,十进制调整规则 若结果低4位大于9或AC=1, 则补加06H调整。 若结果高4位大于9或CY=1, 则补加60H调整。 【例】,0 1 0 1 0 1 1 0BCD 56 +) 0 0 1 1 1 0 0 0BCD 38 1 0 0 0 1 1 1 0非BCD码 +) 0 0 0 0 0 1 1

25、 0 1 0 0 1 0 1 0 0BCD 94,算术运算指令-十进制调整指令,59,十进制调整指令 注意:DA A指令仅对BCD码加法运算结果进行调整。使用时紧跟ADD(ADDC)指令之后。 【例】 MOV A,#56H ADD A,#38H MOVB,A DA A 执行后A= ;B= 。,算术运算指令-十进制调整指令,94H 8EH,60,5. 带借位减法指令,算术运算指令-带借位减法指令,61,6. 减1指令,减1指令仅操作数为A时会影响P标志,对其他标志均无影响。,算术运算指令-减1指令,62,7. 乘、除指令,二进制数的乘、除法运算方法类似于十进制数的运算。,算术运算指令-乘除指令,

26、63,算术运算指令-图解,64, 逻辑操作指令 累加器清0、取反指令 循环移位指令 逻辑运算指令,逻辑操作指令,65,1. 累加器清零、取反指令,注意:字节清零、取反操作只能对A进行。,逻辑操作指令,66,2. 循环移位指令,逻辑操作指令-循环移位,67,(1) 逻辑与运算指令,逻辑操作指令-与,3. 逻辑运算指令,68, 二进制数的逻辑与运算 00=0 10=0 01=0 11=1 【例】 逻辑与运算常用来将一个数据的某些位清零(屏蔽),而保持其他位不变。 【例】将30H单元的高4位清零,低4位保持不变,可用下面指令实现。 ANL 30H,#0FH,1 0 1 1 0 0 1 1B ) 0

27、1 1 1 1 1 0 1B 0 0 1 1 0 0 0 1B,逻辑操作指令-逻辑与应用,69,逻辑操作指令-或,(2 ) 逻辑或运算指令,70, 二进制数的逻辑或运算 0v0=0 1v0=1 0v1=1 1v1=1 【例】 逻辑或运算常用来将一个数据的某些位置1,而保持其他位不变。 【例】将30H单元的低4位置1,高4位保持不变,可用下面指令实现。 ORL 30H,#0FH,1 0 1 0 0 0 0 1 B v) 0 1 1 0 1 1 0 1 B 1 1 1 0 1 1 0 1 B,逻辑操作指令-逻辑或应用,71,(3) 逻辑异或运算指令,逻辑操作指令-异或,72, 二进制数的逻辑异或运

28、算 0 0=0 1 0=1 0 1=1 1 1=0 【例】 逻辑异或运算常用来将一个数据的某些位取反,而保持其他位不变。 【例】将A的奇数位取反而偶数位保持不变,可用下面指令实现。 XRL A,#0AAH (XRL A,#1010 1010B),1 0 1 0 0 0 0 1B ) 0 1 1 0 1 1 0 1B 1 1 0 0 1 1 0 0B,逻辑操作指令-逻辑异或应用,73,【例】用不同的指令将累加器A的内容取反、清零。,取反 (1) CPL A (2) XRL A,#0FFH,清零 (1) CLR A (2) ANL A,#0 (3) MOV A,#0,逻辑操作指令-应用,74,【例

29、】用逻辑操作指令将P1口的位0、2、4、6位 置1,位1、3、5、7清零。,ORL P1,#55H ANL P1,#55H,逻辑操作指令-应用,75,【例】数据的拆分与合并,拆分 MOV A,30H ANL A,#0FH MOV 40H,A MOV A,30H ANL A,#0F0H SWAP A MOV 41H,A ;30H内容拆开,合并 ANL B,#0FH ANL A,#0FH SWAP A ORL B,A ;A、B内容合并,逻辑操作指令-应用,76,逻辑运算指令只有目的操作数为A时会影响P,对其他标志无影响。,逻辑操作指令-图解,77, 控制转移指令 无条件转移指令 子程序调用 条件转

30、移指令,控制转移指令,78, 控制转移指令的功能就是改变程序计数器PC的内容,控制程序从原顺序执行地址转移到其他指令地址上。计算机在运行过程中,有时因为任务要求,程序不再按顺序逐条执行指令,需要改变程序运行的方向,此时需要改变程序计数器PC的内容。控制转移类指令正是为实现这一功能而设置的。 控制转移指令有无条件转移指令和条件转移指令。,控制转移指令,79,1. 无条件转移指令,(1)长转移指令 LJMP addr16 ;addr16为转移的目标地址 【例】 LJMP NEXT NEXT: ,控制转移指令-无条件转移指令,80,(2)相对转移指令 SJMP rel rel是转移的目标地址相对于当

31、前PC值的偏移量,8位带符号数,其范围为-128+127。 指令采用的寻址方式为相对寻址方式。,控制转移指令-无条件转移指令,81,理解相对寻址方式: 描述从A走到B的方法有两种: 从2KM(A)走到5KM(即B)处 从2KM(A)向前走3KM 描述直接给出目的地,相当于LJMP指令 描述给出的是B相对于A的距离,相当于SJMP指令,控制转移指令-无条件转移指令,82, 在程序中,rel用目标地址标号表示。 【例】 SJMP NEXT NEXT:,控制转移指令-无条件转移指令,83,指令 LOOP:SJMP LOOP 也可写成 SJMP $ (4)短转移指令 AJMP addr11,控制转移指

32、令-无条件转移指令,84,(5)间接转移指令(散转指令) JMP A+DPTR 转移的目标地址为A+DPTR的内容,但不影响A与DPTR的内容 【例】编程实现,根据片内RAM 30H单元内容(09)转移至入口地址为OPR0OPR9的程序段执行。 方法一:利用转移指令表 首先利用LJMP指令建立转移至OPR0OPR9的转移指令表;然后根据30H内容,利用JMP指令转移至表中对应的指令。,控制转移指令-无条件转移指令,85,MOV A,30H ;取30H内容 ADD A,30H ADD A,30H ;X3 MOV DPTR,#JPTAB JMP A+DPTR JPTAB:LJMP OPR0 LJM

33、P OPR1 . . . LJMP OPR9,控制转移指令-无条件转移指令应用,86,方法二:利用转移地址表 首先将各入口地址连续存放在程序存储器中,形成转移地址表,然后编程根据30H内容查表取得相应的入口地址,最后利用JMP指令转移至相应程序段。,控制转移指令-无条件转移指令应用,87,MOV A,30H ;取数 ADD A,30H ;X2 MOV R5,A ;暂存于R5 MOV DPTR,#TAB ;DPTR指向地址表 MOVC A,A+DPTR ;取地址高8位 MOV B,A ;地址高8位暂存入B MOV A,R5 INC A MOVC A,A+DPTR ;取地址低8位 MOV DPL,

34、A MOV DPH,B ;入口地址送入DPTR MOV A,#0 JMP A+DPTR TAB:DW OPR0,OPR1,OPR2,控制转移指令-无条件转移指令应用,88,2.子程序调用,(1)子程序,为保证子程序顺利返回,在调用时,必须将当前PC(断点地址)压入堆栈保护。,控制转移指令-子程序调用指令,89,(2)子程序调用与返回指令 调用指令 LCALL addr16;先将当前PC值(断点地址)压入 堆栈,然后将子程序入口地址addr16 送入PC,转入子程序执行 返回指令 RET ;将断点地址从堆栈单元弹出送入PC,返回主程序继续执行,控制转移指令-子程序调用指令,90,(3)子程序的编

35、写与应用 编写子程序应注意的问题 子程序在功能上应具有通用性,结构上具有独立性; 给子程序赋一个名字,实际上是入口地址的代号; 注意保护现场和恢复现场; 应有子程序相关说明:如子程序的功能、入口条件、出口条件、占用寄存器或存储单元的情况。,控制转移指令-子程序应用,91,【例】编程实现c=a2+b2,设a、b均小于10,a存在31H,b存在32H,c存入33H。 设计求平方值子程序SQR: 功能:求平方值 入口条件:待求数存入A 出口条件:平方值存于A 使用寄存器:A,B 程序清单:,控制转移指令-子程序调用,92,ORG 0030H;主程序 0030H 75 81 70 MOV SP,#60

36、H;设置堆栈指针 0033H E5 31 MOV A,31H;取a 0035H 12 20 00 LCALL SQR;调用子程序求a2 0038H F9 MOV R1,A; a2暂存入R1 0039H E5 32 MOV A,32H;取b 003BH 12 20 00 LCALL SQR;调用子程序求b2 003EH 29 ADD A,R1;求a2+b2 003FH F5 33 MOV 33H,A;存结果 0031H 80 FE SJMP $,控制转移指令-子程序应用,93,ORG 0100H;子程序 0100H C0 F0 SQR:PUSH B ;保护现场 0102H F5 F0 MOV B

37、,A 0104H A4 MUL AB ;求平方值 0105H D0 F0 POP B ;恢复现场 0107H 22 RET ;返回 第一次调用时PC入栈状态 第二次调用时PC入栈状态,控制转移指令-子程序应用,94,(4)子程序嵌套 子程序嵌套是指在子程序执行过程中还可以调用另一个子程序。 子程序嵌套的过程 假设某一主程序在执行的过程中调用子程序1,子程序1执行的过程中又调用子程序2,则子程序嵌套的过程及对堆栈的操作如下图所示:,控制转移指令-子程序应用,95,堆栈先进后出的操作原则保证子程序嵌套的实现。,控制转移指令-子程序应用,96,3. 条件转移指令,(1)判零条件转移指令 JZ rel

38、 ;若A=0转移至PC+2+rel ,否则顺序执行 JNZ rel ;若A0转移至PC+2+rel ,否则顺序执行 【例】编程实现下列函数 假设x存放在片内RAM 30H单元,将y值存入31H。,控制转移指令-条件转移指令,97,ORG 0030H MOV A,30H;取x值 JZ ZERO ;x=0转移至ZERO MOV 31H,#1;x0则y=1 SJMP $ ZERO:MOV 31H,#0;x=0则y=0 SJMP $,控制转移指令-条件转移指令,98,(2)比较转移指令 CJNE A,#data,rel CJNE A,direct,rel CJNE Rn, #data,rel CJNE

39、 Ri, #data,rel 上述4条指令有3个操作数,具有共同的格式 CJNE OPR1,OPR2,rel 第三操作数均采用相对寻址方式,控制转移指令-条件转移指令,99, 指令功能 CJNE OPR1,OPR2,rel 若OPR1=OPR2则不转移 否则转移至PC+3+rel且OPR1OPR2时CY=0,OPR1OPR2时CY=1 即:对第一、二操作数的内容(无符号数)进行比较,若二者相等则顺序执行,否则转移,同时影响CY标志。可用作比较指令。,控制转移指令-条件转移指令,100,【例】编程实现下列函数 假设x存放在片内RAM 30H单元,将y值存入31H。(用CJNE指令实现),控制转移

40、指令-条件转移指令应用,101,ORG 0030H MOV A,30H ;取x值 CJNE A,#0,NEQ ;若x0则转移至NEQ MOV 31H,#0 SJMP $ NEQ:MOV 31H,#1 SJMP $,控制转移指令-条件转移指令应用,102,(3) 减1非零转移指令 DJNZ Rn,rel ;Rn内容减1, ;若Rn0则转移至PC+2+rel, ;若Rn=0则顺序执行 DJNZ direct,rel ;direct单元内容减1, ;若(direct)0则转移至PC+3+rel, ;若(direct)=0则顺序执行,控制转移指令-条件转移指令,103,【例】编程将片外数据存储器300

41、0H开始的50个数传送到片内RAM 30H开始的存储单元中。,控制转移指令-条件转移指令应用,104,ORG 0050H MOV DPTR,#3000H ;源数据块首地址 MOV R0,#30H ;目的存储单元首地址 MOV R5,#50 ;循环次数(数据块长度) LOP:MOVX A,DPTR ;从源数据块取一个数 MOV R0,A ;送入目的存储单元 INC DPTR INC R0 ;指向下一单元 DJNZ R5,LOP ;未传送完,继续 SJMP $ ;结束,控制转移指令-条件转移指令应用,105,软件延时,问题的提出 请看程序段: . . . MOV R7,#100 DELAY:DJN

42、Z R7,DELAY . . . 该程序段只是一个空循环,没有实质的操作,但指令的执行是需要时间的,因此,它起到延时作用。 延时时间的长短与指令周期和循环次数有关。,控制转移指令-条件转移指令应用,106,与时序有关的概念 时钟周期Tosc=1/fosc 机器周期TM=12Tosc=12/fosc 指令周期:执行一条指令所需的时间,用机器周期数表示,一般为1 TM、 2TM 、4TM。 例:若fosc=6MHz,则 Tosc=1/fosc=1/6s(微秒); TM=12Tosc=2 s,控制转移指令-条件转移指令应用,107,软件延时程序 【例】 YS1:MOV R7,#100 ;1 TM Y

43、S10:DJNZ R7,YS10 ;2 TM RET ;2 TM 延时时间t=1 TM +2 TM 100+2 TM =203 TM 若fosc=12MHz则TM=1s;t=203 s,控制转移指令-条件转移指令应用,108,【例】多重循环 内循环延时时间: t1=2 TM 200 外循环延时时间:t2=(1TM +2TM 200+2TM) 100 总延时时间: t=1TM + (1TM +2 TM 200+2TM) 100+2TM =40303TM,控制转移指令-条件转移指令应用,109,【例】 P1口做输出口,控制八只发光二极管循环点亮(P1口输出低电平时发光二极管被点亮)。,89C51,控制转移指令-条件转移指令应用,110,控制转移指令-条件转移指令应用,111, 位操作指令 位传送指

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论