《单片机汇编语言程序设计精选PPT.ppt》由会员分享,可在线阅读,更多相关《单片机汇编语言程序设计精选PPT.ppt(71页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、单片机汇编语言程序设计第1页,此课件共71页哦4.1 4.1 单片机程序程序设计语言概述单片机程序程序设计语言概述4.1.1 4.1.1 机器语言和汇编语言机器语言和汇编语言4.1.2 4.1.2 单片机使用的高级语言单片机使用的高级语言(1 1)BASICBASIC语言语言(2 2)C C语言语言(3 3)PL/MPL/M语言语言 4.1.3 80C514.1.3 80C51单片机汇编语言的语句格式单片机汇编语言的语句格式第2页,此课件共71页哦汇编语汇编语言程序言程序设计设计必须注意如下特点:必须注意如下特点:(1 1)设计人员必须详细了解单片机的硬件结构,以便在程序设计中熟练使用;)设计
2、人员必须详细了解单片机的硬件结构,以便在程序设计中熟练使用;(2 2)必须熟悉汇编语言指令的功能和用法;)必须熟悉汇编语言指令的功能和用法;(3 3)在程序设计前,必须分析设计任务,确定所用算法,确定程序结构,确)在程序设计前,必须分析设计任务,确定所用算法,确定程序结构,确定数据的类型、数据的结构,必须对数据的存放、寄存器和工作单元的使用以定数据的类型、数据的结构,必须对数据的存放、寄存器和工作单元的使用以及所用硬件资源等作出具体安排;及所用硬件资源等作出具体安排;(4 4)根据分析,画出程序设计流程图;)根据分析,画出程序设计流程图;(5 5)根据程序设计流程图编写程序。)根据程序设计流程
3、图编写程序。第3页,此课件共71页哦4.2 4.2 汇编语言程序的基本结构形式汇编语言程序的基本结构形式 单片机汇编语言程序设计的基本结构形式一般分为以下单片机汇编语言程序设计的基本结构形式一般分为以下4 4种形式,种形式,即顺序结构、分支结构、循环结构和子程序结构。即顺序结构、分支结构、循环结构和子程序结构。4.2.1 4.2.1 顺序程序结构顺序程序结构 顺序程序是顺序程序是最最简单简单的程序的程序结结构,在构,在顺序顺序程序中程序中,既无分支,循既无分支,循环环,也也不调用不调用子程序,程序子程序,程序执执行行时时一条一条一条一条地地按按顺顺序序执执行指令行指令 例:假定三字例:假定三字
4、节节无符号数相加,其中一个加数在内部无符号数相加,其中一个加数在内部RAMRAM的的50H50H、51H51H和和52H52H单单元中,另一个加数在内部元中,另一个加数在内部RAMRAM的的53H53H、54H54H和和55H55H单单元中,要求把相元中,要求把相加之和存放在加之和存放在50H50H、51H51H和和52H52H单单元中,元中,进进位存放在位位存放在位寻寻址区的址区的00H00H位中。位中。解解:(:(1 1)分析任务:求两数之和)分析任务:求两数之和 (2 2)算法:加法运算()算法:加法运算(ADDADD或或ADDCADDC)第4页,此课件共71页哦 (3 3)程序结构:顺
5、序或循环结构)程序结构:顺序或循环结构 (4 4)数据类型:三字节、二进制、无符号数)数据类型:三字节、二进制、无符号数 (5 5)数据结构:升序或降序排列)数据结构:升序或降序排列 (6 6)RAMRAM单元安排单元安排:(内部(内部RAMRAM字节单元、位地址空间字节单元、位地址空间)(7 7)采用寄存器间接寻址方式()采用寄存器间接寻址方式(R0R0、R1R1)加数(加数(N1N1)高字节(高字节(8 8位)位)中字节(中字节(8 8位)位)低字节(低字节(8 8位)位)加数(加数(N2N2)高字节(高字节(8 8位)位)中字节(中字节(8 8位)位)低字节(低字节(8 8位)位)加数(
6、加数(N1N1)加数(加数(N2N2)和(和(N3N3)52H52H单元单元低字节(低字节(8 8位)位)55H55H单元单元低字节(低字节(8 8位)位)52H52H单元单元 低字节(低字节(8 8位)位)51H51H单元单元中字节(中字节(8 8位)位)54H54H单元单元中字节(中字节(8 8位)位)51H51H单元单元 中字节(中字节(8 8位)位)50H50H单元单元高字节(高字节(8 8位)位)52H52H单元单元高字节(高字节(8 8位)位)50H50H单元单元 高字节(高字节(8 8位)位)00H00H位位进位位进位位第5页,此课件共71页哦 (8 8)程序设计流程框图;)程序
7、设计流程框图;第6页,此课件共71页哦 (9 9)程序清单;)程序清单;ORG 1000HORG 1000H MOV RO MOV RO,#52H#52H;加数;加数N1N1的低字节地址送地址指针的低字节地址送地址指针R0R0 MOV R1 MOV R1,#55H#55H;加数;加数N2N2的低字节地址送地址指针的低字节地址送地址指针R1R1 MOV A MOV A,R0R0;取取N1N1的低字节的低字节 ADD AADD A,R1R1;N1N1、N2N2低字节相加低字节相加 MOV R0MOV R0,A A;保存保存N1N1、N2N2低字节和低字节和 DEC R0DEC R0;修改加数修改加
8、数N1N1的地址指针内容的地址指针内容 DEC R1DEC R1;修改加数修改加数N2N2的地址指针内容的地址指针内容 MOV AMOV A,R0R0;取取N1N1的中间字节的中间字节 ADDC AADDC A,R1R1;N1N1、N2N2中间字节带低字节和进位相加中间字节带低字节和进位相加 MOV R0MOV R0,A A;保存保存N1N1、N2N2中间字节和中间字节和 DEC R0DEC R0;修改加数修改加数N1N1的地址指针内容的地址指针内容第7页,此课件共71页哦 DEC R1 DEC R1;修改加数修改加数N2N2的地址指针内容的地址指针内容 MOV AMOV A,R0R0;取取N
9、1N1的高字节的高字节 ADDC AADDC A,R1R1;N1N1、N2N2高字节带中间字节和进位相加高字节带中间字节和进位相加 MOV R0MOV R0,A A;保存保存N1N1、N2N2高字节和高字节和 MOV 00HMOV 00H,C C;高字节和的高字节和的进进位送位送00H00H位保存位保存 ENDEND 思考题:思考题:1 1)上述程序中,如果只采用)上述程序中,如果只采用ADDCADDC指令,应如何修改程序?指令,应如何修改程序?2 2)如果)如果N1N1、N2N2,N3N3均为十进制数,应如何修改程序?均为十进制数,应如何修改程序?3 3)如如果果加加数数N1N1在在内内部部
10、RAM RAM 50H50H、51H51H和和52H52H单单元元中中,而而加加数数N2N2与与和和N3N3均均在在外外部部RAM00RAM0053H53H、0054H0054H和和0055H0055H单单元元中中,其其它它条条件件不不变变,应应如如何何修修改改程程序序?4 4)如果)如果N1N1、N2N2,N3N3均存放在外部均存放在外部RAMRAM单元,应如何修改程序?单元,应如何修改程序?第8页,此课件共71页哦思考题:思考题:1 1)ORG 1000HORG 1000H MOV RO MOV RO,#52H#52H;加数;加数N1N1的低字节地址送地址指针的低字节地址送地址指针R0R0
11、 MOV R1 MOV R1,#55H#55H;加数;加数N2N2的低字节地址送地址指针的低字节地址送地址指针R1R1 MOV A MOV A,R0R0;取取N1N1的低字节的低字节 CLR CCLR C;清原来进位位清原来进位位CYCY的内容的内容 ADDC AADDC A,R1R1;N1N1、N2N2低字节相加低字节相加 MOV R0MOV R0,A A;保存保存N1N1、N2N2低字节和低字节和 DEC R0DEC R0;修改加数修改加数N1N1的地址指针内容的地址指针内容 DEC R1DEC R1;修改加数修改加数N2N2的地址指针内容的地址指针内容 MOV AMOV A,R0R0;取
12、取N1N1的中间字节的中间字节 ADDC AADDC A,R1R1;N1N1、N2N2中间字节带低字节和进位相加中间字节带低字节和进位相加 MOV R0MOV R0,A A;保存保存N1N1、N2N2中间字节和中间字节和 DEC R0DEC R0;修改加数修改加数N1N1的地址指针内容的地址指针内容第9页,此课件共71页哦 DEC R1 DEC R1;修改加数修改加数N2N2的地址指针内容的地址指针内容 MOV AMOV A,R0R0;取取N1N1的高字节的高字节 ADDC AADDC A,R1R1;N1N1、N2N2高字节带中间字节和进位相加高字节带中间字节和进位相加 MOV R0MOV R
13、0,A A;保存保存N1N1、N2N2高字节和高字节和 MOV 00HMOV 00H,C C;高字节和的高字节和的进进位送位送00H00H位保存位保存 ENDEND 思考题:思考题:2 2)ORG 1000HORG 1000H MOV RO MOV RO,#52H#52H;加数;加数N1N1的低字节地址送地址指针的低字节地址送地址指针R0R0 MOV R1 MOV R1,#55H#55H;加数;加数N2N2的低字节地址送地址指针的低字节地址送地址指针R1R1 MOV A MOV A,R0R0;取取N1N1的低字节的低字节 ADD AADD A,R1R1;N1N1、N2N2低字节相加低字节相加
14、DA ADA A;N1N1、N2N2低字节和十进制调整低字节和十进制调整 MOV R0MOV R0,A A;保存保存N1N1、N2N2低字节和低字节和第10页,此课件共71页哦 DEC R0 DEC R0;修改加数修改加数N1N1的地址指针内容的地址指针内容 DEC R1DEC R1;修改加数修改加数N2N2的地址指针内容的地址指针内容 MOV AMOV A,R0R0;取取N1N1的中间字节的中间字节 ADDC AADDC A,R1R1;N1N1、N2N2中间字节带低字节和进位相加中间字节带低字节和进位相加 DA ADA A;N1N1、N2N2中间字节和十进制调整中间字节和十进制调整 MOV
15、R0MOV R0,A A;保存保存N1N1、N2N2中间字节和中间字节和 DEC R0DEC R0;修改加数修改加数N1N1的地址指针内容的地址指针内容 DEC R1DEC R1;修改加数修改加数N2N2的地址指针内容的地址指针内容 MOV AMOV A,R0R0;取取N1N1的高字节的高字节 ADDC AADDC A,R1R1;N1N1、N2N2高字节带中间字节和进位相加高字节带中间字节和进位相加 DA ADA A;N1N1、N2N2高字节和十进制调整高字节和十进制调整 MOV R0MOV R0,A A;保存保存N1N1、N2N2高字节和高字节和 MOV 00HMOV 00H,C C;高字节
16、和的高字节和的进进位送位送00H00H位保存位保存 ENDEND第11页,此课件共71页哦思考题思考题3 3)ORG 1000HORG 1000H MOV RO MOV RO,#52H#52H;加数;加数N1N1的低字节地址送地址指针的低字节地址送地址指针R0R0 MOV R1 MOV R1,#55H#55H;加数;加数N2N2的低字节地址送地址指针的低字节地址送地址指针R1R1 MOVX AMOVX A,R1R1;取取N2N2的低字节的低字节 ADD AADD A,R0R0;N1N1、N2N2低字节相加低字节相加 MOVX R1MOVX R1,A A;保存保存N1N1、N2N2低字节和低字节
17、和 DEC R0DEC R0;修改加数修改加数N1N1的地址指针内容的地址指针内容 DEC R1DEC R1;修改加数修改加数N2N2的地址指针内容的地址指针内容 MOVX AMOVX A,R1R1;取取N2N2的中间字节的中间字节 ADDC AADDC A,R0R0;N1N1、N2N2中间字节带低字节和进位相加中间字节带低字节和进位相加 MOVX R1MOVX R1,A A;保存保存N1N1、N2N2中间字节和中间字节和 DEC R0DEC R0;修改加数修改加数N1N1的地址指针内容的地址指针内容第12页,此课件共71页哦 DEC R1 DEC R1;修改加数修改加数N2N2的地址指针内容
18、的地址指针内容 MOVX AMOVX A,R1R1;取取N2N2的高字节的高字节 ADDC AADDC A,R0R0;N1N1、N2N2高字节带中间字节和进位相加高字节带中间字节和进位相加 MOVX R1MOVX R1,A A;保存保存N1N1、N2N2高字节和高字节和 MOV 00HMOV 00H,C C;高字节和的高字节和的进进位送位送00H00H位保存位保存 ENDEND 如果如果N2N2、N3N3的数据地址指针采用的数据地址指针采用DPTRDPTR,则程序修改如下:,则程序修改如下:ORG 1000HORG 1000H MOV RO MOV RO,#52H#52H;加数;加数N1N1的
19、低字节地址送地址指针的低字节地址送地址指针R0R0 MOV DPTRMOV DPTR,#0055H#0055H;加数;加数N2N2的低字节地址送的低字节地址送DPTRDPTR MOVX AMOVX A,DPTRDPTR;取取N2N2的低字节的低字节 ADD AADD A,R0R0;N1N1、N2N2低字节相加低字节相加 MOVX DPTRMOVX DPTR,A A;保存保存N1N1、N2N2低字节和低字节和 DEC R0DEC R0;修改加数修改加数N1N1的地址指针内容的地址指针内容第13页,此课件共71页哦 MOV DPTRMOV DPTR,#0054H#0054H;修改加数;修改加数N2
20、N2的地址指针内容的地址指针内容 MOVX AMOVX A,DPTRDPTR;取取N2N2的中间字节的中间字节 ADDC AADDC A,R0R0;N1N1、N2N2中间字节带低字节和进位相加中间字节带低字节和进位相加 MOVX DPTRMOVX DPTR,A A;保存保存N1N1、N2N2中间字节和中间字节和 DEC R0DEC R0;修改加数修改加数N1N1的地址指针内容的地址指针内容 MOV DPTRMOV DPTR,#0053H#0053H;修改加数;修改加数N2N2的地址指针内容的地址指针内容 MOVX AMOVX A,DPTRDPTR;取取N2N2的高字节的高字节 ADDC AAD
21、DC A,R0R0;N1N1、N2N2高字节带中间字节和进位相加高字节带中间字节和进位相加 MOVX DPTRMOVX DPTR,A A;保存保存N1N1、N2N2高字节和高字节和 MOV 00HMOV 00H,C C;高字节和的高字节和的进进位送位送00H00H位保存位保存 ENDEND 思考:修改加数思考:修改加数N2N2的数据地址指针的数据地址指针DPTRDPTR的内容可否采用的内容可否采用 DEC DPTRDEC DPTR指令?指令?第14页,此课件共71页哦例:例:设设内部内部RAM 40HRAM 40H,41H41H单单元中分元中分别别存放存放8 8位二位二进进制数,制数,现分别现
22、分别取取这这两个两个单单元中的半元中的半个个字字节节,合并成一个,合并成一个新新字字节节存放在存放在42H42H单单元元中中。要求如下:要求如下:42H42H单单元元新字节的低半字节取自新字节的低半字节取自40H40H单元的低半字节,而高半字节取自单元的低半字节,而高半字节取自41H41H单单元的低半字节。元的低半字节。解解:(:(1 1)分析任务:拆字、合字)分析任务:拆字、合字第15页,此课件共71页哦 (2 2)算法:逻辑运算)算法:逻辑运算 (3 3)程序结构:顺序)程序结构:顺序 (4 4)数据类型:单字节、二进制、无符号数)数据类型:单字节、二进制、无符号数 (5 5)数据结构:升
23、序或降序排列)数据结构:升序或降序排列 (6 6)程序设计流程框图;)程序设计流程框图;第16页,此课件共71页哦 (7 7)程序清单;)程序清单;ORG 2000HORG 2000H S START:MOV R1TART:MOV R1,#40H#40H;初始化数据指针;初始化数据指针R1R1的内容的内容 MOV AMOV A,R1R1;取取40H40H单元内容送单元内容送A A ANL A ANL A,#0FH#0FH;保留;保留40H40H单元内容低单元内容低4 4位位 INC R1INC R1;修改数据指针修改数据指针R1R1的内容的内容 XCH AXCH A,R1R1;(A)(A)与与
24、R1R1内容互换内容互换 ANL AANL A,#0FH#0FH;保留;保留41H41H单元内容低四位单元内容低四位 SWAP ASWAP A;41H41H单元内容高低半字节互换单元内容高低半字节互换 ORL AORL A,R1R1;合字生成新字节合字生成新字节 INC R1INC R1;修改数据指针修改数据指针R1R1的内容的内容 MOV R1MOV R1,A A;新字节送新字节送42H42H单元保存单元保存 ENDEND作业题:作业题:上例中其它条件不变,要求如下:上例中其它条件不变,要求如下:42H42H单单元元新字节的低半字节取自新字节的低半字节取自40H40H单元的低半字节,而高半字
25、节取自单元的低半字节,而高半字节取自41H41H单元的高半字节。单元的高半字节。第17页,此课件共71页哦(1 1)单分支程序)单分支程序 单分支程序单分支程序是通是通过过条件条件转转移指令移指令实现实现的,即根据条件的,即根据条件对对程序的程序的执执行行进进行行判断,判断,满满足条件足条件则进则进行程序行程序转转移,不移,不满满足条件程序就足条件程序就顺顺序序执执行。行。在在MCS-51MCS-51指令系指令系统统中,可利用中,可利用JZJZ,JNZJNZ,CJNECJNE,DJNZDJNZ,JCJC,JNCJNC,JBJB,JNBJNB,JBCJBC等指令,完成等指令,完成为为0 0、为为
26、1 1、为为正正、为负为负以及相等以及相等、不相等等各不相等等各种条件判断。种条件判断。例:两个例:两个8 8位无符号二进制数比较大小。位无符号二进制数比较大小。假假设设在外部在外部RAMRAM中有中有ST1ST1、ST2ST2和和ST3ST3共共3 3个连续单元(单元地址从小到大),其个连续单元(单元地址从小到大),其中中ST1ST1、ST2ST2单元中单元中存放存放着着两两个个8 8位位无符号二无符号二进进制数制数N1N1,N2N2,要求,要求找出其中找出其中的的大数大数并并存存入入ST3ST3单单元元中中。4.2.2 4.2.2 分支程序结构分支程序结构第18页,此课件共71页哦解解:(
27、:(1 1)分析任务:比较两个数的大小)分析任务:比较两个数的大小 (2 2)算法:算术运算、控制转移)算法:算术运算、控制转移 (3 3)程序结构:单分支)程序结构:单分支 (4 4)数据类型:单字节、二进制、无符号数)数据类型:单字节、二进制、无符号数 (5 5)数据结构:单元地址升序排列)数据结构:单元地址升序排列 (6 6)RAMRAM单元安排单元安排:外部:外部RAMRAM单元单元 (7 7)采用寄存器间接寻址方式()采用寄存器间接寻址方式(R0R0、R1R1或或DPTRDPTR)(8 8)程序设计流程框图程序设计流程框图;(9 9)程序清单程序清单;思考题(补充作业题):思考题(补
28、充作业题):上例中,如果采用上例中,如果采用CJNE ACJNE A,directdirect,relrel指令,应如何修改程序?指令,应如何修改程序?第19页,此课件共71页哦返回第20页,此课件共71页哦 ORG 8000H ORG 8000H START:CLR C START:CLR C;进位清;进位清0 0 MOV DPTR MOV DPTR,#ST1#ST1;设数据指针设数据指针 MOVX AMOVX A,DPTRDPTR;AA(ST1ST1),取),取N1N1 MOV R2 MOV R2,A A;暂存暂存N1N1 INC DPTR INC DPTR;DPTR ST2DPTR ST
29、2(指向(指向N2N2单元)单元)MOVX AMOVX A,DPTRDPTR;取取N2N2存于存于A A中中 SUBB ASUBB A,R2R2;N1N1,N2N2比较(比较(N2-N1N2-N1,差在,差在A A中)中)JNC BIG1JNC BIG1;N2N1N2N1,转,转BIG1BIG1,N2N2N1N1,顺序执行,顺序执行 XCH AXCH A,R2R2;N1N1,N2N2互换,互换,A N1A N1 SJMP BIG0 SJMP BIG0 BIG1:MOVX A BIG1:MOVX A,DPTRDPTR;A N2A N2 BIGO:INC DPTR BIGO:INC DPTR;DP
30、TR ST3DPTR ST3(指向(指向N3N3单元)单元)MOVX DPTRMOVX DPTR,A A;ST3 ST3 大数大数 ENDEND返回返回 第21页,此课件共71页哦(2 2)多分支程序)多分支程序 假设多分支程序中,分支序号的最大值为假设多分支程序中,分支序号的最大值为n n,则多分支转移结构如,则多分支转移结构如图所示:图所示:MCS-51MCS-51指令系指令系统统没有没有多分支多分支转移转移指令,无法使用指令,无法使用单单条指令完成多分条指令完成多分支支转转移移。要实现多分支转移,。要实现多分支转移,可采用以下几种方法:可采用以下几种方法:第22页,此课件共71页哦 假设
31、分支序号值保存在累加器假设分支序号值保存在累加器A A中,则可使用中,则可使用CJNE ACJNE A,#data#data,relrel指令,其分支流程如图所示:指令,其分支流程如图所示:(a a)使用多条使用多条CJNECJNE指令,通指令,通过过逐次比逐次比较较,实现实现分支程序分支程序转转移移第23页,此课件共71页哦例:例:已知已知:127127X X-128-128,求,求Y Y。设设X X,Y Y分别分别存存放在外部放在外部RAM 1000HRAM 1000H和和2000H2000H单元中。单元中。解解:(:(1 1)分析任务:解方程)分析任务:解方程 (2 2)算法:控制转移)
32、算法:控制转移 (3 3)程序结构:多分支)程序结构:多分支 (4 4)数据类型:单字节、二进制、有符号数)数据类型:单字节、二进制、有符号数 (5 5)RAMRAM单元安排单元安排:外部:外部RAMRAM单元单元 (6 6)采用寄存器间接寻址方式()采用寄存器间接寻址方式(R0R0、R1R1或或DPTRDPTR)(7 7)程序设计流程框图程序设计流程框图 (8 8)程序清单程序清单;思考题(补充作业题):思考题(补充作业题):上例中,如果采用上例中,如果采用CJNECJNE指令,应如何修改程序?指令,应如何修改程序?第24页,此课件共71页哦返回第25页,此课件共71页哦 ARE EQU 1
33、000H ARE EQU 1000H;BUF EQU 2000HBUF EQU 2000H;ORG 1000HORG 1000HSTARTSTART:MOV DPTRMOV DPTR,#ARE#ARE;数据数据X X的地址送数据指针的地址送数据指针DPTRDPTR MOVX A MOVX A,DPTRDPTR;AA取数据取数据X X JZ SUL JZ SUL;X X0 0转转SULSUL JB ACC.7 JB ACC.7,NEGNEG;X X0 0转转NEGNEG,否则,否则,X X0 0 MOV A MOV A,#01H#01H;SJMP SULSJMP SUL;NEG:MOV ANEG
34、:MOV A,#0FFH#0FFH;(0FFH(0FFH为为-1-1补码补码)SUL:MOV DPTR SUL:MOV DPTR,#BUF#BUF;数据数据Y Y的地址送数据指针的地址送数据指针DPTRDPTR MOVX DPTR MOVX DPTR,A A;保存保存Y Y值值 ENDEND返回第26页,此课件共71页哦 首先,在程序中建立一个转移指令表,在表格中存放转移指令,首先,在程序中建立一个转移指令表,在表格中存放转移指令,然后,通过查转移指令表的方式实现多分支程序转移。然后,通过查转移指令表的方式实现多分支程序转移。这种方法主要利用散转指令这种方法主要利用散转指令JMP A+DPTR
35、JMP A+DPTR,此指令采用变址寻址方,此指令采用变址寻址方式,操作过程:(式,操作过程:(PCPC)(A A)+(DPTRDPTR),),CPUCPU根据根据PCPC的内容来实的内容来实现多分支程序转移。现多分支程序转移。DPTRDPTR中送转移指令表的表首地址(常用转移指令中送转移指令表的表首地址(常用转移指令表的名称标号代替),而表的名称标号代替),而A A中送转移指令表中存放的转移指令的序号中送转移指令表中存放的转移指令的序号(常常从第(常常从第0 0条开始)。条开始)。例如,有多个分支程序,如要通过例如,有多个分支程序,如要通过AJMPAJMP转移指令进行转移,则应把转移指令进行
36、转移,则应把这些转移指令按序写入转移指令表中,并设置一个序号指针(例如这些转移指令按序写入转移指令表中,并设置一个序号指针(例如R3R3),),序号往往从序号往往从0 0开始,然后可使用以下查表程序实现程序转移。开始,然后可使用以下查表程序实现程序转移。(b b)使用使用查查转移指令转移指令表表的的方法方法实现实现多分支程序多分支程序转转移移第27页,此课件共71页哦 MOV A MOV A,R3R3;分支程序序号送分支程序序号送A A RL A RL A;分支程序序号乘分支程序序号乘2 2 MOV DPTR MOV DPTR,#BRTAB#BRTAB;BRTABBRTAB为转移指令表名称标号
37、,为转移指令表名称标号,JMP A+DPTRJMP A+DPTR;也为转移指令表首地址也为转移指令表首地址BRTABBRTAB:AJMP ROUT0AJMP ROUT0;分支程序分支程序0 0的转移指令的转移指令 AJMP ROUT1AJMP ROUT1;分支程序分支程序1 1的转移指令的转移指令 AJMP ROUT2AJMP ROUT2;AJMP ROUT127AJMP ROUT127;分支程序分支程序127127的转移指令的转移指令ROUT0ROUT0:;分支程序分支程序0 0ROUT1:ROUT1:;ROUT127:ROUT127:;分支程序分支程序127127第28页,此课件共71页哦
38、 由于由于AJMPAJMP指令是二字节指令,因此,程序中通过指令是二字节指令,因此,程序中通过RL ARL A指令将分支序号指令将分支序号乘乘2 2。转移指令表中最多只能安排。转移指令表中最多只能安排128128条分支转移指令,如需多于条分支转移指令,如需多于128128条,条,则必须另行修改程序。则必须另行修改程序。由于由于AJMPAJMP指令转移范围是指令转移范围是2KB2KB,因此,分支程序应安排在以,因此,分支程序应安排在以JMP JMP A+DPTRA+DPTR指令为中心的指令为中心的2KB2KB范围之内,否则会出错。范围之内,否则会出错。如果转移指令表中的转移指令是如果转移指令表中
39、的转移指令是LJMPLJMP指令,则分支程序可安排在指令,则分支程序可安排在64KB ROM64KB ROM空间的任何地方。但转移指令表中的转移指令的条数最多为空间的任何地方。但转移指令表中的转移指令的条数最多为8585条条(LJMPLJMP指令是三字节指令),上述程序应作相应的修改。指令是三字节指令),上述程序应作相应的修改。MOV AMOV A,R3R3;MOV BMOV B,#03H#03H;MUL ABMUL AB;第29页,此课件共71页哦 MOV DPTR MOV DPTR,#BRTAB#BRTAB;BRTABBRTAB为转移指令表名称标号,为转移指令表名称标号,JMP A+DPT
40、RJMP A+DPTR;也为转移指令表首地址也为转移指令表首地址BRTABBRTAB:LJMP ROUT0LJMP ROUT0;分支程序分支程序0 0的转移指令的转移指令 LJMP ROUT1LJMP ROUT1;分支程序分支程序1 1的转移指令的转移指令 LJMP ROUT2LJMP ROUT2;LJMP ROUT85LJMP ROUT85;分支程序分支程序8585的转移指令的转移指令ROUT0ROUT0:;分支程序分支程序0 0ROUT1:ROUT1:;ROUT85ROUT85:;分支程序分支程序8585第30页,此课件共71页哦例:假设键盘上有例:假设键盘上有4 4个按键,功能说明如下表
41、:个按键,功能说明如下表:程序流程框图程序流程框图键功能键功能键值(分支程序序号)键值(分支程序序号)键处理程序(分支程序)键处理程序(分支程序)删除删除00H00HERER读数据读数据01H01HDSDS写数据写数据02H02HXSXS插入插入03H03HCRCR 假设转移指令表名称为假设转移指令表名称为BRTABBRTAB,分支程序序号已在,分支程序序号已在A A 中。中。MOV DPTRMOV DPTR,#BRTAB#BRTAB CLR C CLR C RLC A RLC A JMP A+DPTR JMP A+DPTR;ORG 3000HORG 3000H3000H BRTAB3000H
42、 BRTAB:AJMP ERAJMP ER;转删除分支程序转删除分支程序第31页,此课件共71页哦3000H BRTAB3000H BRTAB:AJMP ERAJMP ER;转删除分支程序转删除分支程序3001H 3001H 3002H AJMP DS3002H AJMP DS;转读数据分支程序转读数据分支程序3003H3003H3004H AJMP XS3004H AJMP XS;转写数据分支程序转写数据分支程序3005H3005H3006H AJMP CR3006H AJMP CR;转插入分支程序转插入分支程序3007H3007H ORG 3100H ORG 3100H3100H ER31
43、00H ER:;删除分支程序删除分支程序 ORG 3200HORG 3200H3200H DS3200H DS:;读数据分支程序读数据分支程序 ORG 3300HORG 3300H3300H XS3300H XS:;写数据分支程序写数据分支程序 ORG 3400HORG 3400H3400H CR3400H CR:;插入分支程序插入分支程序 ENDEND第32页,此课件共71页哦返回第33页,此课件共71页哦4.2.3 4.2.3 循环程序结构循环程序结构 MCS-51 MCS-51汇编语言指令系统没有专用的循环指令,但可以使用条件汇编语言指令系统没有专用的循环指令,但可以使用条件转移指令通过
44、条件判断来控制循环是继续还是结束。转移指令通过条件判断来控制循环是继续还是结束。循环程序一般由四个主要部分组成循环程序一般由四个主要部分组成:(1 1)初初始始化化部部分分:为为循循环环程程序序做做准准备备,如如规规定定循循环环次次数数、给给各各变变量量和和地址指针预置初值。地址指针预置初值。(2 2)处处理理部部分分:为为反反复复执执行行的的程程序序段段,是是循循环环程程序序的的实实体体,也也是是循循环程序的主体。环程序的主体。(3 3)循循环环控控制制部部分分:其其作作用用是是修修改改循循环环变变量量和和控控制制变变量量,并并判判断断循循环环是是否否结束,直到符合结束条件时,跳出循环为止。
45、结束,直到符合结束条件时,跳出循环为止。(4 4)结束部分)结束部分:这部分主要是对循环程序的结果进行分析、处理这部分主要是对循环程序的结果进行分析、处理和存放。和存放。第34页,此课件共71页哦 单循环程序一般有以下两种典型结构:单循环程序一般有以下两种典型结构:第35页,此课件共71页哦 双重循环程序的结构:双重循环程序的结构:第36页,此课件共71页哦 在应用系统程序设计时在应用系统程序设计时,有时经常需要将数据存储器中各部分地址单有时经常需要将数据存储器中各部分地址单元作为工作单元,以存放程序执行的中间值或执行结果元作为工作单元,以存放程序执行的中间值或执行结果,因此,在使用因此,在使
46、用这些工作单元之前,必须将工作单元清零。工作单元清零可用循环程序完这些工作单元之前,必须将工作单元清零。工作单元清零可用循环程序完成。成。例:假设在内部例:假设在内部RAMRAM区,开辟区,开辟9696个工作单元,工作单元首地址为个工作单元,工作单元首地址为20H20H,则工作单元清零程序子程序如下,则工作单元清零程序子程序如下:ORG 1000H ORG 1000H CLR0 CLR0:MOV R0MOV R0,#20H#20H;循环初始化部分;循环初始化部分 MOV R7MOV R7,#96#96;CLR ACLR A LOOP LOOP:MOV R0MOV R0,A A;循环体部分循环体
47、部分 INC R0INC R0;修改变量修改变量 DJNZ R7DJNZ R7,LOOPLOOP;循环控制部分;循环控制部分 RETRET END END思考题(补充作业题):如采用思考题(补充作业题):如采用CJNECJNE指令,应如何修改程序?指令,应如何修改程序?第37页,此课件共71页哦 例:两个三字节二进制无符号数相加,被加数放在内部例:两个三字节二进制无符号数相加,被加数放在内部RAM 20HRAM 20H22H22H单元(低字节存放在低地址单元,高字节存放在高地址单元,即低位在单元(低字节存放在低地址单元,高字节存放在高地址单元,即低位在前,高位在后),加数放在前,高位在后),加
48、数放在2AH2AH2CH2CH单元,和放在单元,和放在20H20H22H22H单元,最高位单元,最高位如有进位,则放在如有进位,则放在23H23H单元中。单元中。解:数据类型(二、十进制数,有、无符号数);数据结构(升、降序排列)解:数据类型(二、十进制数,有、无符号数);数据结构(升、降序排列)被加数(被加数(N1N1)高字节(高字节(8 8位)位)中字节(中字节(8 8位)位)低字节(低字节(8 8位)位)加数(加数(N2N2)高字节(高字节(8 8位)位)中字节(中字节(8 8位)位)低字节(低字节(8 8位)位)被加数(被加数(N1N1)加数(加数(N2N2)和(和(N3N3)20H2
49、0H单元单元低字节(低字节(8 8位)位)2AH2AH单元单元低字节(低字节(8 8位)位)20H20H单元单元 低字节(低字节(8 8位)位)21H21H单元单元中字节(中字节(8 8位)位)2BH2BH单元单元中字节(中字节(8 8位)位)21H21H单元单元 中字节(中字节(8 8位)位)22H22H单元单元高字节(高字节(8 8位)位)2CH2CH单元单元高字节(高字节(8 8位)位)22H22H单元单元 高字节(高字节(8 8位)位)23H23H单元单元进位位进位位第38页,此课件共71页哦被加数被加数 N1 N1 高字节(高字节(8 8位)位)中字节(中字节(8 8位)位)低字节(
50、低字节(8 8位)位)加数加数 N2 N2 高字节(高字节(8 8位)位)中字节(中字节(8 8位)位)低字节(低字节(8 8位)位)+)进位位()进位位(CYCY)进位位(进位位(CYCY)进位位(进位位(CYCY)和和 N3 N3 进位进位 高字节(高字节(8 8位)位)中字节(中字节(8 8位)位)低字节(低字节(8 8位)位)程序流程框图程序流程框图 程序清单程序清单思考题:统计正数、负数、零的个数。思考题:统计正数、负数、零的个数。第39页,此课件共71页哦 ORG 0030H ORG 0030HADDDUOADDDUO:MOV R0MOV R0,#20H#20H;循环初始化部分循环