微机原理与接口技术(楼顺天)-第4章5.ppt

微机原理与接口技术(楼顺天)-第4章5.ppt

ID:51594922

大小:307.50 KB

页数:47页

时间:2020-03-25

微机原理与接口技术(楼顺天)-第4章5.ppt_第1页
微机原理与接口技术(楼顺天)-第4章5.ppt_第2页
微机原理与接口技术(楼顺天)-第4章5.ppt_第3页
微机原理与接口技术(楼顺天)-第4章5.ppt_第4页
微机原理与接口技术(楼顺天)-第4章5.ppt_第5页
资源描述:

《微机原理与接口技术(楼顺天)-第4章5.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、本教案内容第4章 汇编语言程序设计汇编语言程序设计基础源程序的汇编、连接与调试分支程序设计技术循环程序设计技术子程序设计技术综合程序设计示例4.5子程序设计技术利用子程序可以大大地简化汇编语言的程序设计。宏指令是以存储空间作为代价提高执行速度的,而子程序是以降低执行速度来节省存储空间的。建议在多次调用较短的程序时使用宏指令,在多次调用较长的程序时使用子程序。在子程序设计过程中,有几个问题需要特别注意:一:主程序与子程序之间的参数传递在设计子程序时,需要从主程序获取数据,这种数据称为入口参数,同时子程序执行后可能有

2、结果数据要送给主程序,这种数据称为出口参数。主程序与子程序之间对入口参数和出口参数的传递有三种方式:(一)寄存器参数传递方式(二)存储单元参数传递方式(三)堆栈参数传递方式例如:一个延时子程序,其过程可定义如下:SOFTDLYPROCPUSHBXPUSHCXMOVBL,10DELAY:MOVCX,2801WAIT:LOOPWAITDECBLJNZDELAYPOPCXPOPBXRETSOFTDLYENDP例:设置系统日期的子程序SETTIME。功能:将变量YEAR、MONTH、DAY的内容作为时间设置系统日期。SE

3、TTIMEPROCNEARMOVAH,2BH;置功能号MOVCX,YEAR;置年参数(字)MOVDH,MONTH;置月参数(字节)MOVDL,DAY;置日参数(字节)INT21HORAL,AL;检查状态JNZERROR;日期无效转…RETERROR:…RET…YEARDW0MONTHDB0DAYDBSETTIMEENDP4.5子程序设计技术二、子程序说明文件子程序为功能独立的程序段,而且会为主程序多次调用。因此为方便使用,在编写并调试好子程序后,应该及时给子程序编写相应的说明文件,其内容应该包含下列6个部分

4、:1、子程序名2、子程序所完成的功能3、入口参数及其传递方式4、出口参数及其传递方式5、子程序用到的寄存器6、典型例子4.5子程序设计技术这里,子程序用到的寄存器是指执行子程序后可能被改变的寄存器,子程序中应该尽量少改变几个寄存器的内容,为此,需要在子程序的入口处对某些寄存器进行保护,而在出口处再恢复其内容,这样,虽然子程序中使用了这些寄存器,但从入口到出口看,这些寄存器的内容并没有改变,它们就不属于子程序用到的寄存器。在主程序设计时,就不必关心这些寄存器的内容。4.5子程序设计技术三、子程序的嵌套在子程序中还可

5、以调用其他的子程序,这时就形成的子程序的嵌套如图4-5。采用嵌套子程序设计,可以使程序结构模块化,便于编程和应用。但子程序的嵌套级数不是越多越好,而是应该适可而止,嵌套级数越多,出错的可能性就越多,这样不利于程序设计。在设计嵌套子程序时,编程时可以从上到下设计,调试时应该由下至上进行,因为只有处于下层的子程序正确后,才能对上层的子程序进行调试。图4-5多层子程序嵌套示意图4.5子程序设计技术四、递归子程序在嵌套调用中,被调用的子程序为其他子程序。当被调用的子程序是其自身时,就形成了递归调用,这种子程序称为递归子程

6、序。不是所有的子程序都可以递归调用的,设计递归子程序是一个较为复杂的过程,递归子程序必须具备两个基本条件:(1)采用堆栈参数传递方式,这样才能保证本次调用与下次调用采用不同的参数,即每次调用给入口和出口参数都分配不同的存储区域。(2)必须设定递归结束条件。设计递归子程序还应该有清晰的编程思路和明确的程序结构。设计递归子程序可以降低程序对存储容量需求,但现在计算机的存储容量已经不是问题了,因此,用户应该尽量避免采用递归子程序。4.5子程序设计技术可再入性子程序五、可再入性子程序在执行子程序期间,CPU可能会因为有中

7、断请求而转向中断服务子程序,如果在中断服务程序中又调用了该子程序,这样就形成了如图4.6所示的情况(①②③为执行流程),子程序的一次调用还没有执行完成,又调用了该子程序,如果这两次调用都能够得到正确的结果,则该子程序称为可再入性子程序。4.5子程序设计技术可再入性子程序也需要采用堆栈参数传递方式,而且设计过程较为复杂,因此建议用户尽量避免设计可再入性子程序。这里给出一种回避的较好方式,即将原本要求为可再入性的子程序复制出一份,专门供中断服务子程序调用,这样可以巧妙地回避可再入性子程序的设计。例4.9编写子程序实现

8、给缓冲区BUF中的一组字符的ASCII码加上偶校验位。解:每个字符的ASCII码只占用7位二进制数,其最高位为0。我们可以根据这7位二进制数中“1”的个数,给最高位加上“0”或“1”,使得一个字节内容的“1”个数为偶数,这称为偶检验。4.5子程序设计技术设计的子程序(SETEVEN)用于对BUFFER中的字符ASCII码加上偶检验位,其入口参数为:DI(缓冲区首地址,默认

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。