第6章 2子程序设计方法.ppt_第1页
第6章 2子程序设计方法.ppt_第2页
第6章 2子程序设计方法.ppt_第3页
第6章 2子程序设计方法.ppt_第4页
第6章 2子程序设计方法.ppt_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

5 6 5子程序设计 1 子程序的概念2 子程序的定义3 子程序调用指令4 子程序设计方法5 子程序应用举例 1子程序的概念 功能上独立的可被多次无规律重复多次调用的程序段或语句序列 调用子程序的程序称为主调程序或主程序 2子程序的定义 子程序的定义是由过程定义伪指令来完成的 过程名PROC NEAR FAR RET 过程名ENDP 过程名 过程入口地址的符号表示 过程名具有三种属性 即段属性 偏移地址属性以及类型属性 COSEGASEGMENT CALLPROCAABC PROCAPROC RET PROCAENDP PROCBPROCFAR RET PROCBENDP COSEGAENDS COSEGBSEGMENT CALLPROCB COSEGBENDS 1 子程序调用指令CALL段内调用 1 段内直接调用 2 段内间接调用段间调用 3 段间直接调用 4 段间间接调用 3子程序调用和返回指令 2 返回指令RET 1 语句格式 RET 2 语句格式 RETn n为偶数 1 段内直接调用格式 CALL过程名执行的操作 SP SP 2 SP 1 SP IP IP IP D16 段内间接调用格式 CALLR M执行的操作 SP SP 2 SP 1 SP IP IP R M 段间调用 CALL指令与子程序不在同一个段或子程序的类型属性为FAR 段间直接调用格式 CALLFARPTR过程名操作 SP SP 2 SP 1 SP CS SP SP 2 SP 1 SP IP IP 偏移地址 指令的第2 3个字节 CS 段地址 指令的第4 5个字节 4 段间间接调用格式 CALLM操作 SP SP 2 SP 1 SP CS SP SP 2 SP 1 SP IP IP EA CS EA 2 2 RET返回指令 1 段内返回RET IP SP 1 SP SP SP 2 段内带立即数返回RETn IP SP 1 SP SP SP 2 SP SP n 段间返回RET IP SP 1 SP SP SP 2 CS SP 1 SP SP SP 2 段间带立即数返回RETn IP SP 1 SP SP SP 2 CS SP 1 SP SP SP 2 SP SP n 4子程序设计方法 1 适度地划分并确定子程序功能 2 主程序与子程序参数传递方式 3 信息的保护与恢复 4 编写程序的文字说明 1 适度地划分并确定子程序功能什么情况下需要建立子程序 2 设计子程序时考虑因素通用性 参数 入口参数和出口参数 A 在模块化程序设计中 把某些具有独立功能的程序作为一个模块 B 把程序中多次出现的程序段独立出来 以子程序形式出现 2 主程序与子程序参数传递方式 1 寄存器法 2 存储单元法 3 堆栈法 4 地址表法 3 信息的保护与恢复 1 在调用程序中保存若子程序PROGA中改变了寄存器AX BX CX的值 则可采用如下方法保护和恢复现场 PUSHAXPUSHBXPUSHCX 保护现场CALLPROGAPOPAXPOPBXPOPCX 2 在子程序中保存若子程序PROG中改变了寄存器AX BX CX DX的值 则可采用如下方法保护和恢复现场 PROGPROCPUSHAXPUSHBXPUSHCX 保护现场PUSHDX POPDXPOPCXPOPBX 恢复现场POPAXRET 返回断点处PROCENDP 例1 通过寄存器传递参量 例6 16 设在数据段中有一组字数据 试编制一程序用减奇数法对这组数据逐一开平方 并把结果存入PFG的字节数组中 N 2K 1 N2K 11 3 5 7 16 421 3 5 7 9 11 13 15 64 82 子程序功能 开平方入口参数 AX存放被开方的数出口参数 平方根CL中程序如下 DATASEGMENTDA1DW1234H 5678H 3456H 0A53HCOUNTDW DA1 2PFGDBCOUNTDUP 0 DATAENDSCODESEGMENTASSUMEDS DATA CS CODE SS STACKSTART MOVAX DATAMOVDS AXMOVSI OFFSETDA1MOVDI OFFSETPFG LOP MOVAX SI 取被开方数PUSHCX 保存信息CALLSQR PROC 调用子程序MOV DI CLPOPCXADDSI 2INCDILOOPLOPMOVAH 4CHINT21H SQR PROCPROCMOVCL 0 平方根 0MOVDX 1 奇数 1SQR SUBAX DX 减奇数JBEXIT 够减 INCCL 够减 计数ADDDX 2 形成下一个奇数JMPSQREXIT RET 返回SQR PROCENDPCODEENDSENDSTART 例2 通过存储单元传递参量 1 调用程序与子程序在同一个模块中 DATASEGMENTDA1DW1234H 5678H 3456H 0A53HCOUNTDW DA1 2SOURDW SQRTDB PFGDBCOUNTDUP 0 DATAENDS CODESEGMENTASSUMEDS DATA CS CODE SS STACKSTART MOVAX DATAMOVDS AXMOVSI OFFSETDA1MOVDI OFFSETPFG LOP MOVAX SI 取被开方数MOVSOUR AXCALLSQR PROC 调用子程序MOVCL SQRTMOV DI CLADDSI 2INCDILOOPLOPMOVAH 4CHINT21H SQR PROCPROCMOVSQRT 0 平方根 0MOVDX 1 奇数 1SQR SUBSOUR DX 减奇数JBEXIT 够减 INCSQRT 够减 计数ADDDX 2 形成下一个奇数JMPSQREXIT RET 返回SQR PROCENDPCODEENDSENDSTART 例3 通过地址表传递参量 例4 12 将一个给定的二进制数转换成二进制数的ASCII码 1 在调用子程序前 将所有参量的地址依次送入地址表 然后将地址表的首址传给子程序 2 在子程序中 按照地址表中给出的参量地址 逐个取出参量 DATASEGMENTBIN1DB93HBIN2DW0ABCDHNUMDB8 16ASCBUFDB20DUP 0 TABLEDW3DUP 0 DATAENDS OFFSETBIN1OFFSETNUMOFFSETASCBIN CODESEGMENTASSUMEDS DATA CS CODE SS STACKSTART MOVAX DATAMOVDS AXMOVTABLE OFFSETBIN1MOVTABLE 2 OFFSETNUMMOVTABLE 4 OFFSETASCBUFMOVBX OFFSETTABLECALLBINASC8 调用子程序BTASC MOVTABLE OFFSETBIN2MOVTABLE 2 OFFSETNUM 1MOVTABLE 4 OFFSETASCBUFMOVBX OFFSETTABLECALLBTASC16 BINASCPROCBINASC8 MOVDI BX MOVDH DI 8位数JMPTRANBINASC16 MOVDI BX 16位数MOVDX DI TRAN MOVDI BX 2 MOVCL DI 取待转换数据位数XORCH CHMOVDI BX 4 L1 ROLDX 1MOVAL DLANDAL 01HADDAL 30HMOV DI ALINCDILOOPL1RETBINASCENDPCODEENDSENDSTART 返回本节 例4 通过堆栈传递参量 DATASEGMENTBIN1DB93HBIN2DW0ABCDHASCBUFDB20DUP 0 DATAENDS 例4 12 将一个给定的二进制数转换成二进制数的ASCII码 CODESEGMENTASSUMEDS DATA CS CODE SS STACKSTART MOVAX DATAMOVDS AXMOVAH BIN1XORAL ALPUSHAXLEASI ASCBUFPUSHSIMOVAX 8PUSHAXCALLBINASC 调用子程序BTASC 返回地址8ASCBIN地址BIN1内容 MOVAH BIN2XORAL ALPUSHAXLEASI ASCBUF 10HPUSHSIMOVAX 16PUSHAXCALLBINASC BPDIDXCX返回地址8ASCBIN地址BIN1内容 BINASCPROCPUSHCXP

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论