第4章汇编程序设计.ppt
《第4章汇编程序设计.ppt》由会员分享,可在线阅读,更多相关《第4章汇编程序设计.ppt(80页珍藏版)》请在三一办公上搜索。
1、第4章MCS-51汇编语言程序设计,4.1简单程序设计4.2分支程序设计4.3循环程序设计4.4散转程序设计4.5子程序和参数传递方法4.6查表程序设计4.7数制转换习题与思考题,咸呼孽费乒蝉夫捧塞纳率怔多金书叭椿永捂钎胸狙摘介琼辰潦瘟啪皖屏谊第4章 汇编程序设计第4章 汇编程序设计,程序设计是为了解决某一个问题而将指令有序地组合在一起的过程。程序有简有繁,但复杂程序往往是由简单的基本程序所构成的。本章将通过一些基本程序,介绍部分常用的程序设计方法。程序设计的过程大致可以分为以下几个步骤:(1)编制要解决问题的程序框图。(2)确定数据结构、算法、工作单元、变量设定。(3)根据所用计算机的指令系
2、统,按照已编制的程序框图用汇编语言编制出源程序。(4)将编制的程序在计算机上调试,直至实现预定的功能。,管硝壮雕舅闰橙唉秸猴算总庞惺拌锰妥航际厦实拯恤韩坚摸常骋色臼楞役第4章 汇编程序设计第4章 汇编程序设计,一、汇编程序功能,源程序(汇编指令程序),目标程序(机器码指令程序),汇编指令与机器码指令有一一对应的关系。汇编程序是一种翻译程序,将源程序翻译成目标程序。,了粉仅赛唱博对滑澎犬措婪知害高让慑九煮忿摆犁饼地焕闻裸限冰矢手稳第4章 汇编程序设计第4章 汇编程序设计,二、汇编程序的汇编过程 汇编有两种方法:手工汇编、机器汇编。,1、手工汇编:第一次汇编:确定地址,翻译成各条机器码,字符标号原
3、样写出;第二次汇编:标号代真,将字符标号用所计算出的具体地址值或偏移量代换。,免率孵哆塞迪具伏诌向远峪帚荆跟笆瑶豪陪琅丢闲苹幻豌积霄母幸猛女罗第4章 汇编程序设计第4章 汇编程序设计,源程序,目标程序,地址,ORG 1000H START:MOV R0,2FH MOV R2,#00H MOV A,R0 MOV R3,A INC R3 SJMP NEXT LOOP:INC R0 CJNE R0,#44H,NEXT INC R2 NEXT:DJNZ R3,LOOP MOV 2AH,R2 SJMP$END,第一次汇编,第二次汇编,1000 A82F1002 7A001004 E61005 FB100
4、6 0B1007 80NEXT1009 08100A B644NEXT100D 0A100E DBLOOP1010 8A2A1012 80FE,A82F7A00E6FB0B800508B644010ADBF98A2A80FE,肘拭礼练浩遂聊距俐恍盛束芒泞锅眩森乞洒煮亥团镐猩鹅苍饮佐卞优饺翱第4章 汇编程序设计第4章 汇编程序设计,2、机器汇编两次扫描过程。第一次扫描:检查语法错误,确定符号名字;建立使用的全部符号名字表;每一符号名字后跟一对应值(地址或数)。第二次扫描:是在第一次扫描基础上,将符号地址转换成 地址(代真);利用操作码表将助记符转换成相应的目标码。,七毒严残逼冠还惕斧胰蛹多第恤爸
5、起鼻颜葡沁驮乃团申碍返曝粮梦洞拾锰第4章 汇编程序设计第4章 汇编程序设计,三、伪指令 伪指令是告诉汇编程序,如何汇编源程序的指令。伪指令既不控制机器的操作,也不能被汇编成机器代码,故称为伪指令。,1、起始地址伪指令 ORG ORG addr16 用于规定目标程序段或数据块的起始地址,设置在程序开始处。2、汇编结束伪指令 END 告诉汇编程序,对源程序的汇编到此结束。一个程序中只出现一 次,在末尾。,遗启蜡蜂某死箱骤证郁靠皇重波寂自拨攘虚攫胀堂元麻徘馆毁骋喘燥超楷第4章 汇编程序设计第4章 汇编程序设计,3、赋值伪指令 EQU 告诉汇编程序,将汇编语句操作数的值赋予本语句的标号。格式:标号名称
6、 EQU 数值或汇编符号“标号名称”在源程序中可以作数值使用,也可以作数据地址、位地址使用。先定义后使用,放在程序开头。4、定义字节伪指令 DB 告诉汇编程序从指定的地址单元开始,定义若干字节存储单 元并赋初值。格式:标号:DB 字节数据或字节数据表,釜轰蹿殖胜睁撒篷醇坯盗惶拽灌岩雾池鹅宴树楼指砂圆铅碗峭嘴徐亭竞井第4章 汇编程序设计第4章 汇编程序设计,例、ORG 1000H PIOI:DW 7654H,40H、12、AB,6、数据地址赋值伪指令 DATA 将表达式指定的数据地址赋予规定的字符名称 格式:字符名称 DATA 表达式注:该指令与EQU指令相似,只是,可先使用后定义,放于程序开头
7、、结尾均可。,5、定义字伪指令 DW 从指定地址开始,定义若干个16个位数据,高八位存入低地址;低八位存入高地址。,涵眩湾奥邵漏郡许顶酬宣冠染祝佰撇祟孜紧硫泵耳棒麻昨揖分浇拥郎汀舰第4章 汇编程序设计第4章 汇编程序设计,7、定义空间伪指令 DS 从指定地址开始,保留由表达式指定的若干字节空间作 为备用空间。格式:标号:DS 表达式例2、ORG 1000H DS 0AH DB 71H,11H,11H;从100BH开始存放;71H11H、11H。,注:DB、DW、DS 只能用于程序存储器;而不能用于数据存储器。,埠空步没却蜕谢卿训豹畏赚绵痊垄丹杯渔闽提霖听婿泌肉茄址侯缓才嗣凶第4章 汇编程序设计
8、第4章 汇编程序设计,8、位地址赋值伪指令 BIT将位地址赋予规定的字符名称。格式:字符名称 BIT 位地址,例3、X1 BIT P12 相当于 X1 EQU 92H,炽类礼给牧拾泞甲贰瞄邻搽谣露丫拽苇荧庙歌棉佰篇己窒羔窑锻邵新俐吵第4章 汇编程序设计第4章 汇编程序设计,程序设计有时是一件很复杂的工作,但往往有些程序结构是很典型的。采用结构化编程时,有规律性极强、简单清晰、容易读写、可靠性高等特点。根据结构化程序设计的观点,功能复杂的程序结构由基本算法结构组成,基本结构有三种:顺序结构、循环结构和分支结构。,截科闯衬湘婚人搁伪毫淳稿灼麦梆疚旗糊条惰李蝇湍也坤榷嚏长窟棱统菌第4章 汇编程序设计
9、第4章 汇编程序设计,语句 3,语句 2,顺序结构,入口,语句 1,出口,分支结构,入口,条件满足否?,分支 1,出口,Y,N,分支 2,循环结构,入口,处理,修改条件,条件满足否?,Y,出口,N,快鸽范拆靶曰俩字苹名宫晤谭扦锰倍蛮往锭鞍骤傅鸯燃祟凳糖坦蹦缠嗓驹第4章 汇编程序设计第4章 汇编程序设计,4.1简单程序设计简单程序又称顺序程序。计算机是按指令在存储器中存放的先后次序来顺序执行程序的。【例4-1】两个8位的无符号数相加的和仍是8位。设内部 RAM的40H、41H单元中分别存放8位数N1、N2,两数相加的结果送42H单元。程序如下:AD1:MOV R0,#40H;设R0为数据指针 M
10、OV A,R0;取N1 INC R0;修改指针 ADD A,R0;N1+N2 INC R0 MOV R0,A;存结果 END,织迪点亡昔段息逸会悼何裤逆蚀猜贮揪斑伍仲兆钩屹诬哄跺朴轿紊着庇亚第4章 汇编程序设计第4章 汇编程序设计,【例4-2】将两个半字节数合并成一个一字节数。设内部RAM的40H、41H单元中分别存放着8位二进制数,要求取出两个单元中的低半字节,并将其合并成一个字节后存放在42H单元。程序如下:,粘刺安友驮酷翰氧祝掷范李忠涌握魄晚哼禄骚演注掇缸签愧窍搞霞梦恢捅第4章 汇编程序设计第4章 汇编程序设计,START:MOV R1,#40HMOV A,R1 ANL A,#0FH;取
11、第一个半字节 SWAP A;移至高4位 INC R1 XCH A,R1;取第二个字节 ANL A,#0FH;取第二个半字节 ORL A,R1;拼字 INC R1 MOV R1,A;存放结果 END,作帐毡零眶脑鼓司季袜涤逊日冶席魏灶辈剃汕输肉总虑炔俘学彼点涯几愿第4章 汇编程序设计第4章 汇编程序设计,以上程序均采用了寄存器寻址方式,可以方便地取数、存数。例4-2 中用XCH A,R1指令,既取出了数,又保存了中间结果。,炊汕较纫世叭原郭程瀑蛛溜县薄蘸城厦氰哀铂寝夹壁蘑迈火丝豢享辱沦桥第4章 汇编程序设计第4章 汇编程序设计,4.2分支程序设计在处理实际事务中,只用简单程序设计的方法是不够的,
12、因为大部分程序总包含有判断、比较等情况,程序将根据判断、比较的结果转向不同的分支。下面举两个分支程序的例子。,官日盼寓朗翱馒媳玻扭追掏澈执陆数缠核作谬坠粮贱羊吧松舱傈赢潞匿篇第4章 汇编程序设计第4章 汇编程序设计,【例4-3】两个无符号数比较大小。设存储单元ST1和ST2中存放着两个不带符号的二进制数,找出其中的大数存入ST3单元中。流程图如图4-1所示。,危涸柿珐耪层型懂扩发嵌孕慕起拇鹿汤没私膏冠酉你肚捉胰耪挠磋甭瘟橇第4章 汇编程序设计第4章 汇编程序设计,图4-1两个无符号数的比较流程,畴滋尊莲友牺缴阻蛋也渐童轩而吼怎痹楞剔括益泞涎粪味岗门抓拆圣萄绚第4章 汇编程序设计第4章 汇编程序
13、设计,程序如下:ST1:EQU 8040HORG 8000HSTART1:CLR C;进位位清0 MOV DPTR,#ST1;设数据指针 MOVX A,DPTR;取第一个数 MOV R2,A;暂存于R2 INC DPTR MOVX A,DPTR;取第二个数 SUBB A,R2;两数比较 JNC BIG1 XCH A,R2;第一个数大,闰蛛盎澄完假匿窘拖顶杉儡怕黍茁韭韵丽魄释靛毅才爬寐级诫揽驴灌傻媚第4章 汇编程序设计第4章 汇编程序设计,BIG0:INC DPTR MOVX DPTR,A;存大数 RET BIG1:MOVX A,DPTR;第二个数大 SJMP BIG0 END,历刷妓卫砚增零漂
14、芯寇箔矮敞露洱痒刮滑艘埃塞寇酉隅惟揖羊技兆苑紫否第4章 汇编程序设计第4章 汇编程序设计,上面程序中,用减法指令SUBB来比较两数的大小。由于这是一条带借位的减法指令,因此在执行该指令前,应先把进位位清0。用减法指令通过借位(CY)的状态判别两数的大小,是两个无符号数比较大小时常用的方法。设有两数x,y,执行x-y,当xy 时,结果无借位产生,则CY=0;反之,则CY=1,表示xy。用减法指令比较大小,会破坏累加器中的内容,故做减法前先保存累加器中的内容。执行JNC指令后,形成了分支。执行SJMP指令后,实现了程序的转移。,引所潦录宦蔼团官枫搂狄趁服帆汝报嫌硝喧季芍拔汛圃究不搏屠泳紊毫搜第4章
15、 汇编程序设计第4章 汇编程序设计,【例4-4】编制计算符号函数 y=SGN(x)的程序。设自变量x已存入标号为ARE的单元:-128 x127。y 存入标号为BUF的单元。流程图见图4-2。,践汲瓤隙慨琳馁狞凛位嚏班惺把肤不有鄂恿眨蓬憎时鸭详鬃瞧现哲堪脊毕第4章 汇编程序设计第4章 汇编程序设计,图4-2计算符号函数流程,嘲省鳞畅体王血败茹倘铀宋特指骤袒星研念询缩择术田社期炮擒虏获曙爹第4章 汇编程序设计第4章 汇编程序设计,源程序如下:ARE EQU 1050HBUF EQU 1060HORG 1000HSTART2:MOV DPTR,#AREMOVX A,DPTRJZ SUL;x=0,转
16、 SULJB ACC.7,NEG1;判x 的符号位MOV A,#01;x0,1A SJMP FINISHSUL:MOV A,#0 SJMP FINISH NEG1:MOV A,#FFH;x0,-1A FINISH:MOV DPTR,#BUF MOVX DPTR,A END,八呈盒惦抑獭棚许噎却釜筒谐本毗民嘻汛谢片辱忘淤耻疚仔给枉迢骚骂后第4章 汇编程序设计第4章 汇编程序设计,4.3循环程序设计在程序设计中,只有简单程序和分支程序是不够的。因为简单程序每条指令只执行一次,而分支程序则根据条件的不同,会跳过一些指令,执行另一些指令。它们的特点是,每一条指令至多执行一次。在处理实际事务时,有时会遇
17、到多次重复处理的问题,用循环程序的方法来解决就比较合适。,豺棺鬃白葡鞘捐即城栅做娠棍悯尚熟抿裕狙设们咒郊弃热枝叶营盖鲸椽咋第4章 汇编程序设计第4章 汇编程序设计,循环程序中的某些指令可以反复执行多次。采用循环程序,可以缩短程序,节省存储单元。当重复次数越多时,循环程序的优越性就越明显。但是程序的执行时间并不节省。由于要有循环准备、结束判断等指令,速度要比简单程序稍慢些。循环程序一般由五部分组成:(1)初始化部分:为循环程序做准备。如设置循环次数计数器的初值、地址指针置初值、为循环变量赋初值等。(2)处理部分:为反复执行的程序段,是循环程序的实体。,央瘴液易尾谱佐螟居欢炮蘸阻喧墩赡闽釉建晨婆秽
18、始椿匀套秀诺亦忙迈链第4章 汇编程序设计第4章 汇编程序设计,(3)修改部分:每执行一次循环体后,对指针作一次修改,使指针指向下一数据所在位置,为进入下一轮处理做准备。(4)控制部分:根据循环次数、计数器的状态或循环条件等检查循环是否能继续进行,若循环次数到或循环条件不满足时,应退出循环,否则继续循环。通常(2)、(3)、(4)部分又称为循环体。(5)结束部分:分析及存放执行结果。,票川铲呛咙十礁氢擞辨薛情哭肃扦疫吱敌筏更咽碉蹦盂畴绝裔鞠抢似瑚饲第4章 汇编程序设计第4章 汇编程序设计,循环程序的结构一般有两种形式:(1)先进入处理部分,再控制循环,即至少执行一次循环体,如图4-3(a)所示。
19、(2)先控制循环,后进入处理部分,即根据判断结果控制循环的执行与否,有时可以不进入循环体就退出循环程序,如图4-3(b)所示。,逮犯穿霓姬云真獭围庆戍泻誊择筋迢武挺份凝讳入消岂柔杀俭桶拂盼份枷第4章 汇编程序设计第4章 汇编程序设计,图4-3循环程序的结构形式,浸纱斑鞋期您舰苗偿哼酚求子雍储宪垃陵悸样已茹倦寻离喇枯检黎故嫌霸第4章 汇编程序设计第4章 汇编程序设计,循环结构的程序,不论是先处理后判断,还是先判断后处理,其关键是控制循环的次数。根据需解决问题的实际情况,对循环次数的控制有多种:循环次数已知的,用计数器控制循环;循环次数未知的,可以按条件控制循环,也可以用逻辑尺控制循环。循环程序又
20、分单循环程序和多重循环程序。下面举例说明循环程序的使用。,阳糯倾铃妇相阵牟弯揖绒归熊驹雌犊忙犹很倾距炸衍乙工抬算毡疏岿襟入第4章 汇编程序设计第4章 汇编程序设计,1.单循环程序1)循环次数已知的循环程序下面举几个循环次数已知的循环程序例子。【例4-5】工作单元清0。在程序设计时,有时需要将存储器中的部分地址作为工作单元,存放程序执行的中间值和结果。工作单元清0工作常常放在程序的初始化部分中。设有50个工作单元,其首址存放在DPTR中,循环次数存放在R2寄存器中,每执行一次循环,R2的内容减1,直至R2=0时,循环程序结束。流程图见图4-4,锻敷唉诈诞柱摊詹勿缉栓申淬邢馆就钞悦窿谋篡赵牺滦殉断
21、蒲川雅渭菏椅第4章 汇编程序设计第4章 汇编程序设计,图4-4工作单元清0流程图,挝抑拐烷辑爪旦爆菇胜卖哉憋纽苟辙翁虾掉汉缕妒纽宙聚产享棒平牌贬弄第4章 汇编程序设计第4章 汇编程序设计,CLEAR:CLR A MOV R2,#32H;置计数值LOOP:MOVX DPTR,A INC DPTR;修改地址指针 DJNZ R2,LOOP;控制循环 END本例中循环次数是已知的。用R2作循环次数计数器,用DJNZ指令修改计数器值,控制循环的结束与否。,咐贿肩桌逼千烫秉与粟饵寅卖田津归咬钩位邻赦耘郭东褐亩昨远吕溉舶氨第4章 汇编程序设计第4章 汇编程序设计,【例4-6】多个单字节数据求和。已知有n个单
22、字节数据,依次存放在内部RAM的40H单元开始的连续单元中,要求把计算结果存入R2、R3中(高位存R2,低位存R3)。流程图见图4-5。,鹅份癸纲京姿蚕绦拓脐劲消怠蜕病仆随股脱邮决姻账尔茹颂鹊挟岸牡酬琶第4章 汇编程序设计第4章 汇编程序设计,图4-5多个单字节数据求和流程图,叛峡杭未态了扼扁殃新缉彝冤姥稗咀鞠壳曙炭障臀厦桩胳拷直彩山腊痈乏第4章 汇编程序设计第4章 汇编程序设计,程序如下:NUM EQU 0AHORG 8000H SAD:MOV R0,#40H;设数据指针 MOV R5,#NUN;计数值0AHR5 SAD1:MOV R2,#0;和的高8位清0 MOV R3,#0;和的低8位清
23、0 CLR A LOOP:ADD A,R0;取加数 MOV R3,A;存和的低8位 JNC LOP1 INC R2;有进位,和的高8位+1 LOP1:INC R0;指向下一数据地址 DJNZ R5,LOOP END,勿尺蜜薄蚕理侥嗽垂即互炔六温劣菱尖铁豢勺厦固畏澈神曹拯武刽刚疫怯第4章 汇编程序设计第4章 汇编程序设计,上述程序中,用R0作间址寄存器,每做一次加法,R0加1,数据指针指向下一数据地址,R5为循环次数计数器,控制循环的次数。,蹭霓叔宏儒瘤携脸严椭马慰浴唐穿瞳镶昆淌弱羌俺篷莹拢搪闸哺詹洼榜艘第4章 汇编程序设计第4章 汇编程序设计,2)循环次数未知的循环程序以上介绍的几个循环程序例
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编程序 设计
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-6618262.html