第四章汇编语言程序设计春精选文档.ppt
《第四章汇编语言程序设计春精选文档.ppt》由会员分享,可在线阅读,更多相关《第四章汇编语言程序设计春精选文档.ppt(88页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第四章 汇编语言程序设计春本讲稿第一页,共八十八页 4.1.1 程序的设计步骤与方法程序的设计步骤与方法 汇编和高级语言程序设计的过程:汇编和高级语言程序设计的过程:首首先先对对问问题题进进行行分分析析,然然后后确确定定算算法法,再再根根据据算算法法流流程编写程序,最后是调试程序。程编写程序,最后是调试程序。汇编语言程序设计的汇编语言程序设计的独特点独特点在于:在于:(1)用用汇汇编编语语言言进进行行程程序序设设计计时时,对对数数据据的的存存放放、寄寄存存器器和和工工作作单单元元的的使使用用等等要要由由设设计计者者安安排排。而而高高级级语语言言程程序序设设计计时时,这这些些工作都由计算机软件安
2、排,程序设计者不必考虑。工作都由计算机软件安排,程序设计者不必考虑。本讲稿第二页,共八十八页(2)汇编语言程序设计要求设计人员必须对所使用的汇编语言程序设计要求设计人员必须对所使用的计算计算机的硬件结构有较为详细的了解机的硬件结构有较为详细的了解。特别是对。特别是对各类寄存器、端各类寄存器、端口、定时器口、定时器/计数器、中断等计数器、中断等内容要熟悉,以便在程序设计时内容要熟悉,以便在程序设计时能熟练使用。能熟练使用。本讲稿第三页,共八十八页汇编语言程序的设计步骤:汇编语言程序的设计步骤:(1)分析问题,抽象出描述问题的数学模型)分析问题,抽象出描述问题的数学模型(2)确定解决问题的算法)确
3、定解决问题的算法(3)分配存储空间及工作单元)分配存储空间及工作单元(4)根据算法绘制流程图)根据算法绘制流程图(5)编写源程序)编写源程序(6)上机调试)上机调试本讲稿第四页,共八十八页程序质量的判断标准:程序质量的判断标准:程序的执行时间短;占用的内存单元少;程序的语句行数少。程序的执行时间短;占用的内存单元少;程序的语句行数少。本讲稿第五页,共八十八页4.1.2 汇编语言源程序的编辑和汇编汇编语言源程序的编辑和汇编1.汇编语言源程序的编辑汇编语言源程序的编辑编辑好的源程序应以“.ASM”扩展名存盘 2.汇编语言源程序的汇编汇编语言源程序的汇编源程序经机器汇编之后,若无语法错误,一般将生成
4、两个新文件,它们的扩展名分别是.OBJ和.LST。本讲稿第六页,共八十八页例例4-1 将内部将内部RAM从从30H开始的开始的10个单元的内容相加,个单元的内容相加,其和保存于其和保存于A(假设其和仍为(假设其和仍为8位数)。位数)。列表文件(列表文件(.LST)信息如下:)信息如下:地址地址 机器码机器码汇编语言源程序汇编语言源程序 注释注释 ORG2000H ;定义程序起始地址;定义程序起始地址2000 7830 START:MOVR0,#30H;初始地址送;初始地址送R02002 7A0A MOVR2,#10;循环初始值送;循环初始值送R22004 7400 MOVA,#00H;累加和初
5、始值送;累加和初始值送A2006 26 LOOP:ADDCA,R0;完成累加;完成累加2007 08 INCR0 ;修改地址;修改地址2008 DAFC DJNZR2,LOOP;循环判断;循环判断200A 80FE SJMP$;暂停;暂停 END ;程序结束;程序结束INCLUDE IN HASHTABSTART:2000LOOP:2006目标文件(目标文件(.OBJ)信息如下:)信息如下:2000200C78307A0A74002608DAFC80FE 本讲稿第七页,共八十八页4.2 4.2 汇编语言源程序的基本结构汇编语言源程序的基本结构共有四种结构形式:共有四种结构形式:顺序结构、循环结
6、构、分支结构和子程顺序结构、循环结构、分支结构和子程序结构。序结构。本讲稿第八页,共八十八页方方法法一一:用用逻逻辑辑指指令令将将高高、低低半半字字节节分分开开,对对数数字字09加加上上30H即即可可得得到到所所对对应应的的ASCII码码30H39H。ORG2000HMOVA,40H;取数;取数ANLA,#0FH;分离出低半字节;分离出低半字节ADDA,#30H;变为;变为ASCII码码MOV42H,A;保存;保存MOVA,40H;重新取数;重新取数SWAPA;高、低半字节交换;高、低半字节交换ANLA,#0FH;分离出高半字节;分离出高半字节ADDA,#30H;变为;变为ASCII码码MOV
7、41H,A;保存;保存END例例4-2 将将40H单元的高、低半字节的两个单元的高、低半字节的两个BCD码拆开并变成其码拆开并变成其ASCII码,并分别存入码,并分别存入41H和和42H单元单元 4.2.1 4.2.1 顺序结构顺序结构本讲稿第九页,共八十八页方法二:采用方法二:采用BCD数除以数除以10H的方法,可把处于高、低半字节的两个的方法,可把处于高、低半字节的两个BCD码分别移到码分别移到A和和B的低的低4位,然后再各自与位,然后再各自与30H相相“或或”即变为即变为ASCII码。参考程序如下:码。参考程序如下:ORG2000HMOVA,40H;取数;取数MOVB,#10H;送被除数
8、;送被除数DIVAB;分离高、低半字节;分离高、低半字节ORLB,#30H;低;低4位调整为位调整为ASCII码码MOV42H,BORLA,#30H;高;高4位调整为位调整为ASCII码码MOV41H,AEND例例4-2 将将40H单元的高、低半字节的两个单元的高、低半字节的两个BCD码拆开并变成码拆开并变成其其ASCII码,并分别存入码,并分别存入41H和和42H单元单元 本讲稿第十页,共八十八页例(附例(附1 1)求两个求两个8 8位无符号数的和。位无符号数的和。设设两两个个8 8位位无无符符号号数数分分别别存存放放在在内内部部RAM RAM 20H20H和和21H21H单单元元,所所求求
9、和和(不不超超过过255255)存存放放在在22H22H单元。单元。ORG 2000HSTART:MOV R0,#20HMOVA,R0INCR0ADDA,R0INC R0MOVR0,ASJMP$END只只有有这这一一种种方方法法吗吗?本讲稿第十一页,共八十八页例(附例(附2 2)求两个求两个8 8位无符号数的和。位无符号数的和。设设两两个个8 8位位无无符符号号数数分分别别存存放放在在内内部部RAM RAM 20H20H和和21H21H单单元元,所所求求和和(不不超超过过255255)存存放放在在22H22H单单元。元。ORG 2000HSTART:MOV A,20HADDA,21HMOV23
10、H,ASJMP$END本讲稿第十二页,共八十八页4.2.2 循环程序设计循环程序设计 循环初态循环初态本讲稿第十三页,共八十八页图图a a为先执行后判断,相当于为先执行后判断,相当于直到(直到(untiluntil)型循环)型循环。图图b b为先判断后执行,相当于为先判断后执行,相当于当(当(do-whiledo-while)型循环)型循环。本讲稿第十四页,共八十八页 循环程序一般由四个主要部分组成循环程序一般由四个主要部分组成:(1)初初始始化化部部分分:为为循循环环程程序序做做准准备备,如如规规定定循循环环次次数数、给给各各变变量量和地址指针预置初值。和地址指针预置初值。(2)处处理理部部
11、分分:为为反反复复执执行行的的程程序序段段,是是循循环环程程序序的的实实体体,也也是是循循环环程序的主体。程序的主体。(3)循循环环控控制制部部分分:这这部部分分的的作作用用是是修修改改循循环环变变量量和和控控制制变变量量,并判断循环是否结束并判断循环是否结束,直到符合结束条件时直到符合结束条件时,跳出循环为止。跳出循环为止。(4)结束部分结束部分:这部分主要是对循环程序的结果进行分析、这部分主要是对循环程序的结果进行分析、处理和存处理和存放。放。本讲稿第十五页,共八十八页循环:单重循环循环:单重循环 多重循环(二重以上)循环嵌套。多重循环(二重以上)循环嵌套。在在多多重重循循环环程程序序中中
12、,只只允允许许外外重重循循环环嵌嵌套套内内重重循循环环程程序序,而而不不允允许许循循环环体体互互相相交交叉叉,另另外外,也也不不允允许许从从循循环环程程序序的的外外部部跳入循环程序的内部。跳入循环程序的内部。本讲稿第十六页,共八十八页例例4-3 4-3 把外部把外部RAM 5000H50FFHRAM 5000H50FFH单元的内容清零单元的内容清零。ORG 2000HSTART1:MOVDPTR,#5000H;循环初始化;循环初始化MOV R0,#00HMOVA,#00HLOOP1:MOVXDPTR,A;循环体;循环体INCDPTRINCR0DJNZR0,LOOP1;循环控制;循环控制END本
13、讲稿第十七页,共八十八页例例4-4 4-4 将内部将内部RAMRAM从从40H40H开始连续单元的数据传送到外部开始连续单元的数据传送到外部RAMRAM从从2000H2000H开始的连续单元中,当所传送的数据为开始的连续单元中,当所传送的数据为0FFH0FFH时,时,传送停止。传送停止。解:解:ORG2000H MOV R0,#40H ;循环初始化;循环初始化MOVDPTR,#2000HLOOP:MOV A,R0 CJNE A,#0FFH,LOOP1;循环控制循环控制 SJMPNEXTLOOP1:MOVX DPTR,A ;循环体;循环体 INC R0 INC DPTR SJMP LOOP NE
14、XT:SJMP$END 本讲稿第十八页,共八十八页例例4-5 4-5 从从P1P1口重复口重复256256次读数并取平均值,平均值的次读数并取平均值,平均值的整数和小数部分分别保存于内部整数和小数部分分别保存于内部RAMRAM的的30H30H和和31H31H单元中。单元中。解:假设将解:假设将R2 R3作为作为16位寄存器以保存连续位寄存器以保存连续 256次读数的累加和次读数的累加和 ORG 4000HINTEGER EQU30HDECIMAL EQU31HAVR:MOV R2,#0;循环初始化;循环初始化 MOV R3,#0 MOV R4,#0;累加次数为;累加次数为256AVR1:MOV
15、 A,P1;循环体;循环体 ADD A,R3;累加至低;累加至低 8位位 JNC AVR2;无进位则暂存结果;无进位则暂存结果 INC R2;有进位则高;有进位则高8位加增位加增 1AVR2:MOV R3,A ;暂存低;暂存低 8位位 DJNZ R4,AVR1;循环控制;循环控制 MOV INTEGER,R2MOVDECIMAL,R3END本讲稿第十九页,共八十八页例例(附附2 2)设设单单片片机机外外部部数数据据存存储储器器起起始始地地址址为为3000H3000H的的数数据据块块中中有有100100个个补补码码,要要求求逐逐一一检检查查,若若为为负负数数则则求求补补后后放放回回,正正数则不变
16、。数则不变。ORG 1000HSTART1:MOVR7,#64H;设设置循置循环环初始初始值值MOVDPTR,#3000HLOOP1:MOVX A,DPTR JNBACC.7,LOOP2CPLAINCAMOVX DPTR,ALOOP2:INCDPTR;外部;外部RAM单单元加元加1DJNZ R7,LOOP1END本讲稿第二十页,共八十八页例例(附附3 3)有有1010个个无无符符号号数数依依次次存存放放在在内内部部RAM RAM 30H30H开开始始的的单单元元中中,求求其其和和,并并将将结果放在结果放在R2R2和和R3R3中。中。ORG 2000HMOVR0,#30HMOVR2,#00HMO
17、VR3,#00HMOVR7,#0AHNEXT:MOVA,R0;设设置循置循环环初始初始值值ADDA,R3MOVR3,AMOVA,R2ADDCA,#00HMOVR2,AINCR0DJNZR7,NEXTSJMP$END本讲稿第二十一页,共八十八页例例4.64.6设设MCS-51MCS-51单单片片机机的的时时钟钟频频率率为为fosc fosc=12 12 MHzMHz,试试设设计计延延时时50ms50ms的的延时程序延时程序。延延时时程程序序所所花花费费的的时时间间是是该该程程序序指指令令的的总总机机器器周周期期数数与与机机器器周周期的乘积。期的乘积。通常,延时程序采用通常,延时程序采用MOV和和
18、DJNZ指令来实现。指令来实现。单循环延时程序,最大的循环次数位单循环延时程序,最大的循环次数位256,则程序段为:,则程序段为:MOV R0,#00H ;机器周期数为;机器周期数为1 DJNZ R0,$;机器周期数为;机器周期数为2若单片机晶振为若单片机晶振为12MHz,则一个机器周期为,则一个机器周期为1us。延时时间:(延时时间:(1+2562)1s513s。需采用多重循环。需采用多重循环。本讲稿第二十二页,共八十八页MOVR1,#M LOOP:MOV R2,#NNOPDJNZ R2,$DJNZR1,LOOP内内 层层 循循 环环 的的 机机 器器 周周 期期 数数 为为 Tn=1+1+
19、2*N,总总 机机 器器 周周 期期 数数 为为 Tm(Tn+2)*M+1.设设N=123,M=200,则延时时间为,则延时时间为50.001ms。本讲稿第二十三页,共八十八页修改后程序清单:修改后程序清单:ORG2000HMOVR1,#0C8H(200)LOOP:MOV R2,#7BH(123)NOPDJNZ R2,$DJNZ R1,LOOPSJMP$END本讲稿第二十四页,共八十八页补充例补充例4 4 设三字节无符号数相加设三字节无符号数相加被加数:内部被加数:内部RAM 22H20H单元(低位在低字节),单元(低位在低字节),加数:加数:内部内部RAM 32H30H单元(低位在低字节),
20、单元(低位在低字节),结果:存于内部结果:存于内部RAM 22H20H单元,进位位存于单元,进位位存于23H单元。单元。利用利用ADDC指令进行多字节加法运算。指令进行多字节加法运算。本讲稿第二十五页,共八十八页ORG4200H MOV R0,#20H;被加数的低字节地址;被加数的低字节地址MOV R1,#30H;加数的低字节地址;加数的低字节地址MOV R2,#03H;循环次数;循环次数CLRCLOOP:MOV A,R0ADDC A,R1;低字;低字节节相加相加MOV R0,A;存放字;存放字节节相加相加结结果果INC R0INC R1DJNZ R2,LOOP;循;循环环控制控制MOV A,
21、#00HADDC A,#00HMOV R0,A;进进位位送位位送23HEND本讲稿第二十六页,共八十八页4.2.3 分支程序分支程序 分支程序的基本结构:单分支和多分支。分支程序的基本结构:单分支和多分支。其特点是:各处理模块是相互排斥的。其特点是:各处理模块是相互排斥的。本讲稿第二十七页,共八十八页13条条件转移指令,条条件转移指令,分别为分别为:JZ,JNZ:累加器判零转移指令;累加器判零转移指令;CJNE:比较条件转移指令;比较条件转移指令;DJNZ:减减1条件转移指令条件转移指令;JC,JNC,JB,JNB,JBC:位控制条件转移指令等四类。位控制条件转移指令等四类。本讲稿第二十八页,
22、共八十八页(1)单重分支结构单重分支结构例例4-7 4-7 片片内内RAM RAM DATA1DATA1和和DATA2DATA2两两个个单单元元中中各各存存有有一一个个无无符符号号数数字,将两个数中的小者存入字,将两个数中的小者存入MINMIN单元。单元。ORG 4000HMINEQU30HDATA1EQU31HDATA2EQU32HMOVA,DATA1;第一数送;第一数送ACLRCCJNEA,DATA2,UNEQU;两数比较;两数比较SJMPSTORE;相等,;相等,DATA1作为小的数作为小的数UNEQU:JCSTORE;有借位,;有借位,DATA1为小为小MOVA,DATA2;无借位,;
23、无借位,DATA2为小为小STORE:MOVMIN,A;小者送;小者送RAMEND本讲稿第二十九页,共八十八页例例4-8 4-8 片内片内RAMRAM两个单元中存有不相等的有符号数字两个单元中存有不相等的有符号数字X X和和Y Y,比较两数的,比较两数的大小,并将大数存入大小,并将大数存入MAXMAX单元。单元。若若X-Y0,则当(,则当(OV)0时,时,XY;当(当(OV)1时,时,XY;若若X-Y0,则当(,则当(OV)0时,时,XY;当(当(OV)1时,时,XY。图4-6 例4-8的流程图本讲稿第三十页,共八十八页ORG1000HXDEQU31HYDEQU32HMAXEQU30HCLRC
24、MOVA,XDSUBBA,YD;X-Y,形成,形成OV标志标志JZXMAX;若;若X=Y,则转向,则转向FINISH JBACC.7,NEG;若;若(X-Y)X,存存YSJMPFINISHXMAX:MOVA,XD;XY,存存XFINISH:MOVMAX,A;大数送;大数送MAX单元单元END例例4-8 4-8 片内片内RAMRAM两个单元中存有不相等的有符号数字两个单元中存有不相等的有符号数字X X和和Y Y,比,比较两数的大小,并将大数存入较两数的大小,并将大数存入MAXMAX单元。单元。本讲稿第三十一页,共八十八页(2)多重分支结构)多重分支结构例附例附5 5 设设x,yx,y分别存放在内
25、部分别存放在内部RAM 30HRAM 30H和和40H40H中,根据中,根据x x的值,的值,给给y y赋值为赋值为01H,00H,0FFH(-1).01H,00H,0FFH(-1).本讲稿第三十二页,共八十八页本讲稿第三十三页,共八十八页ORG2000HMOVA,30HJZDONEJBACC.7,LOOPMOVA,#01HSJMP DONELOOP:MOVA,#0FFHDONE:MOV 40H,ASJMP$END 本讲稿第三十四页,共八十八页(3)散转结构散转结构例例 设设R7的的内内容容为为0n,对对应应的的处处理理程程序序入入口口地地址址分分别别为为PROG0PROGn,编写散转程序。,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第四章 汇编语言程序设计春精选文档 第四 汇编语言 程序设计 精选 文档
限制150内