第十三次课 4-7子程序说明文件(微机原理).ppt

第十三次课 4-7子程序说明文件(微机原理).ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第十三次课 4-7子程序说明文件(微机原理)

4.3 汇编语言程序设计的基本方法 一、程序设计步骤 二、源程序的汇编、连接与调试 三、IBM PC 汇编语言程序源程序的完整结构及伪指令 四、顺序结构 五、分支结构 六、循环结构 七、子程序 八、DOS系统功能调用 九、字符串处理 十、宏指令 七、 子程序 1、过程定义 六、 子程序 概念:子程序为功能确定、且独立的程序段。 优点: 可以将任何一段独立的程序归整为一个子程序,当需要该段程序时,只需调用子程序即可,调用后会自动返回到调用指令的下一条指令。因此采用子程序设计时,可以简化程序设计。 从调试程序的角度,由于原本在多处出现的程序段,缩减为子程序调用指令,使调试程序更加方便。 缺点: 采用子程序设计后。由于调用子程序和从子程序中返回需要执行指令,并且为保护某些寄存器的内容,需要进行压入堆栈和弹出堆栈的操作,因此会使程序执行速度受到一定的影响。 六、 子程序 实现: 子程序调用是通过自动修改(IP)和/或(CS)的内容实现的。 为了确保子程序调用后能够返回到调用指令之后,CALL指令会自动保存返回地址(IP和/或CS),而RET指令会自动返回到CALL指令的下一条指令。 六、 子程序 2、调用和返回指令 CALL指令: 段内调用 段间调用 段内直接调用 段内间接调用 段间直接调用 段间间接调用 六、 子程序 (IP) (cs) 段内调用 子过程与原调用程序在同一代码段,在调用之前会自动把断点的偏移地址压栈(调用指令的下一条指令的地址) 断点 入口地址 CALL TIMER CALL WORD PTR [SI] 六、 子程序 段间调用 子过程与原调用程序不在同一代码段,在调用之前会自动把断点的段基地址和偏移地址压栈。先将断点的CS压栈,再压入IP。 CALL FAR PTR TIMER CALL DWORD PTR [SI] 六、 子程序 返回指令 格式: RET RETF 近返回:从栈顶弹出两个字节内容送IP, SP内容加2 远返回:从栈顶弹出四个字节内容分别 送CS和IP,SP内容加4 从堆栈中弹出断点地址,返回源程序。 段内返回(近返回) 段间返回(远返回) 断点 入口地址 六、 子程序 3、主程序和子程序间的参数传递 入口参数:将主程序给子程序提供的初始数据或获得初始数据的信息称为子程序的入口参数。 出口参数:子程序返回给主程序的结果称为子程序的出口参数。 参数传递可用以下3种方法完成 : *利用寄存器 *利用内存单元(变量)传递参数。 *利用堆栈 六、 子程序 4、子程序说明文件 六、 子程序 5、过程的嵌套、递归调用 过程的嵌套 六、 子程序 递归调用 当子程序嵌套时,若某子程序要调用的子程序就是其本身,则称为递归调用。 例1 子程序设计,编写子程序实现统计一个字(AX)中“1”的个数。 解:利用移位指令或循环移位指令,每次对CF位进行检测: 当CF=1时,则总个数加1; 当CF=0时,则总个数不变。 这种操作可以采用有条件转移指令来实现,也可采用方便的ADC指令实现。子程序如下: 六、 子程序 COUNTER1 PROC NEAR PUSH AX MOV CX,16 XOR BL,BL COU1: SHR AX,1 ADC BL,0 LOOP COU1 POP AX RET COUNTER1 ENDP 六、 子程序 例1 子程序应用。利用上例设计的子程序,统计字型变量VAR1中1的个数。 解:在数据段中定义变量VAR1和CounterVar1: VAR1 DW 1234H CounterVar1 DB ? 则可在代码段中编写程序: MOV AX, VAR1 CALL COUNTER1 MOV CounterVar1,BL 执行后,结果单元CounterVar1的值为5,说明1234H中包含有5个“1”。 六、 子程序 例2 编写程序,完成将一组BCD 数转换成16 位二进制数。(BCD 数转换成16 位二进制数用子程序实现) BCD 数转换成16 位二进制数的算法步骤为: ①DX=0;(用DX 存放结果) ②取要转换的一组BCD 数中的高位→(AX) ③(DX)=(DX)*10+(AX); ④重复②、③两步,直到BCD 码的所有位都转换完为止,结果在DX 中。 六、 子程序

文档评论(0)

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

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

1亿VIP精品文档

相关文档