4程序设计2.ppt
《4程序设计2.ppt》由会员分享,可在线阅读,更多相关《4程序设计2.ppt(61页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第4 4章章 汇编语言程序设计汇编语言程序设计4.1 4.1 程序设计概述程序设计概述4.1.1 4.1.1 程序设计语言程序设计语言机器语言,机器语言,汇编语言,汇编语言,高级语言高级语言4.3.3 4.3.3 循环程序循环程序还有什么方还有什么方法实现循环法实现循环?将将00H0FH00H0FH这这1616个数顺序地置入片内个数顺序地置入片内RAM RAM 20H2FH20H2FH单元中。单元中。循环变量分析循环变量分析;方案一方案一方案一方案一 MOV R0,#20H MOV R7,#10H CLR ALOOP:MOV R0,A INC A INC R0 DJNZ R7,LOOP SJ
2、MP$将将00H0FH00H0FH这这1616个数顺序地置入片内个数顺序地置入片内RAM RAM 20H2FH20H2FH单元中。单元中。方案方案 二二 MOV R0,#20H MOV A,#10H MOV 30H,#00H LOOP:MOV R0,30H INC 30H INC R0 DEC A JNZ LOOP SJMP$将将00H0FH00H0FH这这1616个数顺序地置入片内个数顺序地置入片内RAM RAM 20H2FH20H2FH单元中。单元中。方案三方案三 MOV R0,#20H CLR ALOOP:MOV R0,A INC A INC R0 CJNE A,#0FH,LOOP SJ
3、MP$循环程序方案循环程序方案已知循环已知循环n n次次:置初值置初值循环变量循环变量Rn(dir)=nLP1:循环体循环体DJNZ Rn(dir)LP1 循环次数未知循环次数未知:置初值置初值LP1:循环体循环体结束条件满足结束条件满足,LP2SJMP LP1LP2:循环程序设计和分析循环程序设计和分析循环程序设计循环程序设计分析需重复进行的工作:分析需重复进行的工作:思考循环体内的程序,思考循环体内的程序,可可利用利用RiRi,DPTR,DPTR,明确循环次数和各变量的明确循环次数和各变量的初值初值,思考循环完成后是否还要思考循环完成后是否还要进行其他处理进行其他处理循环程序分析循环程序分
4、析找到循环体找到循环体.分析循环体内的程序分析循环体内的程序:每一次循环完成的每一次循环完成的工作工作,各次循环的变各次循环的变量改变情况量改变情况.注意循环初值和循环注意循环初值和循环完成后的程序处理完成后的程序处理.典型循环程序举例典型循环程序举例多字节加法,减法,求补多字节加法,减法,求补数据的传送数据的传送数据的统计处理数据的统计处理延时程序延时程序多字节加法,减法,求补多字节加法,减法,求补(2Fh,(2Fh,20h)20h)bcdbcd=(2Fh,=(2Fh,20h)20h)bcdbcd+(3Fh,+(3Fh,30h)30h)bcdbcd循环循环:从低字节向高字节逐字节相加从低字节
5、向高字节逐字节相加.循环体内的工作循环体内的工作:一个字节的加法一个字节的加法:(2Xh)(2Xh)bcdbcd=(2Xh)=(2Xh)bcdbcd+(3Xh)+(3Xh)bcd bcd 带进位带进位,bcdbcd调整调整 下一字节地址比本字节地址多下一字节地址比本字节地址多1 1字节相加次数:字节相加次数:1616次次全部加完以后要注意是否还有进位?全部加完以后要注意是否还有进位?多字节加法,减法,求补多字节加法,减法,求补(仿仿P79)P79)(2Fh,20h)bcd=(2Fh,20h)bcd+(3Fh,30h)bcd L1:MOV A,R0 ADDC A,R1DA A MOV R0,A
6、INC R0 INC R1 DJNZ R2,L1CLR AADDC A,#0MOV R0,AENDMOV R0,#20HMOV R1,#30HMOV R2,#10HCLR C数据的传送数据的传送例:将片内例:将片内(20H-40H)(20H-40H)传送到传送到(50H-70H)(50H-70H)中去。中去。START:MOV R0,#20H MOV R1,#50H MOV R7,#21HLOOP:MOV A,R0 MOV R1,A INC R0 INC R1 DJNZ R7,LOOP数据的传送数据的传送Ex:Ex:将片内将片内40H60H40H60H中的内容传送到片外中的内容传送到片外200
7、0H2000H起起的存储区中。(的存储区中。(P105,6)P105,6)Ex:Ex:将片外将片外(1000H1030H)(1000H1030H)传送到片内传送到片内(30H60H),(30H60H),并将原数据区清零。(并将原数据区清零。(P105,9)P105,9)Ex:Ex:将片内将片内20H40H20H40H的内容传送到片内的内容传送到片内30H50H30H50H中。中。数据的统计处理数据的统计处理 找特定值找特定值 P81 P81 例例4-104-10 找找(60h7Fh)中的中的$,数据序号放入,数据序号放入(2F),无则放无则放FFH。思路:逐个比较,找到则退出,否则放思路:逐个
8、比较,找到则退出,否则放FFH MOV R0,#60H MOV R7,#20H MOV 2FH,#0FFHLP:MOV A,R0 CJNE A,#24H,LP1 MOV A,R0 SUBB A,#60H MOV 2FH,A SJMP HER LP1:INC R0 DJNZ R7,LPHER:SJMP HER循环比较循环比较32次次未查到未查到,查下一个查下一个查到查到,将序号送将序号送(2F),并退出查询并退出查询书例(书例(2f)不断变化不断变化数据的统计处理数据的统计处理找最值找最值P80 P80 例例4-9 4-9 找出(找出(30h39h30h39h)中的最大值,放入中的最大值,放入M
9、AXMAX。思路:思路:A A放最大值,逐个比较,并进行最大值代换放最大值,逐个比较,并进行最大值代换 MOV R0,#30H MOV A,R0 MOV R7,#9LOOP:INC R0 MOV 40H,R0 CJNE A,40H,CHKCHK:JNC LOOP1 MOV A,R0LOOP1:DJNZ R7,LOOP MOV MAX,A循环比较循环比较9次次A=R0,不置换不置换置换最大数至置换最大数至A数据的统计处理数据的统计处理 排序排序 P83 P83 例例4-12 4-12 将将(40h49h)(40h49h)无符号数升序排列。无符号数升序排列。思路:思路:循环一遍循环一遍:各数不断比
10、较交换各数不断比较交换,可以找到并排好一个最值可以找到并排好一个最值,即排好一个最大即排好一个最大(小小)的数。的数。冒泡法冒泡法演示演示N N个数从上往下,按升序排列思路:个数从上往下,按升序排列思路:每每1 1遍循环有遍循环有1 1个大数沉底个大数沉底:第第1 1遍循环有遍循环有1 1个最大数沉底,第个最大数沉底,第2 2遍循环有遍循环有2 2个最个最大数沉底大数沉底每每1 1遍循环从第遍循环从第1 1个数比较到第个数比较到第n n个数,比较个数,比较n-1n-1次。次。每每1 1遍循环的第遍循环的第i i次次:将数将数ii送送A,AA,A与数与数i+1i+1比较比较:AA数数i+1i+1
11、,交换数交换数ii,数数i+1i+1,作交换记号作交换记号1010个数从上往下,按升序排列个数从上往下,按升序排列 书书P83P83思路:思路:每每1 1次循环有次循环有1 1个最大数沉底,个最大数沉底,用用00h00h记交换否记交换否,排好排好00h=0,00h=0,退出排序。退出排序。LP:MOV A,R0 MOV 2BH,A INC R0 MOV 2AH,R0 CLR C SUBB A,R0 JC NX每每1遍循环的第遍循环的第i次次:将数将数i送送A,A与数与数i+1比较比较:A数数i+1,交换数交换数i,数数i+1,作交换记作交换记号号 MOV R0,2BH DEC R0 MOV R
12、0,2AH INC R0 SETB 00HNX:DJNZ R7,LP第第i次次:将数将数i送送A,A与数与数i+1比较比较A数数i+1,交换数交换数i,数数i+1,作交换记号作交换记号ST:R0=40h:R7=9:00h=F JB 00H,STN N个数从上往下,按升序排列时间优化思路:个数从上往下,按升序排列时间优化思路:每每1 1遍循环有遍循环有1 1个最大数沉底,个最大数沉底,第第1 1遍循环从第遍循环从第1 1个数比较到第个数比较到第n n个数个数第第2 2遍循环从第遍循环从第1 1个数比较到第个数比较到第n-1n-1个数个数第第3 3遍循环从第遍循环从第1 1个数比较到第个数比较到第
13、n-2n-2个数个数.最多进行最多进行n-1n-1遍循环遍循环,从第从第1 1比较到第比较到第2 2个数个数有可能中途未到有可能中途未到n-1n-1遍循环就已排好遍循环就已排好,用已交换否作用已交换否作记号记号,循环完成则退出排序。循环完成则退出排序。时间优化程序:时间优化程序:ST:MOV R0,#40H MOV R7,#9 CLR,00HLP:MOV A,R0 MOV 2BH,A INC R0 MOV 2AH,R0 CLR C SUBB A,R0 JC NX MOV R0,2BH DEC R0 MOV R0,2AH INC R0 SETB 00HNX:DJNZ R7,LP JB 00H,S
14、T MOV 2CH,#9ST:MOV R0,#40H MOV R7,2CH CLR 00H JNB 00H,OT DJNZ 2CH,STOT:SJMP$进一步进行时间优化进一步进行时间优化的演示和思考的演示和思考数据的统计处理数据的统计处理 P105P1057.7.外部外部RAM(DATADATA+9)RAM(DATADATA+9)最高位置最高位置1 111.11.统计统计0,=0,0,=0,0 个数个数1619.161619.16进制数进制数,ASCII,ASCII码码-p339-p339 bcdbcd,ASCII,ASCII码码12.12.求平均数求平均数 和未超过和未超过FFhFFh用用
15、div,4div,4舍舍5 5入。入。思考:和超过思考:和超过FFhFFh怎样做怎样做?延时程序延时程序注意到注意到(P341(P341表表):DJNZ DJNZ 指令要用指令要用2 2机器周期机器周期NOP NOP 要要1 1机器周期机器周期MOV MOV Rn,#dataRn,#data要要1 1机器周期机器周期MOV dir,#dataMOV dir,#data要要2 2机器周期机器周期因此可以精确算出程序执行时间。因此可以精确算出程序执行时间。例:以机器周期为单位,计算以下程例:以机器周期为单位,计算以下程序的执行时间。序的执行时间。MOV R7,#64HLOOP:MOV R6,#0F
16、AH DJNZ R6,$DJNZ R7,LOOP ;1个机器周期个机器周期 ;1 ;2 ;2 共共??内循环内循环:1:1次次 2Tm,2502Tm,250次次,共共500Tm;500Tm;外循环外循环:1:1次次 503Tm,100503Tm,100次次,共共50300Tm;50300Tm;共共5030150301个机器个机器周期周期例:设单片机晶振例:设单片机晶振6MHZ6MHZ,编写程序编写程序延时延时1s1s。分析:由于分析:由于DJNZDJNZ指令最多的循环次指令最多的循环次数是数是256256次,而次,而1s1s256256256 256 约等于约等于15s15s,晶振频率晶振频率
17、6MHZ6MHZ,则,则1 1个机器周期为个机器周期为2s2s,我们把内循环定为我们把内循环定为8 8个机器周期个机器周期16s16s。则则16S16S250250250=1s250=1s。16s16s250250250=1s250=1sDelay:MOV R7,#0FAHDelay:MOV R7,#0FAHLOOP:MOV R6,#0FAHLOOP:MOV R6,#0FAHLOOP1LOOP1:NOPNOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP DJNZ R6,LOOP1 DJNZ R6,LOOP1 DJNZ R7,LOOP DJNZ R7,LOOP
18、实际执行时间为:实际执行时间为:(6+2)(6+2)250+2+1250+2+1250+1=500751250+1=500751个机器周期,需个机器周期,需1.0015021.001502秒。秒。子程序的适用范围子程序的适用范围(1 1)多次应用的程序)多次应用的程序;如延时如延时,代码转换代码转换,运运算等算等(2 2)突发事件用中断程序)突发事件用中断程序 子程序的使用能使程序整体模块化。子程序的使用能使程序整体模块化。4.3.4 4.3.4 子程序设计子程序设计1.1.子程序语句的执行概况子程序语句的执行概况指令指令 acallacall address address,lcalllca
19、ll address address sp sp 保护下条指令的地址保护下条指令的地址 PC PC 转向转向addressaddress中断:中断:sp sp 保护下条指令的地址保护下条指令的地址 PC PC 转向中断入口地址转向中断入口地址 打开正在进行中断标记打开正在进行中断标记1.1.子程序语句的执行概况子程序语句的执行概况指令指令 retret PC PC 从堆栈中获得地址从堆栈中获得地址指令指令 retireti PC PC 从堆栈中获得地址从堆栈中获得地址,同时关闭正在进行中断标记同时关闭正在进行中断标记2.2.子程序举例子程序举例 例例1 1:A=AA=A2 2 (入口入口A16
20、)(1)A16)(1)子程序出口子程序出口A=A=子程序入口子程序入口A A的平方的平方 SUB1:MOV B,A SUB1:MOV B,A MUL AB MUL AB RET RET 分析分析:寄存器寄存器A A传递数据,寄存器传递数据,寄存器B B被占被占用用,必要时应予以保护。必要时应予以保护。2.2.子程序举例子程序举例 例例1 1:A=AA=A2 2 (入口入口A16)(2)A=(39982=(X*2X*2+4+4)*Y*Y (77*2+4)*253=39974 (77*2+4)*253=39974 另外加另外加8 8机器周期指令机器周期指令 问题问题:寄存器无保护寄存器无保护,时间
21、不准时间不准NOPNOPNOPNOPNOPNOPNOPNOPNOPNOPNOPNOPNOPNOPNOPNOP77772532532.2.子程序举例子程序举例 例例3 3:1616进制数转进制数转ASCIIASCII码码(1)(1)子程序入口子程序入口A A是是1616进制数进制数(0009,0A0F)(0009,0A0F)子程序出口子程序出口A A是是ASCIIASCII码码SUB3:SUB3:ANL A,#0FHANL A,#0FHADD A,#1ADD A,#1 MOVC A,A+PC MOVC A,A+PC RET RET DB 30H,31H,32H,33H,34H,35H DB 30
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计
限制150内