第十九讲汇编语言子程序设计方法.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第十九讲 汇编语言的子程序设计方法 4.3.4 子程序设计 采用子程序设计程序不仅能缩短总程序的长度,节省程序存储器,从程序的架构来看,子程序还具有以下优点: 简化程序逻辑结构,可以将一长段程序用一条指令来代替,增加程序的可读性。 可使程序模块化,易于程序的调试。 但子程序在应用和编制方面涉及到两个问题,即安全性和参数传递,需要特别关注。 * 一、安全性 安全性是指被调用子程序与调用程序运行的安全问题。 当程序转入子程序后,子程序运行时也要占用系统的资源(PSW、工作寄存器、存储器等),如果使用的寄存器与调用程序相同,就有可能影响原来寄存器的内容,从而破坏调用程序的运行环境,使得返回调用程序后,调用程序无法继续以前的工作。 * 子程序安全性举例 ORG 0100H MAIN: MOV R0, #30H MOV R6, #3 CLR A LOOP: MOV 40H, @R0 ACALL MULTY ADD A, 40H INC R0 DJNZ R6, LOOP SJMP $ MULTY: MOV A, 40H ADD A, 40H MOV 40H, A RET 子程序的功能是40H单元的内容乘2。子程序的运行会影响累加器ACC。 主程序中用累加器ACC进行求累加和。 * 1、保护现场法 子程序在开头部分,将本子程序影响的寄存器、存储器的内容压入堆栈保护,这就是保护现场。 然后进入子程序的工作部分,完成子程序规定的任务。 在退出子程序前,将原先压入堆栈的现场信息退还给原来的寄存器和存储器,这叫恢复现场。 最后用返回指令(RET)将程序返回至调用程序。 * 保护现场法举例 改写上个例子中的子程序。 MULTY: PUSH ACC MOV A, 40H ADD A, 40H MOV 40H, A POP ACC RET 将ACC的内容压入堆栈保护起来。 将ACC的内容弹出堆栈,予以恢复。 * 2、说明法 在子程序的入口参数中说明本子程序影响的资源。这样调用程序在调用子程序之前可以做一些准备工作,以确保程序运行的安全性。 * 说明法举例 ORG 0100H MAIN: MOV R0, #30H MOV R6, #3 CLR A LOOP: MOV 40H, @R0 PUSH ACC ACALL MULTY POP ACC ADD A, 40H INC R0 DJNZ R6, LOOP SJMP $ MULTY: MOV A, 40H ADD A, 40H MOV 40H, A RET 在子程序MULTY的入口参数说明中指出,该子程序将影响ACC。 所以在调用子程序MULTY前将ACC的内容压入堆栈保护起来。 在调用子程序MULTY后,将ACC的内容弹出堆栈予以恢复。 * 二、参数传递 子程序与循环程序不同,它是一个独立完整的程序,类似于C语言的函数。这样就有一个参数传递问题,在调用子程序前,调用程序应该先将需要子程序处理的有关参数(入口参数)放到约定的位置,这样子程序在运行时可以从约定位置取得有关参数。另一方面,在子程序运行结束前,也将有关处理结果(出口参数)存放在约定的位置。 * 子程序的入口参数和出口参数 入口参数和出口参数作为子程序的说明性内容,一般放在子程序的源程序的开头。 入口参数包含的内容有:子程序名(或子程序入口地址)、子程序需处理数据的位置、子程序影响的系统资源。 出口参数包含的内容有:子程序处理的结果存放的位置,以及有关标志位的说明。 * 1、用工作寄存器、累加器传递参数 例4-12:编制一子程序,将一个“0~9、A~F”的ASCII码转换成16进制数。需转换的ASCII码放在累加器A中,转换好的16进制数也放在累加器中。 解: 这是二进制代码之间的转换问题,为了得到算法,必须先分析两者代码之间的关系。表4-1列出了“0~9、A~F”符号对应的两种代码。 符号 0 1 2 3 4 5 6 7 8 9 A B C D E F ASCII码(H) 30 31 32 33 34 35 36 37 38 39 41 42 43 44 45 46 16进制数(H) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 表4-1 “0~9、A~F”符号对应的ASCII代码和十六进制数 * 根据题意,画程序流程图 * 根据流程图,程序编制如下 ;ASCII码转换成十六进制数代码子程序 ;入口参数:子程序名AHC,需转换的ASCII码放在累加器A中。 ;出口参数:转换好的十六进制数放在累加器A中。 AHC: PUSH PSW; 保护现场。 CLR C; Cy清0。 SUBB A, #30H

文档评论(0)

xingyuxiaxiang + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档