第4章汇编语言程序设计优秀课件.ppt
《第4章汇编语言程序设计优秀课件.ppt》由会员分享,可在线阅读,更多相关《第4章汇编语言程序设计优秀课件.ppt(86页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第4章汇编语言程序设计第1页,本讲稿共86页 MCS-51 MCS-51单片机汇编语言源程序的格式单片机汇编语言源程序的格式本章内容本章内容本章内容本章内容 汇编语言程序设计讲解汇编语言程序设计讲解第2页,本讲稿共86页 了解汇编语言源程序的基本格式了解汇编语言源程序的基本格式 掌握汇编语言程序设计的一般步骤以掌握汇编语言程序设计的一般步骤以及算逻处理程序、数制转换程序、分支及算逻处理程序、数制转换程序、分支程序、延时程序的设计方法。程序、延时程序的设计方法。学习目的学习目的学习目的学习目的第3页,本讲稿共86页4.1 4.1 汇编语言源程序的格式及设计汇编语言源程序的格式及设计 一.汇编语言
2、源程序的格式 语句格式:标号:操作码 操作数 1,操作数2;注释 第4页,本讲稿共86页标标号号:一一条条指指令令或或一一段段程程序序的的标标记记,即即符符号号地地址址。加加在在指指令令之之前前,标标号号必必须须以以字字母母开开始始,后后跟跟1-81-8个个字字母母或或数数字字,并并以以“:”结结尾尾,用用户户定定义义的的标标号号不不能能和和汇汇编编保保留留符符号号(包包括括指指令令操操作作码码助助记记符符以以及及寄寄存存器器名名等等)重重复复。标标号号的的值值是是它它后后面面的的指指令令存存储储地地址。址。操操作作码码:指指令令的的英英文文缩缩写写表表示示,即即助助记记符符。由由是是用用与与
3、指指令令功能一致的功能一致的2-52-5个英文字母所组成,如个英文字母所组成,如JBJB、MOVMOV、CJNECJNE、LCALLLCALL等。等。第5页,本讲稿共86页操操作作数数:是是参参与与该该指指令令操操作作的的操操作作数数或或操操作作数数所所在在的的地地点点。是是参参与与操操作作的的数数据据来来源源和和操操作作结结果果存存放放的的目目的的单单元元。它它以以一一个个或或几几个个空空格格和和操操作作码码隔隔开开,根根据据指指令令功功能能的的不不同同,操操作作数数可可以以有有1 1、2 2、3 3个个或或没没有有(如如NOPNOP)。无无操操作作数数指指令令其其操操作作数数隐隐含含在在操
4、操作作码码中中。操操作作数数之之间间以以“,”分分开开。操操作作码码和和操操作作数数一一起起便是指令自身。便是指令自身。注释:注释:用来说明语句或程序的功能,以用来说明语句或程序的功能,以“;”开始。开始。第6页,本讲稿共86页1.1.1.1.标号标号标号标号通常由通常由1 16 6个字符组成个字符组成第一个字符必须是英文字母第一个字符必须是英文字母与指令的操作码之间用冒号分开与指令的操作码之间用冒号分开没有必要每条指令都采用标号没有必要每条指令都采用标号第7页,本讲稿共86页2.2.地址单元和机器码地址单元和机器码地址单元:地址单元:指明每条指令在程序存储器指明每条指令在程序存储器中的存放首
5、地址中的存放首地址机器码:机器码:本行指令译出的机器码本行指令译出的机器码放在标号前面放在标号前面第8页,本讲稿共86页二.单片机MCS-51汇编语言程序设计步骤(1/3):1 分析问题确定问题的任务工作过程现有条件:已知的数据,对运算的精度和速度的要求等硬件设计第9页,本讲稿共86页二.单片机MCS-51汇编语言程序设计步骤(2/3):2 确定算法将实际问题转化为数学算法分析有几种可能的数学算法对不同的数学算法进行分析、比较,选择最佳的算法 3 设计程序流程图用各种符号、图形及有向线段等来直观地描述程序设计的过程第10页,本讲稿共86页二.单片机MCS-51汇编语言程序设计步骤(3/3):4
6、 分配内存单元 5 编写汇编语言源程序格式:标号:操作码 操作数 注释。编写时应加注注释,以加强程序的可读性。6 调试程序第11页,本讲稿共86页三.MCS-51汇编语言程序设计方法和技巧(1/2):1 模块化的程序设计方法划分模块的原则每个模块具有独立的功能,产生一个明确的结果;模块之间的控制偶合(指模块的进入和退出条件及方式)应尽量简单;模块之间的数据偶合(指信息交换的方式,交换量的多少及频繁程度)应尽量少;模块长度适中。太长调试困难失去了其优越性;太短则模块连接又太复杂。第12页,本讲稿共86页三.MCS-51汇编语言程序设计方法和技巧(1/2):2 编程技巧尽量采用循环结构和子程序。可
7、以大大减少程序的总容量,提高效率,节省空间;尽量少用无条件转移指令,使程序条理更清楚,减少错误;累加器是信息传递的枢纽,在子程序中一般不必把累加器内容压入堆栈。第13页,本讲稿共86页四.汇编语言程序的基本结构 1 顺序结构:程序中没有分支,循环,调用,只按顺序一条一条地执行,是最简单的程序结构。2 分支结构:根据条件对程序的执行进行判断,满足条件程序则发生转移,否则按顺序执行。3 循环结构:当需要连续重复某个算法,可以在程序中设计可以反复执行的程序段(称为循环体)来实现。这既可以简化程序,还使程序结构紧凑,可读性好。4(中断)子程序结构:对于需要多次应用、完成相同功能的算法,常把它们独立出来
8、,作为一个程序段来调用(子程序调用ACALL/LCALL或中断调用)。第14页,本讲稿共86页4.2 4.2 顺序程序设计顺序程序设计 例例1.将将外外部部数数据据存存储储器器的的000EH和和000FH单元的内容交换。单元的内容交换。方方法法:没没有有直直接接作作外外部部存存储储器器数数据据交交换换的的指指令令。只只有有通通过过A并并用用MOVX指指令令来来访访问问外外部部存存储储器器。并并用用20H作作为为中中间间暂暂存存环环节节,R0,R1间间址址表表示示两两单单元元的的低低8位位地地址址,高高8位位地址由地址由P2(地址总线输出高地址总线输出高8位地址位地址)表示。表示。第15页,本讲
9、稿共86页相应的程序如下:相应的程序如下:相应的程序如下:相应的程序如下:ORG0000HMOVP2,#00H;送地址高位至;送地址高位至P2口口MOVR0,#0EH;R0=0EHMOVR1,#0FH;R1=0FHMOVXA,R0;A=(000EH),即即(000EH)中的数据送到中的数据送到A中中MOV20H,A;(;(20)=(000EH),即即(000EH)中的数据送到中的数据送到20H中中MOVXA,R1;A=(000FH),即即(000FH)中的数据送到中的数据送到A中中XCHA,20H;(20H)A,使得,使得A=(000EH),(20H)=(000FH)MOVXR1,A;A=(0
10、00EH)(000FH),(000EH)中的数据送到中的数据送到(000FH)中中MOVA,20H;A=(000FH)。(000FH)中的数据送到中的数据送到A中中MOVXR0,A;A=(000FH)(000EH),送回变换后的数据送回变换后的数据SJMP$;$表示本指令首地址表示本指令首地址,跳转到本指令开始处跳转到本指令开始处,即原地循环即原地循环,;实现动态停机实现动态停机END第16页,本讲稿共86页例2.将内部数据存储器的(31H)和(30H)单元中的16位数求其补码后放回原单元。方法:数M的补码计算:+(M)补=(M)原,-(M)补=(M)反+1。计算步骤:(1)判断数的正负。(2
11、)低8位取反加1,高8位取反加低位的进位。注意:不能用INC(增1)指令,因为,该指令不影响标志位C。第17页,本讲稿共86页相应的程序如下:相应的程序如下:相应的程序如下:相应的程序如下:相应的程序如下:相应的程序如下:ORG0000HMOVA,31H;送数据高位至;送数据高位至AJBACC.7,CPLL;检查;检查A第第7位是否是位是否是1(负负)。若是就转移到。若是就转移到;CPLL,否则,继续。,否则,继续。SJMP$;是正数;是正数,补码补码=原码,结束。原码,结束。CPLL:MOVA,30H;送低位数据到;送低位数据到A中中CPLA;A取反取反ADDA,#01H;A+1A,低,低8
12、位加位加1。MOV30H,A;送回求补后的低位数据到;送回求补后的低位数据到30H中中MOVA,31H;送高位数据到;送高位数据到A中中CPLA;A取反取反ADDCA,#00H;A+CA,加低,加低8位的进位。位的进位。ORLA,#80H;A.7与与1或。使或。使A.7为为1,恢复负号恢复负号MOV31H,A;送回求补后的高位数据到送回求补后的高位数据到31H中中SJMP$;结束。;结束。END第18页,本讲稿共86页例例3.设设变变量量放放在在片片内内RAM的的20H单单元元,取取值值范范围围为为00H,01H,02H,03H,04H,05H,要要求求编编一一个个查查表表程程序序,查查出出变
13、变量量的的平平方方值值,并放入片内并放入片内RAM的的21H单元中。单元中。方方法法:查查表表方方法法分分近近程程和和远远程程两两种种。此此例例用用远远程程方方法法更更好好,即即用用DPTR作作为为间间址址指针。指针。第19页,本讲稿共86页相应的程序如下:相应的程序如下:相应的程序如下:相应的程序如下:相应的程序如下:相应的程序如下:ORG0000HMOVDPTR,#TAB;建立地址指针;建立地址指针,DPTR指向表首地址指向表首地址MOVA,20H;从;从20H中读数据。中读数据。MOVCA,A+DPTR;TAB+(20H)A。查表。查表(远程查表)(远程查表)MOV21H,A;送查好的数
14、据到;送查好的数据到21H中中SJMP$;结束。;结束。TAB:DB00H,01H,04H,09H,10H,19H;平方表平方表0,1,4,9,16,25ENDORG0000HMOVA,20H;从;从20H中读数据。中读数据。ADDA,#04H;调整地址指针调整地址指针,表格地址与查表指令差表格地址与查表指令差4个字节个字节MOVCA,A+PC;PC+(20H)+2A。查表。查表(近程查表)(近程查表)MOV21H,A;送查好的数据到;送查好的数据到21H中中SJMP$;结束。;结束。TAB:DB00H,01H,04H,09H,10H,19H;平方表平方表0,1,4,9,16,25END第20
15、页,本讲稿共86页方法:方法:8 8位无符号数最大值是位无符号数最大值是(0)255,除以,除以100100得得2.55,2.55,所以商就是百位。同理所以商就是百位。同理,余数除以余数除以1010得得十位十位,余下的就是个位。由于商为余下的就是个位。由于商为0000 xxxx0000 xxxx,要求为压缩要求为压缩BCDBCD码,故可以将十位变成码,故可以将十位变成xxxx xxxx 00000000,再与个位,再与个位0000 xxxx0000 xxxx合并,形成合并,形成xxxx xxxx xxxxxxxx的形式。程序中已假定,标号均用伪指令的形式。程序中已假定,标号均用伪指令定义了具体
16、地址。如定义了具体地址。如 M MH H EQU 20H EQU 20H。例例4 4:将:将A A中二进制数转换成中二进制数转换成3 3位压缩位压缩BCDBCD码数,码数,百位数放百位数放M MH H单元中,十位、个位数放在单元中,十位、个位数放在MLML中。中。第21页,本讲稿共86页MOV B,#100DIVABMOV MH,AMOV A,#10XCHA,BDIVABSWAP AADDA,BMOV ML,ARETBINBCD:;将十进制;将十进制100送到送到B中中;A(商商)A/B,计算百位,计算百位;MHA(百位百位);A10(十进制十进制);A(10)和和B(余数余数)交换数据交换数
17、据;A(商商)A/B,商商-十位十位,余数余数-个位个位;A高低两半字节数据内容交换高低两半字节数据内容交换;AA+B(个位与十位合并个位与十位合并);MLA(保存个位与十位保存个位与十位);返回;返回第22页,本讲稿共86页4.3 4.3 分支程序设计分支程序设计例例1.在在内内部部RAM的的40H和和41H地地址址单单元元中中,有有2个个无无符符号号数数。试试比比较较这这两两数数的的大大小小,并并将将大大数数存存放放在在内内部部RAM的的GR单单元元,小小数数寸寸放放在在LE单单元元,若若两两数数相相等等,则则分分别别存存放放在在GR和和LE中。中。方方法法:CJNE指指令令具具有有比比较
18、较功功能能。可可以以直接判断直接判断2数的大小。并影响标志位数的大小。并影响标志位C。第23页,本讲稿共86页ORG0000HMOV A,40HCJNE A,41H,NoEQMOVGR,AMOVLE,ASJMP$JCLESSMOVGR,AMOV LE,41HSJMP$MOVLE,AMOV GR,41HSJMP$EQU30HEQU31HENDNoEQ:;A40H,从,从40H中取数中取数;比较;比较40H和和41H,不等转,不等转NoEQ;相等;相等40H数送数送GR;相等;相等40H数送数送LE;结束;结束;如果;如果C=1(40H41H,40H(大大)数送数送GR;40H(小小)数送数送LE
19、;结束;结束;40H0)Y=20H (X=0);X+5 (X0)试编程序,根据X的值求出Y,并放回原单元方法:用JZ指令对X与0比较。用位操作指令或逻辑运算方法判断X的正负。第25页,本讲稿共86页ORG0000HMOV A,30HJZNEXTANLA,#80HJZEDMOV A,#05HADDA,30HMOV30H,ASJMPEDMOV30H,#20SJMP$;A30H,从,从30H中取数中取数;A=0?不等则继续,等跳转?不等则继续,等跳转;A与与10000000相与,判断符号相与,判断符号;A=0?为?为0则为正,结果不变则为正,结果不变;X10)Y=20H (X=10);X+25 (X
20、10)试编程序,根据X的值求出Y,并放回原单元第27页,本讲稿共86页ORG0000HMOVA,55HCZNEA,#10,NEXTMOV 30H,#20SJMP DONEANLA,#80HJZPOSTMOV A,#25ADDA,30HMOV30H,ASJMP DONEMOV A,30HCLRCSUBB A,#2MOV30H,ASJMP$;A55H,从,从55H中取数中取数;A=10?不等则跳转,等继续?不等则跳转,等继续;X=10,Y20;结束结束;A与与10000000相与,判断符号相与,判断符号;A=0?为?为0则为正,跳转则为正,跳转;X0,A30H;清清C标志标志;AA-2;将;将Y=
21、X-2送回原单元送回原单元30H;结束;结束NEXT:DONE:POST:第28页,本讲稿共86页方法方法:注意到注意到R3R3的内容与的内容与PRPR的下标有对应关系的下标有对应关系,都是都是0 0n n。故可以将。故可以将PRPR0 0PRPRn n的入口地址列成表的入口地址列成表格格,每一项占用每一项占用2 2个单元。因此,可以用个单元。因此,可以用2xn2xn作为作为偏移量。例如,从偏移量。例如,从R3R3中取数中取数i i,那么,那么2i2i就是偏移就是偏移量,从量,从2i2i和和2i+12i+1中取中取(高高8 8位和低位和低8 8位位)数。然后,数。然后,就用间接长转移指令就用间
22、接长转移指令JMP JMP A+DPTR A+DPTR 转移到转移到PRPR2i2i中。中。例例3 3:根据根据R3R3的内容转向对应的程序,的内容转向对应的程序,R3R3的内的内容为容为0 0n,n,处理程序的入口符号地址分别为处理程序的入口符号地址分别为PRPR0 0PRPRn n(n128)(n128)。第29页,本讲稿共86页程序为:程序为:程序为:程序为:PR0EQU0110HPR0EQU0110HPR1EQU0220HPR1EQU0220HPR2EQU0330HPR2EQU0330HORG0000HORG0000HMOVA,R3MOVA,R3ADDA,ACCADDA,ACCMOVD
23、PTR,#TABMOVDPTR,#TABPUSHACCPUSHACCMOVCA,A+DPTRMOVCA,A+DPTRMOVB,AMOVB,AINCDPLINCDPLPOPACCPOPACCMOVCA,A+DPTRMOVCA,A+DPTRMOVDPL,AMOVDPL,AMOVDPH,BMOVDPH,BCLRACLRAJMPA+DPTRJMPA+DPTRDWPR0,PR1,PRnDWPR0,PR1,PRnENDENDTAB:TAB:;定义定义定义定义PR0PR0;PR1;PR1;PR1;PR1;A;AR3(R3(取数取数取数取数0n)0n);A;AA*2(A*2(乘乘乘乘2)2);用用用用DPTR
24、DPTR建立地址指针建立地址指针建立地址指针建立地址指针;把把把把AA压入堆栈压入堆栈压入堆栈压入堆栈(保护数据保护数据保护数据保护数据);取取取取地址表的地址表的地址表的地址表的高字节高字节高字节高字节(A(A改变改变改变改变);B;BA(A(保存保存保存保存高字节数据高字节数据高字节数据高字节数据);DPTR;DPTR低低低低8 8位加位加位加位加1 1;恢复恢复恢复恢复ACCACC数据数据数据数据(A*2)(A*2);取取取取地址表的地址表的地址表的地址表的低字节低字节低字节低字节;低字节数据低字节数据低字节数据低字节数据 DPTRDPTR低低低低8 8位位位位;高字节数据高字节数据高字
25、节数据高字节数据 DPTRDPTR高高高高8 8位位位位;清除清除清除清除A=0A=0;跳转到跳转到跳转到跳转到PRnPRn中中中中;PR1,PRn;PR1,PRn第30页,本讲稿共86页例4.设有5个按键0,1,2,3,4,其编码分别是3AH,47H,65H,70H,8BH,要求根据按下的键转向不同的处理程序,分别为PR0,PR1,PR2,PR3,PR4,设按键值已读出并存在B寄存器中。试编程序。方法:用CJNE指令将读出键值与键码表比较。若相等就转移到对应的处理程序中,用AJMP指令调用。调用相应的处理程序用查表方法。因AJMP指令占2字节,查表时采用乘2的方法改变偏移地址。第31页,本讲
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 程序设计 优秀 课件
限制150内