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