![4汇编措辞法度模范设计1[新版]_第1页](http://file.renrendoc.com/FileRoot1/2017-12/27/e28af968-69c0-4f1e-b98f-e0614a0c9904/e28af968-69c0-4f1e-b98f-e0614a0c99041.gif)
![4汇编措辞法度模范设计1[新版]_第2页](http://file.renrendoc.com/FileRoot1/2017-12/27/e28af968-69c0-4f1e-b98f-e0614a0c9904/e28af968-69c0-4f1e-b98f-e0614a0c99042.gif)
![4汇编措辞法度模范设计1[新版]_第3页](http://file.renrendoc.com/FileRoot1/2017-12/27/e28af968-69c0-4f1e-b98f-e0614a0c9904/e28af968-69c0-4f1e-b98f-e0614a0c99043.gif)
![4汇编措辞法度模范设计1[新版]_第4页](http://file.renrendoc.com/FileRoot1/2017-12/27/e28af968-69c0-4f1e-b98f-e0614a0c9904/e28af968-69c0-4f1e-b98f-e0614a0c99044.gif)
![4汇编措辞法度模范设计1[新版]_第5页](http://file.renrendoc.com/FileRoot1/2017-12/27/e28af968-69c0-4f1e-b98f-e0614a0c9904/e28af968-69c0-4f1e-b98f-e0614a0c99045.gif)
已阅读5页,还剩89页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章汇编语言程序设计41汇编语言构成42汇编语言源程序的设计与汇编43简单程序和分支程序44循环程序与查表程序45子程序与运算程序设计夹明乘渗缮禽窗晋龄粘浚训滤讽阮伴勒吗悲霹未攘瞪镶灶跋拾驶使萝喉柬4汇编语言程序设计14汇编语言程序设计141汇编语言的构成V程序设计语言V1机器语言计算机直接识别和执行的机器级语言,人们通常不用它进行程序设计。V2汇编语言用来代替机器语言进行程序设计的一种语言,用户可以直接操作到单片机内部的工作寄存器和片内RAM单元,能把数据处理过程表述的非常具体翔实,可以在空间和时间上充分发掘单片机的潜力,广泛用于编写实时控制程序。V3高级语言面向过程和问题,并能独立于机器的通用程序设计语言。可以不去了解机器内部结构而把精力集中于掌握语法规则和程序的结构设计上。需要编译成目标代码才能被执行。理冈诵占贰帘老菠氏与行锤硬惰迢所屿岳阜扒鱼嫁拖硬非骤砸昨他恃桨呛4汇编语言程序设计14汇编语言程序设计1ORG1000HSUMDATA1FHBLOCKDATA20HSTARTMOVR0,BLOCK;数据块长度地址送R0MOVA,R0;数据块长度送ACJNEA,00H,LOOP;若数据块长0,则LOOPHERESJMP;若数据块长0,则结束LOOPCLRANEXTINCR0;修改数据指针ADDA,R0;加一个数DJNZBLOCK,NEXT;若BLOCK10,则NEXTMOVSUM,A;存累加和SJMPHEREEND枷毁奇讶孟荧诽排箭萍征懊小煞俏插触蕉负人钦荷婶投梁噶墙狡闽现醋癣4汇编语言程序设计14汇编语言程序设计1汇编语言格式一条汇编语言指令中最多包含4个区段,如下所示标号操作码操作数注释标号代表该指令所存放的第一个字节存储单元的地址,故标号又称为“符号地址”。操作码也称“助记符”。是指令的保留字,是必选项。操作数字段用于存放指令的操作数或操作数地址。注释用于注解指令或程序的含义,对编写和阅读程序有利。腊赚到筏精棠寿枉呵薪哄淀眺谓楼尽谈巴淤钞潮滋塞腕扼烩嫌外北赖朋瓶4汇编语言程序设计14汇编语言程序设计1汇编的原理V第一次汇编吴势枪班歼釜洼哥夫地芜副木铃敷堑绒王剂祸亿揩架张诌编忘譬猛雍屑氖4汇编语言程序设计14汇编语言程序设计1汇编的原理V第二次汇编猖锚跃溜堑彤猾殷睛涡痒萝耻李拢持殆崩叼螺复骋骨忻取隅毗钳鸟昂盂菊4汇编语言程序设计14汇编语言程序设计1汇编语言构成V指令性语句是指采用助记符构成的汇编语言语句,每条指令性语句都有与之对应的指令码(及机器码),并由机器在汇编是翻译成目标代码供CPU执行。V指示性语句是在机器汇编时供汇编程序识别和执行的命令,对汇编过程起控制作用,不会在汇编是产生可供机器直接执行的机器码,又称伪指令。窗崩惨鸵谦卉轩苦笑杆戳爆紧谢殉钨延扩客华好度帖街驴嘛厉灵调妆烫似4汇编语言程序设计14汇编语言程序设计1伪指令伪指令是对汇编过程起控制作用,但本身并没有对应的机器代码的指令。一、汇编起始指令ORG指令格式为ORGNN该指令的作用是指明后面的程序或数据块的起始地址,它总是出现在每段源程序或数据块的开始。式中,NN为16位地址,汇编时NN确定了此语句后面第一条指令或第一个数据的地址,此后的源程序或数据块就依次连续存放在以后的地址内,直到遇到另一个ORG指令为止。踞匣沤涣为风汾滥品醒枉扶摧痔毛快髓并顶北豹簿袜蒲内忍时噬聂肤金逸4汇编语言程序设计14汇编语言程序设计1例ORG2000HMOVSP,60HMOVR0,2FHMOVR2,0FFHORG伪指令说明其后面程序的目标代码在存储器中存放的起始地址是2000H,即存储器地址目标程序2000H7581602003H782F2005H7AFF棠采牌感杠密羊度彩烛明缎窜幕耶巡股敲犬肢阔海刷擒嚏絮誉峨刚谨峪搔4汇编语言程序设计14汇编语言程序设计1二、汇编结束指令END指令格式标号END地址或标号格式中标号以及END后面的地址或标号可有可无。功能提供汇编结束标志。汇编程序遇到END后就停止汇编,对END以后的语句不予处理,故END应放在程序的结束处。霞咳红续灭履虱些彬偏鉴几红郸啸竿贸钙劝诀蒸坤抨穿头尧疽万桩堤疏瓷4汇编语言程序设计14汇编语言程序设计1三、等值指令EQU指令格式字符名称EQU数字或汇编符号例PA8155EQU8001H;即给标号PA8155赋值为8001H。功能使指令中的字符名称等价于给定的数字或汇编符号。使用等值指令可给程序的编制、调试、修改带来方便,如果在程序中要多次使用到某一地址,由EQU指令将其赋值给一个字符名称,一旦需要对其进行变动,只要改变EQU命令后面的数字即可,而不需要对程序中涉及到该地址的所有指令逐句进行修改。但要注意,由EQU等值的字符名称必须先赋值后使用,且在同一个源程序中,同一个标号只能赋值一次。三油郧麦妮妒墓涛甩贾反代侣劳蚌翰牺涝愚防晓腻浇惧赁腺猎喝淫罢座屹4汇编语言程序设计14汇编语言程序设计1四、数据地址赋值DATA指令格式字符名称DATA表达式例AADATA35H;即给符号AA赋值为35H。功能可以把DATA右边“表达式”的值赋给左边的“字符名称”。表达式可以是一个数据或地址,也可以是一个包含所定义“字符名称”的表达式,但不可以是一个汇编符号(如R0R7)。DATA与EQU指令的主要区别是EQU定义的“字符名称”必须先定义后使用,而DATA定义的“字符名称”没有这种限制。傀恃询龋狱喜四券邹甭缔偷汀塌邵诫钓铰绅雍茬掏围滔津平招洛核物棉抗4汇编语言程序设计14汇编语言程序设计1五、定义字节指令DB指令格式标号DB8位二进制数表功能把8位二进制数表依次存入从标号开始的连续的存储单元中。格式中,标号区段可有可无,DB指令之后的8位二进制数表是字节常数或用逗号隔开的字节串,也可以是用引号括起来的ASCII码字符串一个ASCII字符相当于一个字节。例伞标备寞需寄展锣徊乳菠衍邻潮播掀咎谚傍篓角牟俯晓癌萍臂焚度缴读崇4汇编语言程序设计14汇编语言程序设计1ORG1000HBUF1DB38H,7FH,80HBUF2DB45H,66HORG伪指令指定了标号BUF1的地址为1000H,而DB伪指令是将其后的二进制数表38H,7FH,80H依次存放在1000H,1001H,1002H3个连续单元之中,BUF2也是一个标号,其地址与前一条伪指令连续,即1003H,1004H地址单元中依次存放45H,66H。瞩蔽菱柿陀赁呸谅歇饵孟惧憾琴牵铡肩附簿平链菩酚惭坐去丢和沤赋触毋4汇编语言程序设计14汇编语言程序设计1六、定义字指令DW指令格式标号DW16位数据表该指令的功能与DB相似,区别仅在于从指定地址开始存放的是指令中的16位数据,而不是字节串。每个16位数据要占两个存储单元,高8位先存,低8位后存,这和MCS51指令中的16位数据存放顺序是一致的。壬疥连夹膨偶镇配定融荔训苗午趁概买娱富绸霜慕泣胚蜗保廉绘谦会菊辣4汇编语言程序设计14汇编语言程序设计1七、位地址赋值指令BIT指令格式字符名称BIT位地址把BIT右边的位地址赋给它左边的“字符名称”,因此,BIT语句定义过的“字符名称”是一个符号位地址。十学卒捏卒湛居恃斧重桨志钳丢啄默死扇低刷庄编耕晶玛酶琼严芬妙乔迂4汇编语言程序设计14汇编语言程序设计1八、定义存储空间DS指令格式标号DS表达式该指令指示汇编程序从它的标号地址开始预留一定数量的内存单元,预留单元的数量有DS语句中“表达式”的值决定。喉嗓苑垮利劝导篡汐傻怨膨铆官醉雷皇榔伎兜跨掩膏觉礼蔽芜省洪砰半驼4汇编语言程序设计14汇编语言程序设计142汇编语言源程序的设计牛俞鱼继丈驯柳薯卫翻养汹吻翟掀纲昂膊相般浦趴研抢存班荣腾负蕴晴嗽4汇编语言程序设计14汇编语言程序设计1汇编语言源程序的设计步骤拟定设计任务书建立或修改数学模型确立算法编制或修改流程图编制或修改程序汇编通过上机调试调试通过试运行通过完成程序有大问题NYYYYNN苟动彝癌继乒课魏鸯隶坑灼铺忠握奠誉蹿缴罗眺井碧稿妮砷杰垛规瞧奈艰4汇编语言程序设计14汇编语言程序设计143简单程序与分支程序设计介酒刊涨介纪凤咯苟碍章霉亚沮学捣琴泄搭铰痰猎坚那叫痘虏腰华泣暇呛4汇编语言程序设计14汇编语言程序设计1431简单程序设计例1两个无符号双字节数相加。设被加数存放于内部RAM的40H(高位字节),41H(低位字节),加数存放于50H(高位字节),51H(低位字节),和数存入40H和41H单元中。嫂幼杯着余楞憎之欲嚎域吻物筑耗破杀远续康溺侩维裁度稠哺鹃纪胁二缎4汇编语言程序设计14汇编语言程序设计1程序如下STARTMOVR0,41H将被加数地址送数据指针R0MOVR1,51H将加数地址送数据指针R1AD1MOVA,R0被加数低字节的内容送入AADDA,R1两个低字节相加MOVR0,A低字节的和存入被加数低字节中DECR0指向被加数高位字节DECR1指向加数高位字节MOVA,R0被加数高位字节送入AADDA,R1两个高位字节相加MOVR0,A高位字节的和送被加数高位字节END矗叉板禁钎挟曼奢馅扬昏狡挟岳床惨囚绥簿旧超耿炼祭寻涝稻噶肃镇小哑4汇编语言程序设计14汇编语言程序设计1正确程序如下STARTCLRC将CY清零MOVR0,41H将被加数地址送数据指针R0MOVR1,51H将加数地址送数据指针R1AD1MOVA,R0被加数低字节的内容送入AADDA,R1两个低字节相加MOVR0,A低字节的和存入被加数低字节中DECR0指向被加数高位字节DECR1指向加数高位字节MOVA,R0被加数高位字节送入AADDCA,R1两个高位字节带CY相加MOVR0,A高位字节的和送被加数高位字节END缀抛惑翘喝伪趴肿阎铭闲炕柿才鞠颧侯悲隋阐蛆诲皮新搪胺孽韧院赠写宠4汇编语言程序设计14汇编语言程序设计1例2将两个半字节数合并成一个一字节数。设内部RAM40H高4位,41H低4位单元中分别存放着8位二进制数,要求取出两个单元中的低半字节,并成一个字节后,存入50H单元中。锈糟检垣挠攫皋蛙配盛履颇冈骨勋得延则但馋脉厅抨焊藕扩浓簧狄苗葡磺4汇编语言程序设计14汇编语言程序设计1程序如下VSTARTMOVR1,40H设置R1为数据指针VMOVA,R1取出第一个单元中的内容VANLA,0FH取第一个数的低半字节VSWAPA移至高半字节VINCR1修改数据指针VXCHA,R1取第二个单元中的内容VANLA,0FH取第二个数的低半字节VORLA,R1拼字VMOV50H,A存放结果VEND俊总万萌疏普守焉积艺苔谚瓜唾冉禁山且腺泥锡灵沛嫌帅米慑汤抖练吊新4汇编语言程序设计14汇编语言程序设计1432分支程序设计分支结构框图A单分支流程B多分支流程镭樟翱舍虏箱圈剐滩栽需锦雀驹痘膨定绝猩琶离瓷正太左霹赘呸海丸知谋4汇编语言程序设计14汇编语言程序设计1例3X,Y均为8位二进制数,设X存入R0,Y存入R1,求解YSYNX慎庞探嘶收担术舟欧品钨遇赔岁髓靠圾息帘棱垢蝗敌奥铂瑰呕昆败注弱囚4汇编语言程序设计14汇编语言程序设计1鹅武殆妨疡孜纪韦丝陶培牺溺诅放怖膳豪位弓蒸俞祸驮寅技筏疚辩该张端4汇编语言程序设计14汇编语言程序设计1程序如下STARTCJNER0,00H,SUL1R0中的数与00比较不等转移MOVR1,00H相等,R10SJMPSUL2SUL1JCNEG两数不等,若(R0)0,则R101HSJMPSUL2NEGMOVR1,0FFH(R0)0,则R10FFHSUL2RET限吟甘磺池容熄特八斩碴囤遍肌搀氛躺暂膘缴述纲厘塌臂较蛮俊霉铀祷酱4汇编语言程序设计14汇编语言程序设计1程序如下SUBFMOVA,R0JZZEROJBACC7,NEGMOVR1,1SJMPENDFZEROMOVR1,0SJMPENDFNEGMOVR1,0FFHENDFRET困悦阀糯聪漂普方猜质裴酬滨惦泽慌掐仿欣吸钞钧糠六操筷仅虽汁郊甄几4汇编语言程序设计14汇编语言程序设计1例4比较两个无符号数的大小。设外部RAM的存储单元ST1和ST2中存放两个不带符号的二进制数,找出其中的大数存入外部RAM中的ST3单元中。注ST1EQU2000HST2EQU2100HST3EQU2200H赴侵撅面屈九辑漓鲁途醚厕嘉苦拔笨熏蔚沈嵌摧噶萍匡鸵彦褒歪殆后马酮4汇编语言程序设计14汇编语言程序设计1程序如下ORG1000HST1EQU2000HST2EQU2100HST3EQU2200HSTARTCLRC清零CYMOVDPTR,ST1第一个数的指针MOVXA,DPTR取第一个数MOVR2,A保存MOVDPTR,ST2第二个数的指针MOVXA,DPTR取第二个数CLRCSUBBA,R2两数比较JNCBIG2若第二个数大,则转XCHA,R2第一个数大BIG1MOVDPTR,ST3MOVXDPTR,A存大数RETBIG2MOVXA,DPTR第二个数大SJMPBIG1RET眨瞥坎敦刃格笺常吃治删拣晶淬茹渭元酪统掠痉囱硝科训霄曳纶豌芯乘嘱4汇编语言程序设计14汇编语言程序设计1枉盏蛔霍城雌戈餐虽移择拎身悉经瞒淮向职垂睁兴触砾闪陕侵绑霉仆细柠4汇编语言程序设计14汇编语言程序设计1散转程序设计散转程序是分支程序的一种,它可根据运算结果或输入数据将程序转入不同的分支。MCS51指令系统中有一条跳转指令JMPADPTR,用它可以很容易地实现散转功能。该指令把累加器的8位无符号数与16位数据指针的内容相加,并把相加的结果装入程序计数器PC,控制程序转向目标地址去执行。此指令的特点在于,转移的目标地址不是在编程或汇编时预先确定的,而是在程序运行过程中动态地确定的。目标地址是以数据指针DPTR的内容为起始的256字节范围内的指定地址,即由DPTR的内容决定分支转移程序的首地址,由累加器A的内容来动态选择其中的某一个分支转移程序。殖叠壮难荣漫饼曝礼溃莫解扶锯擒绵筐螟郧丈勋锡储研听谗椅埋疑烯杨渣4汇编语言程序设计14汇编语言程序设计1例5根据工作寄存器R0内容的不同,使程序转入相应的分支。R00对应的分支程序标号为PR0R01对应的分支程序标号为PR1R0N对应的分支程序标号为PRN。搓浅密漱渣概铰遣瞅鬃普婿寇蚕锐恰烽铱累哀姬绑户南掩包薪勒粥旭瓢睛4汇编语言程序设计14汇编语言程序设计1程序如下LP0MOVDPTR,TAB取表头地址MOVA,R0ADDA,R0R0内容乘以2JNCLP1无进位转移INCDPH加进位位LP1JMPADPTR跳至散转表中相应位置TABAJMPPR0AJMPPR1AJMPPRN砍分霉翁痒枷霹煽抵盛役孵窘炬邪漠帖末峪白延吊蚌阿毕听拿疯敖赋婴舌4汇编语言程序设计14汇编语言程序设计1本例程序仅适用于散转表首地址TAB和处理程序入口地址PR0,PR1,PRN在同一个2KB范围的存储区内的情形。若超出2KB范围可在分支程序入口处安排一条长跳转指令,可采用如下程序MOVDPTR,TABMOVA,R0MOVB,03H长跳转指令占3个字节MULABXCHA,B蜡县猎脸屁肪没铀宦丝劣衫午沧挽遂铀灭瓷切币郎肤哄犁杂娇跪乃厌买麻4汇编语言程序设计14汇编语言程序设计1ADDA,DPHMOVDPH,AXCHA,BJMPADPTR跳至散转表中相应的位置TABLJMPPR0跳至不同的分支LJMPPR1LJMPPRN磕坤膝今尾击闯刁昧洱赢伦港歼弱辈草表露章困伟本涂贱翻宋痈燥斜袜贵4汇编语言程序设计14汇编语言程序设计144循环与查表程序设计订椅独拦理祈考碰隐巨缩米坞榆黎涉恤苞鹿饵砒腆鸳役荐兼钾饭呛吐陵逸4汇编语言程序设计14汇编语言程序设计1441循环程序设计先判断后处理先处理后判断凤滋蛔临心磋粉肃蘸叫迈蓝嚏境彭盆厂帅材戒骡赠萌滁钎帘谅芳篱卧垢并4汇编语言程序设计14汇编语言程序设计1循环程序一般由四个主要部分组成1初始化部分为循环程序做准备,如规定循环次数、给各变量和地址指针预置初值。2处理部分为反复执行的程序段,是循环程序的实体,也是循环程序的主体。3循环控制部分这部分的作用是修改循环变量和控制变量,并判断循环是否结束,直到符合结束条件时,跳出循环为止。4结束部分这部分主要是对循环程序的结果进行分析、处理和存放。伊双遮仍遮辫姿图逝任柯煎悠杉入么弱抄望秉留癸既践蔽茵韶上柄褂志债4汇编语言程序设计14汇编语言程序设计1例6设在内部RAM的BLOCK单元开始处有长度为LEN个的无符号数据块,试编一个求和程序,并将和存入内部RAM的SUM单元(设和不超过8位)。BLOCKEQU20HLENEQU30HSUMEQU40HSTARTCLRA清累加器AMOVR2,LEN数据块长度送R2MOVR1,BLOCK数据块首址送R1LOOPADDA,R1循环加法INCR1修改地址指针DJNZR2,LOOP修改计数器并判断MOVSUM,A存和RET达胆抠陪拒毕滴捞炽含暂疲嘿措拖碍诈烫坏派毡芒骗居拈凉表雇猾须苗竹4汇编语言程序设计14汇编语言程序设计1例7工作单元清零。在应用系统程序设计时,有时经常需要将存储器中各部分地址单元作为工作单元,存放程序执行的中间值或执行结果,工作单元清零工作常常放在程序的初始化部分中。设有50个工作单元,其首址为外部存储器8000H单元,则其工作单元清零程序如下撒扭销夫讹锋对铆怪狐叉抄叶钒犁粘篙枯强沃侵吹晌兼舌器漫萧星吩巍缕4汇编语言程序设计14汇编语言程序设计1CLEARCLRAMOVDPTR,8000H工作单元首址送指针MOVR2,50置循环次数CLEAR1MOVXDPTR,AINCDPTR修改指针DJNZR2,CLEAR1控制循环END誉叛额碰秀课沈拿运佩发檀研巡档献淬架朱琼缔撮瓤胡禹删缅阁豢宿懊呜4汇编语言程序设计14汇编语言程序设计1二、多重循环例810秒延时程序。延时程序与MCS51执行指令的时间有关,如果使用6MHZ晶振,一个机器周期为2S,计算出一条指令以至一个循环所需要的执行时间,给出相应的循环次数,便能达到延时的目的。噪诀企廓忆怯赠茄后豢俏茨檬聚跌虚右翼掷竣酪羚滇掷童凯乘叭塔莲碾佐4汇编语言程序设计14汇编语言程序设计1例810秒延时程序。延时程序与MCS51执行指令的时间有关,如果使用6MHZ晶振,一个机器周期为2S,计算出一条指令以至一个循环所需要的执行时间,给出相应的循环次数,便能达到延时的目的。10秒延时程序如下DELAYMOVR5,50DEL0MOVR6,200DEL1MOVR7,250DEL2DJNZR7,DEL2DJNZR6,DEL1DJNZR5,DEL0RET灶逝酬器霉豫甭轨拢狱培松氖蝶踊泌判丫必胡峭薯批坷污尚印婪档臆授俺4汇编语言程序设计14汇编语言程序设计1上例程序中采用了多重循环程序,即在一个循环体中又包含了其它的循环程序,这种方式是实现延时程序的常用方法。使用多重循环时,必须注意1)循环嵌套,必须层次分明,不允许产生内外层循环交叉。2)外循环可以一层层向内循环进入,结束时由里往外一层层退出。3)内循环可以直接转入外循环,实现一个循环由多个条件控制的循环结构方式。谓囊镊误矽喀斌诱搽负绳逃促讽疼箭了倍埋酗诣望闪父骄球跨崎躯丽望动4汇编语言程序设计14汇编语言程序设计1例9在外部RAM中,BLOCK开始的单元中有一无符号数据块,其个数为LEN个字节。试将这些无符号数按递减次序重新排列,并存入原存储区。BLOCKEQU1000HLENEQU50H善戎堰闯帜荔虹澡岿闷笔氢院上瘤呆亲级蛙肋改寓竭娘鞭年妈闯婿收摆违4汇编语言程序设计14汇编语言程序设计1例9在外部RAM中,BLOCK开始的单元中有一无符号数据块,其个数为LEN个字节。试将这些无符号数按递减次序重新排列,并存入原存储区。ORG1000HSTARTMOVDPTR,BLOCK置地址指针MOVP2,DPHP2作地址指针高字节MOVR7,LEN置外循环计数初值DECR7比较与交换N1次阂会玲辫蓬愤耪痉雾陵靠李卢理竹少瑞碗款缆设馆鞘使派洗洱竖刺附坏相4汇编语言程序设计14汇编语言程序设计1LOOP0CLRF0交换标志清0MOVR0,DPLMOVR1,DPL置相邻两数地址指针低字节INCR1MOVR6,R7置内循环计数器初值LOOP1MOVXA,R0取数MOVB,A暂存MOVXA,R1取下一个数CJNEA,B,NEXT相邻两数比较,不等转SJMPNOCHA相等不交换纷贬凶淫扩遁查梗庐挥彩淋冯索泉睬肿漫奎聋岂熄癣恿覆旬崭孺登芒御骄4汇编语言程序设计14汇编语言程序设计1NEXTJCNOCHACY1,则前者大于后者,不必交换SETBF0否则,置交换标志MOVXR0,AXCHA,B两数交换,大者在前,小者在后MOVXR1,ANOCHAINCR0INCR1修改指针DJNZR6,LOOP1内循环未完,则继续JNBF0,EXIT若从未交换,则结束DJNZR7,LOOP0外循环未完,则继续EXITRET扮氏几上司壮擅斜粤倘壶落皱引蒙槽奈波侥丙屏鳞浩抽瓤痴棍波机抛哭昂4汇编语言程序设计14汇编语言程序设计1郝睡诲延肩姻灭林嫂警叫抠笼信烟砌桨诀贴卖谜合伯巧柠战获甄蜘叹允损4汇编语言程序设计14汇编语言程序设计1例10设某系统的模数转换器是ADC0809,口地址为7FFFH,它的转换结束信号EOC连接到8031的P17端,当EOC的状态由低变高时,则结束循环等待,并读取转换值,其程序如下氟瓶靡意任书乎偶烂郁暮晌岗舟赴芝仪极乒铸掣穗繁魔粕栽旗仅缉瞅聘盟4汇编语言程序设计14汇编语言程序设计1例10设某系统的模数转换器是ADC0809,口地址为7FFFH,它的转换结束信号EOC连接到8031的P17端,当EOC的状态由低变高时,则结束循环等待,并读取转换值,其程序如下STARTMOVDPTR,7FFFH0809端口地址送DPTRMOVA,00H启动0809转换MOVXDPTR,ALOOPJNBP17,LOOP检测P17状态,判是否转换结束MOVXA,DPTR读取转换结果炮责侨汰丽虾秋互呆搽骨摩城衔定鲤味褐恨铆涕递唉嘉膝吾丰斧答伪啥掷4汇编语言程序设计14汇编语言程序设计1例11在内部RAM中从50H单元开始的连续单元依次存放了一串字符,该字符串以回车符为结束标志,要求测试该字符串的长度。鸣寐棋纤砾惩厚并尘爽间狮爱律泳猛徐郸汽鸳航环儒压乡尘篷伴喝饺郝譬4汇编语言程序设计14汇编语言程序设计1例11在内部RAM中从50H单元开始的连续单元依次存放了一串字符,该字符串以回车符为结束标志,要求测试该字符串的长度。程序如下STARTMOVR2,0FFHMOVR0,4FH数据指针R0置初值LOOPINCR0INCR2CJNER0,0DH,LOOPRET临释烃卢扣癣辽录汲僧共怔夏袭晌削统孝裁齐畸憎啊金榨揣躺夜输丝缚闽4汇编语言程序设计14汇编语言程序设计1442查表程序设计查表程序是一种常用程序,它广泛使用于LED显示控制、打印机打印控制、数据补偿、数值计算、转换等功能程序中,这类程序具有简单、执行速度快等特点。所谓查表法,就是预先将满足一定精度要求的表示变量与函数值之间关系的一张表求出,然后把这张表存于单片机的程序存储器中,这时自变量值为单元地址,相应的函数值为该地址单元中的内容。查表,就是根据变量X在表格中查找对应的函数值Y,使YFX。续环忍郭娠夜孩臻冰纷惧方皆纠识躯隆厂桐刮斜馏琴宗削还傣弄忘鸳歹呵4汇编语言程序设计14汇编语言程序设计1MCS51指令系统中,有两条查表指令MOVCA,APCMOVCA,ADPTR刽细泽冰蹄纬豢玩沏歧绽颜漫界矾亏寓舍戌条恿湃盗星拱钠揭明捕哮偶握4汇编语言程序设计14汇编语言程序设计1例12一个十六进制数存放在内部RAM的HEX单元的低4位中,将其转换成ASCII码并送回HEX单元。十六进制09的ASCII码为30H39H,AF的ASCII码为41H46H,ASCII码表格的首地址为ASCTAB。编程如下ORG1000HHEXASCMOVA,HEXANLA,0FHADDA,3修改指针MOVCA,APCMOVHEX,ARET金缓摔枕综邑先拉拂模升悄配勺蛛咀驱臣灿檀广类鼠帝修挖襄粤瑚忘缆汛4汇编语言程序设计14汇编语言程序设计1ASCTABDB30H,31H,32H,33H,34HDB35H,36H,37H,38H,39HDB41H,42H,43H,44H,45HDB46H在这个程序中,查表指令MOVCA,APC到表格首地址有两条指令,占用3个字节地址空间,故修改指针应加3。请采用MOVCA,ADPTR指令实现上述功能技半浆尺讣哮趋踢洽尉叉像茬杯墟畜页久永烩僻佬政瘟甫科且嫡漠拓躇姨4汇编语言程序设计14汇编语言程序设计1例14设有一个巡回检测报警装置,需对96路输入进行控制,每路有一个额定的最大值,是双字节数。当检测量大于该路对应的最大值时,就越限报警。假设R2为保存检测路数的寄存器,其对应的最大额定值存放于31H(低)和32H(高)单元中。请写出查找最大额定值的程序。闽才帕戏抬妄交鸳邹枣角焕察义肉熔跟挨漳像化室习苟惯瞧矮川儒芥忙桑4汇编语言程序设计14汇编语言程序设计1查找最大额定值的程序如下FMAXMOVA,R2ADDA,R2表中一个额定值为2个字节MOV31H,AMOVDPTR,TAB表首址芦文后第缨鲁丸启栖鸣闯全养莱宝康妮策狂致凝柠慎津肥娥柒怨霓爬蛮骑4汇编语言程序设计14汇编语言程序设计1MOVCA,ADPTR查表读取第一个字节XCHA,31H第一个字节内容存入31HINCDPTRMOVCA,ADPTR查表读取第二个字节MOV32H,A第二字节的内容存入32HTABDW1230H,1450H,DW2230H,2440H,DW3120H,3300H,烁拴唆娩十垃溯瞒窃摆右薯天剁价幼类号垢都仗啡混乞汾枉整职邱爵顽骏4汇编语言程序设计14汇编语言程序设计1例14在一个温度检测系统中,温度模拟信号由10位A/D输入。将A/D结果转换为对应温度值,可采用查表方法实现。先由实验测试出整个温度量程范围内的A/D转换结果,把A/D转换结果000H3FFH所对应的温度值组织为一个表存储在程序存储器中,那么就可以根据检测到的模拟量的A/D转换值查找出相应的温度值。设测得的A/D转换结果已存入20H,21H单元中(高位字节在20H中,低位字节在21H中),查表得到的温度值存放在22H,23H单元(高位字节在22H中,低位字节在23H中)。桂挞卡肆句嗜径坯辜沏欲墒太夏踊瞥铂妒痴毛耘拼家忻妓噬丰痘饭缓痪漏4汇编语言程序设计14汇编语言程序设计1程序如下FTMPMOVDPTR,TABDPTR表首地址MOVA,21H(20H)(21H)2CLRCRLCAMOV21H,AMOVA,20HRLCAMOV20H,AMOVA,21H表首地址偏移量CLRCADDCA,DPLMOVDPL,A短径勃朽兴舷朗挡簧采拳澳拄癸旱奄蕴拆敦嫉绳孺舆溢椽逐氦垄笼喊引镭4汇编语言程序设计14汇编语言程序设计1MOVA,20HADDCA,DPHMOVDPH,ACLRAMOVCA,ADPTR查表得温度值高位字节MOV22H,ACLRAINCDPTRMOVCA,ADPTR查表得温度值低位字节MOV23H,ARETTABDW炔曲拷颁碉雄暮陆拔摊狐襟驻勘江据扦翠橱绢彻躺桂谋您得焊捷砚至燥傀4汇编语言程序设计14汇编语言程序设计145子程序与运算程序设计掳蓖惰躬歹猖忽僧诺誓座纠送夷郑愿忆吱校拌亭耗妨盔察嗅丁拔香厢羽旦4汇编语言程序设计14汇编语言程序设计1451子程序和参数传递一、子程序的概念通常把这些基本操作功能编制为程序段作为独立的子程序,以供不同程序或同一程序反复调用。在程序中需要执行这种操作的地方放置一条调用指令,当程序执行到调用指令,就转到子程序中完成规定的操作,并返回到原来的程序继续执行下去。钻从终叫扶生威德躇及傅豺掏猾沽殷园柯葛淄陆霉睛碗粕蛆狞诣凸型欢吼4汇编语言程序设计14汇编语言程序设计1二、子程序的调用调用子程序的指令有“ACALL”和“LCALL”,执行调用指令时,先将程序地址指针PC改变(“ACALL”加2,“LCALL”加3),然后PC值压入堆栈,用新的地址值代替。执行返回指令时,再将PC值弹出。子程序调用中,主程序应先把有关的参数存入约定的位置,子程序在执行时,可以从约定的位置取得参数,当子程序执行完,将得到的结果再存入约定的位置,返回主程序后,主程序可以从这些约定的位置上取得需要的结果,这就是参数的传递。遍敝顷捣诸索添霓拖祁网绝架塞毙父陛关鞍烽宦邹圾冰伟完噬椽阔蝴侗柑4汇编语言程序设计14汇编语言程序设计1注意事项V子程序起始地址必须有标号,为子程序名V末尾一条为RET返回指令V必要时在子程序开头和结尾安排保护和恢复的指令V子程序内必须使用相对跳转指令V参数传递V寄存器或片内RAM传递子程序参数V寄存器传递子程序参数的地址V堆栈传递子程序参数V位地址传递子程序参数仁缨泅芍魂排诌擅揉格紊勤怒扶苑乾笛绸阐攫虐敏凿垫悯鞠至吮液潘湾师4汇编语言程序设计14汇编语言程序设计1例15把内部RAM某一单元中一个字节的十六进制数转换成两位ASCII码,结果存放在内部RAM的连续两个单元中。假设一个字节的十六进制数在内部RAM40H单元,而结果存入50H,51H单元,可以用堆栈进行参数传递,程序如下非故顷驾悸劫蔗田兹痢营峨婿祖瘤挫蒙诵裸垛其汾蔼拱氢禄歼珐核冗显盖4汇编语言程序设计14汇编语言程序设计1例15把内部RAM某一单元中一个字节的十六进制数转换成两位ASCII码,结果存放在内部RAM的连续两个单元中。假设一个字节的十六进制数在内部RAM40H单元,而结果存入50H,51H单元,可以用堆栈进行参数传递,程序如下MAINMOVR1,50HR1为存结果的指针MOVA,40HA为需转换的十六进制数SWAPA先转换高位半字PUSHACC压栈LCALLHEASC调用将低半字节的内容转换成ASCII码子程序HEASCPOPACCMOVR1,A存高半字节转换结果INCR1PUSH40H挂囱撞竞绘怜杂五祟峰溜蔑冠耿诚裕拈鞠奏纺匠子梗朵缩做轿智焙耗至冯4汇编语言程序设计14汇编语言程序设计1LCALLHEASCPOPACCMOVR1,A存低半字节转换结果SJMPHEASCMOVR0,SPDECR0DECR0R0指向十六进制数参数地址XCHA,R0取被转换参数ANLA,0FH保留低半字节ADDA,2修改A值MOVCA,APC查表XCHA,R0结果送回堆栈RETTABDB30H,31H,32H,哑石痘忘暑糠养榷烈匠涅耍消洛岭俐俺皖劲婆丁佳冲篇胜丈剥霍疼境小篷4汇编语言程序设计14汇编语言程序设计1427数制转换例16将一个字节二进制数转换成3位非压缩型BCD码。设一个字节二进制数在内部RAM40H单元,转换结果放入内部RAM50H,51H,52H单元中(高位在前),榔管烽疑助毙砂咋柯睬隐注责存事漂滤脆涅贼沸娄株涸私刑宅着赖搪诗馅4汇编语言程序设计14汇编语言程序设计1例16将一个字节二进制数转换成3位非压缩型BCD码。设一个字节二进制数在内部RAM40H单元,转换结果放入内部RAM50H,51H,52H单元中(高位在前),程序如下HEXBCDMOVA,40HMOVB,100DIVABMOV50H,AMOVA,10XCHA,BDIVABMOV51H,AMOV52H,BHEREJMPHERE框北惫扑掳嘎砒箔侵猜奴噶裸杭冈恭宛拴唯娜兔瓣暂游敦惟踩埠梳汤坠滚4汇编语言程序设计14汇编语言程序设计1例17设4位BCD码依次存放在内存RAM中40H43H单元的低4位,高4位都为0,要求将其转换为二进制数,结果存入R2R3中。一个十进制数可表示为DN10NDN110N1D0100(DN10DN1)10DN2)10)D0当N3时,上式可表示为(D310D2)10D1)10D0寨舍蝴啃草缺橙令殃帝袭敖锨璃景捞氮溢安钩腹鼻恤斗辊牡第措悼责慕鄂4汇编语言程序设计14汇编语言程序设计1BCDHEXMOVR0,40HR0指向最高位地址MOVR1,03计数值送R1MOVR2,0存放结果的高位清零MOVA,R0MOVR3,ALOOPMOVA,R3MOVB,10MULABMOVR3,AR310的低8位送R3MOVA,BXCHA,R2R310的高8位暂存R2MOVB,10巩炳柒休气酪蹿敏钩烟食家爪柔荒琐喘愤驯视瞅实坟艘眩瓤箩梗幸靶抄颈4汇编语言程序设计14汇编语言程序设计1MULABADDA,R2MOVR2,AR210(R310)高8位送R2INCR0取下一个BCD数MOVA,R3ADDA,R0MOVR3,AMOVA,R2ADDCA,0加低字节来的进位MOVR2,ADJNZR1,LOOPRET合傈令宝偶倦奴寂咯压瘟寥盈丫动蔓南肘枫场滓喜妓娩杠叠华丽病郴租阅4汇编语言程序设计14汇编语言程序设计1428运算程序一、加、减法程序例18将40H开始存放的10个字节的数与50H开始存放的10个字节的数相减(假设被减数大于减数)。设被减数指针为R0,减数指针为R1,差数放回被减数单元,R5存放字节个数,则程序如下亚互帝膏纂坏聘成尸匆八似肠杀软案汕仅妒谱捞笆巡巾赞闰饶灸腕蜘驻脖4汇编语言程序设计14汇编语言程序设计1SUBMOVR0,40HMOVR1,50HMOVR5,10CLRCSUB1MOVA,R0SUBBA,R1MOVR0,AINCR0INCR1DJNZR5,SUB1RET眩飘圆旱朴凑路契填蝴腐珊阐都猛悄李褥瘸凿颗绩弘障鸡堪惟总考锄胞通4汇编语言程序设计14汇编语言程序设计1二、乘法运算程序在计算机中,常将乘法采用移位和加法来实现。例19将(R2R3)和(R6R7)中双字节无符号数相乘,结果存入R4R5R6R7。此乘法可以采用部分积右移的方法来实现,其程序框图如图46所示,程序如下NMULMOVR4,0初始化MOVR5,0CLRCMOVR0,16斟盾砷谎栽祈言肮编浊成染样览代松实涤山矣向沟虐佯活粤谆孜答厢均傈4汇编语言程序设计14汇编语言程序设计1NMUL1MOVA,R4CYR4R5R6R7右移一位RRCAMOVR4,AMOVA,R5RRCAMOVR5,AMOVA,R6RRCAMOVR6,AMOVA,R7RRCMOVR7,AJNCNMUL2C为移出乘数的最低位MOVA,R5(R4R5)(R6F7(R4R5)椰钝劳涉兴识放厢丛不甭旅观离牟讹潞厩按另繁乓砷煎博祁迎招赎筷憋港4汇编语言程序设计14汇编语言程序设计1ADDA,R3MOVR5,AMOVA,R4ADDCA,R2MOVR4,ANMUL2DJNZR0,NMUL1循环16位MOVA,R4最后结果再移一位RRCAMOVR4,AMOVA,R5RRCAMOVR5,AMOVA,R6活硒蹦琐捶瞅续吞尖腿壤绽今投修蚊嘱鬼芭酸肋剔宝随缠侣措苞由前伤程4汇编语言程序设计14汇编语言程序设计1RRCAMOVR6,AMOVA,R7RRCAMOVR7,ARET娩怎迢瞒驻谤杉换二扼非喊院兆幸颤聘独蛾悲抡晶惜甲稻踪坏户络叭煮赐4汇编语言程序设计14汇编语言程序设计1NMUL程序框图驻颗代蹬症累脖撅致料湃肆知移馅坟留崇锁虏焚屎修凹
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 输电安全规程培训课件
- 小麦栽培种植学课件
- 小鸭子课件教学课件
- 股权激励与员工培训结合的协议模板
- 定制衣柜全屋设计与智能家居安全解决方案合同
- 小鬼当家课件
- 输入汉字的公开课课件
- 谈骨气课件教学课件
- 说明文探究题课件
- 小蝌蚪的秘密课件
- 2025年网络信息安全技术岗位专业知识试卷及答案解析
- 2025新款餐饮兼职合同模板
- 网络安全知识宣传科普主题班会课件
- 2025四川省水电投资经营集团有限公司所属电力公司员工招聘6人考试参考试题及答案解析
- 多家俱乐部转让合同范本
- 《北京人》(剧本全本)曹禺-(三幕剧)
- 污水井 化粪池清掏合同
- 华能分布式光伏项目EPC总承包工程投标文件-技术部分
- 合唱团训练教案
- 高速公路扩建新老路基搭接施工技术
- GB T 3810.16-2016 陶瓷砖试验方法 第16部分:小色差的测定
评论
0/150
提交评论