汇编语言编程框架.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
汇编语言编程框架

第二十一课:汇编程序的基本结构 责任编辑:刘昆山   程序编写做到:占用存储空间少;运行时间短;程序的编制、调试及排错所需时间短;结构清晰,易读、易于移植。按结构化程序设计思想,任何复杂程序都可由顺序结构、分支结构、循环结构等构成。如图1所示。 一、顺序程序举例   例1、设在外RAM的60H单元存有1个字节代码,要求将其分解成两个4位字段,高4位存入原单元的低4位,其低4位存入61H单元的低4位,且要求这两个单元的高4位均为0,试编制完整程序。 解: 字节分解: 二、分支结构与分支程序设计   结构:根据不同的条件,进行相应的处理。通常用条件转移指令形成简单分支结构。   如: 判(A) = Z 或 NZ ,转移 判(CY)= 1 或 0 ,转移 判(bit)=1 或 0 ,转移 CJNE 比较不相等转移例   3、设a存放在累加器A中,b存放在寄存器B中,要求按下式计算Y值,并将结果Y存于累加器A 中,试编写程序。 解:本题关键是判a是正数,还是负数;由ACC7便知。   例4、设有两个16位无符号数NA,NB分别存放在8031单片机内部RAM的40H、41H及50H、51H单元中,当NA NB时,将内部RAM的42H单元清0;否则,将该单元置成全1,试编程。   解法I:因为无16位数的比较指令,所以,只能用8位数的比较指令。(画出流程框图) 上述程序中多次用到SJMP语句,该语句为无条件转移语句。无条件语句应尽量少用,这样可使程序结构紧凑而易读,易理解。 解法II:先假设NA NB,再来判断是否NA ≤ NB   循环结构不但使程序简练,而且大大节省存储空间。   循环程序包含四部分:初始化部分循环处理部分(主体)   循环控制部分(修改地址指针、修改变量、检测循环结束条件)   循环结束部分(对结果分析、处理,存放结果)   循环有:单循环、多重循环。   循环次数已知,可用计数器控制循环次数;   循环次数未知,按问题条件控制循环是否结束。   一、单循环程序   1、循环次数是已知的程序   例1、已知片外RAM的10H单元存放8位二进制数,要求将其转移成相应的ASCII码,并以高位在前,低位在后的顺序,依次存放到片外RAM以11H为首地址的连续单元中,试编程。 解:先将中间单元置成30H,然后判欲转换位是否为1,若是,则将中间单元内容加1;否则,中间单元内容保持不变。通过左移指令实现由高到低的顺序进行转换。 2)循环次数未知的程序   例2、设用户用键盘输入长度不超过100字节的字符串放在8031单片机外部RAM以20H为首地址的连续单元,该字符串用回车符CR(CR= 0DH)作为结束标志,要求统计此字符串的长度并存入内部RAM的1FH单元中。解:从首单元开始取数,每取一数判断其是否为CR,是则结束。 2、多重循环设计循环体中还包含着一个或多个循环结构,即双重或多重循环。   例3、设8031使用12MHz晶振,试设计延迟100ms的延时程序。解:延时程序的延迟时间就是该程序的执行时间,通常采用MOV和DJNZ二指令。T = 12 / fosc = 12 / (12×106)= 1us 内循环延时: (1 + 2 × CTR)T = 500us(假设) 则CTR = 250   实际延时:[1 + 2 × 250] × 1us = 501us   外循环延时:T +(501 + 2T)× CTS = 100ms = 100 000us   所以 , CTS = 198.8 取 199   实际延时:[1 + (501 + 2)×199] = 1000.98ms   例4、设在8031内部RAM中存一无符号数的数组,其长度为100,起始地址是30H,要求将它们从大到小排序,排序后仍存放在原区域中,试编者按程。   这就是所畏的“冒泡法”。   实际上大多情况,用不到99次循环,排序就结束。为了提高排序速度,程序中可设一交换标志位, 如10H位,每次循环中:若有交换则 SETB 10H若无交换则 CLR 10H   每次循环结束时,测10H位,判断排序是否结束。 更多资料请来教师吧:

文档评论(0)

qwd513620855 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档