![第4章汇编语言程序设计5._第1页](http://file2.renrendoc.com/fileroot_temp3/2021-6/3/14386226-f4cb-4892-9d75-aad16356f305/14386226-f4cb-4892-9d75-aad16356f3051.gif)
![第4章汇编语言程序设计5._第2页](http://file2.renrendoc.com/fileroot_temp3/2021-6/3/14386226-f4cb-4892-9d75-aad16356f305/14386226-f4cb-4892-9d75-aad16356f3052.gif)
![第4章汇编语言程序设计5._第3页](http://file2.renrendoc.com/fileroot_temp3/2021-6/3/14386226-f4cb-4892-9d75-aad16356f305/14386226-f4cb-4892-9d75-aad16356f3053.gif)
![第4章汇编语言程序设计5._第4页](http://file2.renrendoc.com/fileroot_temp3/2021-6/3/14386226-f4cb-4892-9d75-aad16356f305/14386226-f4cb-4892-9d75-aad16356f3054.gif)
![第4章汇编语言程序设计5._第5页](http://file2.renrendoc.com/fileroot_temp3/2021-6/3/14386226-f4cb-4892-9d75-aad16356f305/14386226-f4cb-4892-9d75-aad16356f3055.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、4. 6子程序设计4.6.1 子程序概述4& 子程序概述-子程序的引出S=|x|1 + 1|Y|1 + 11 z分析:1.计算韵函数需要多次使用求绝对值运算,2. 唯一差别是对程序变量赋不同的值。问题:1.程序设计的过程繁琐,2. 源程序代码冗余。解决方法:若把求绝对值编制成独立的程序段,当求绝对值时,就将控制转向它,执行后,将绝对值送 回使用它的程序。#子程序或过程:可被其它程序使用的独立程序段, 称为子程主程序或调用程序:使用它的程序。子程序设计是模块化程序设计的基本技术 适用情况:1. 当程序中有多处相同功能的程序段时,这个程序段就可以设计成子程序。2. 当解决复杂问题时,把复杂问题分解
2、成若干简单的子问 题,每个子问题设计成子程序。三使用子程序的好处:1 简化程序设计的过程,减少工作量,节省时间;2源程序缩短,从而节省汇编时间和存储目标码的 存储空间;3增强源程序的可读性,便于调试和维护;4有利于程序模块化、结构化,符合自顶向下的程 序设计思想;5编制好的子程序,可供其它开发软件调用。四.子程序设计时,需要考虑的问题#子程序的定义若编制的程序具有相对独立的功能并在 汇编后,可以被其他主程序调用,则这 一过程称为子程序的定义。14.6.1 |四.子程序设计时,需要考虑的问题HLTA1子程序结束#子程序的定义2.主程序与子程序之间的调用与返回HLT子程序的定义2主程序与子程序之间
3、的调用与返回3. 主程序与子程序之间的参数传递四.子程序设计时,需要考虑的问题囤HLTA1子程序结束#子程序的定义2主程序与子程序之间的调用与返回3. 主程序与子程序之间的参数传递4. 保护现场与恢复现场MAIN主程X 口参数 调用A1子程序恢复现场 返回主程序出口参数4. 6子程序设计4.6.14.6.24.6.34.6.44.6.5子程序概述子程序(过程)定义伪指令子程序调用与返回指令子程序设计方法子程序设计举例4. 6.2子程序(过程)定义伪指令子程序定义伪指令有两条:PROC和ENDP#PNPNPROCRETENDPNEAR / FAR、;说明过程开始 近的远的;过程体:说明过程结束说
4、明:近一这个子程序只能被与它处于同一个代码段的主程序调用 远一这个子程序可以被与它处于不同代码段的主程序调用1462 |例 在代码段CSEG段中定义两个子程序SUB1和SUB2CSEGSUBlSUB1SUB2SUB2CSEGSEGMENTPROCENDPPROCENDPENDSENDNEARFAR4. 6. 3子程序调用与返回指令调用:保护断点 是cs、IP全保护,还只财IP? 把子程序的入口地址CS、IP史鑑?返回:将保存的断点处值送入CS、IP1463 |#- 调用的分类1.按主程序与子程序是否在同一个代码段J段内调用近调用1段间调用远调用irJ段内调用是指在调用和返回过程中,转返地址不涉
5、及 CS的变化,只通过IP内容的变化实现控制的转返。段间调用是指在调用和返回过程中,转返地址需要 CS的变化,由CS和IP的变化共同决定控制的转返。调用的分类2.按子程序入口地址是直接还是间接给岀J黛接调用 L间接调甫直接调用即在调用指令里,直接给出子程序名或入口 地址的标号。间接调用是在调用指令中,通过某寄存器或某存储 单元指出子程序的入口地址。2.当被调用子程序为远过程时:1463 |格式:CALL PROC_NAME ;直接调用操作:1 当被调用子程序为近过程时:(1) 保护断点,即把当前指令指针IP的内容压入堆栈JSP SP - 2 t(SP+l, SP) IP(2)把子程序的入口地址
6、送入IPIP OFFSET PROC_NAME(I)保护断点,将CS内容和IP的内容压栈SP SP - 2YI (SP+1, SP) - CSr SP SP - 2(SP+1, SP) IPSP2SP-2SPIPCS(2 )把子程序所在的段基址送入CS,其所处的偏移地址送入IP:J CS J SEG PROC_NAME IP OFFSET PROC_NAME#三返回指令格式:RET操作:断点送入CS、段内返回JIP Jsp2.段间返回IP JSP JCS JIsp J1463 |IP-(SP +1, SP)-SP + 2-(SP +1, SP)-SP + 2-(SP + 1, SP)-SP +
7、 2#4. & 4子程序设计方法一主程序与子程序之间的参数传递入口参数:主程序调用子程序时,传送给子程序的需要 处理的数据。出口参数:子程序运行完后,传送给主程序的结果。MAIN主程序入口参数CALL Al出口参数Al子程序PROCHLTRETENDP参数传递的方法:釣定寄存器法” 易建存储単芫法堆栈法:约定参数地址指针法: #1.约定寄存器法(适用参数少的情况)即主程序和子程序之间,事先约定一些存放参数的 通用寄存器,将子程序的入口和出口参数放到事先约定好 的寄存器中。2.约定参数地址指针法(适用参数多的情况)当要传递的参数较多时,采用约定地址指针法,即主程序 将入口参数存放的地址送入约定的
8、地址指针,然后调用子程 序,子程序从地址指针指出的地址取出所需参数。当出口参 数较多时,可存入内存某区域,然后把其首地址指针放入约 定的寄存器中,供主程序使用。二现场的保护与恢复 现场:即某些寄存器的值和所需的标志位的值。方法:可利用堆栈来实现。说明:可在主程序中完成,也可在子程序中完成。为保持主程序和子程序之间的相对独立性,若在主程序中保护现场,则一定在主程序中恢复现场。例子:保护现场PUSH AX 恢复现场POP AX#子程序Al PROCPUSHAXPUSHBXPUSHCXPOPCXPOPBXPOPAXRETENDPAl;保护现场;恢复现场#二子程序说明文件1465 |4. 6. 5子程
9、序设计举例子程序设计的步骤1确定功能界面功能界面:即是主程序和子程序各自完成什么功能。2 确定参数界面参数界面:即分析有哪些入口参数?哪些出口参数? 进而确定合适的参数传递方法。3 编制子程序说明文件4分别设计主程序和子程序,并进行调试。作用:使子程序便于阅读、维护和使用。包含内容:1 子程序名: 子程序入口地址。2子程序功能:子程序要完成的任务。3 入口参数: 主程序提供给子程序的入口参数 (包括参数个数及存放位置)。4 出口参数:子程序提供给主程序的运行结果,即出口参数(包括参数个数及存放位置)5 使用寄存器:说明子程序运行后,有哪些寄存器的内容 被破坏?1465 |约定寄存器法z = V
10、2x+V3y+V150例1编制程序计算:r=设X、Y为小于20000的无符号字数据,计算结果存入Z单元。 分析:1 功能:设计一个子程序和一个主程序子程序求双字节整数的平方根的整数部分,主程序完成将三次开方的平方根相加。2入口参数:被开方数放在DX中,出口参数:平方根放在DX中o3. 子程序说明文件(1) 子程序名:SQROOT1 ;(2) 子程序功能:求双字节整数的平方根的整数部分;(3) 入口参数:被开方数在DX中;(4) 出口参数:平方根在DX中;(5) 使用的寄存器:BX, CX, DX及标志寄存器F。子程序代码1465 |4子程序算法分析W:从1开始连续i个奇数之和是i的平方傻目0匸
11、+ 3 + 5 + 7 + 9 = 25; N =25 ”: : i = 6; F+3 + 5+ 7 + 9 +11=36 ; N = 36:结论: 整数N的平方根可以通过从N中依次咸去1; 3, 5.的连续奇数,所够减的次数i即是该数平方根。例如,SUB DX, BX jADD BX, 2 IZl-31016-7=99-9=0结束循环两个条 #:正好减为0 和不够减一共减了5次,则5就是25的平方根。SQROOT1PROCNEAR;子程序开始MOVBX, 1;形成奇数,初始值为XORex, ex;减奇数个数寄存器清0SQRTl:SUBDX, BXANDDX, DXJZSQRT2JSSQRT3
12、INCexADDBX, 2JMPSQRTlSQRT2:INCexSQRT3:MOVDX, CX;存平方根RET;返回SQROOT1ENDP;子程序结束DSEGSEGMENTXDW12345YDW2469ZDW?DSEGENDSCSEGSEGMENTMOV DX, X ADD DX, DX CALL SQROOT1 PUSH DXMOV DX, YMOV AX, DX ADD DX, DX ADD DX, AXCALL SQROOT1 PUSH DXMOV DX, 150 CALL SQROOT1主要程序代码|POP AXADD AX, DXPOP DXADD AX, DXMOV Z, AXMO
13、V AH, 4CHINT 21HSQROOT1 PROC NEARRETSQROOT1 ENDPCSEG ENDSEND START1465 |#约定参数地址指针法编制程序完成分别统计三组字数据中正数的个数。已知这三 组字数据分别存放在内存SI、S2、S3开始的单元,每组字数据的长度分别存放在内存LJ L2、L3字变量,要求将统计 的结果分别存放在内存Nl、N2、N3字变量。分析:1.功能:设计一个子程序和一个主程序子程序完成对一组字数据中正数个数的统计, 主程序完成调用子程序并将统计结果存入指定变量。2入口参数:每组字数据首地址放在SI中,数据长度放在CXo出口参数:正数个数放在AX中。3.
14、子程序说明文件(1)子程序名:PCOUNT;子程序功能:统计一组字数据中正数个数;(3)入口参数:每组字数据首地址放在SI中,数据长度放在CX中;(4) 出口参数:正数个数放在AX中;(5)使用的寄存器:AX, CX, 寄存器F。SI, DX及标志1465 |子程序代码PCOUNTPROCNEARXORAX, AXCONT:MOVDX, SIANDDX, DXJSNEXTINCAX;子程序开始#NEXT:ADDSI, 2LOOPCONTRETPCOUNTENDP;子程序结束S1S2S3L1L2L3N1N2N3DWDWDWDWDWDWDWDWDW1,2, 45,3, 21,34, 20, 98,1234, -30 20005001
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度二手房贷款买卖合同(智能家居升级版)
- 2025版医疗器械临床试验临床试验现场监查服务合同
- 2025年度密封胶产品环保认证与评价合同
- 2025年度环保设备研发与制造合同
- 2025高考作文预测:需求诚可贵创新价更高
- 制定市场推广计划的实施步骤
- 固定资产管理流程优化计划
- 如何制定有效的危机应对计划
- 图书编辑员的工作计划
- 学校学期学业规划计划
- 城市绿化与生态环境改善
- 2024-2025学年中小学校第二学期师德师风工作计划:必看!新学期师德师风建设秘籍大公开(附2月-7月工作安排表)
- 《急性心力衰竭的急救处理》课件
- 小学六年级数学上册《简便计算》练习题(310题-附答案)
- 青海省西宁市海湖中学2025届中考生物仿真试卷含解析
- 2024年河南省《辅警招聘考试必刷500题》考试题库及答案【全优】
- -情景交际-中考英语复习考点
- 安全隐患报告和举报奖励制度
- 地理标志培训课件
- 2025年高压电工作业考试国家总局题库及答案(共280题)
- 2023行政主管年终工作报告五篇
评论
0/150
提交评论