《计算机组成原理与汇编语言》课程电子教案(PPT课件讲稿)第十二章 子程序设计

第十二章子程序设计
第十二章 子程序设计

第节子程序调用与返回指令 1子程序调用指令 (1)段内直接调用 格式:CAL过程名;过程名是个标号 CALL NEAR PTR过程名 操作:SP←SP2;[SP,SP+1]←IP;保护断点IP←子程序入口偏移 地址;转子程序 SP→|mLss:堆栈 PH SP
第1节 子程序调用与返回指令 • 1. 子程序调用指令 • (1) 段内直接调用 • 格式:CALL过程名;过程名是个标号 • CALL NEAR PTR 过程名 • 操作:SP←SP-2;[SP,SP+1] ←IP;保护断点IP←子程序入口偏移 地址;转子程序

(2)段内间接调用 格式: CALLOPRD: OPRD≡{R,M(字) 操作:SPSP2SP,SP←IP;保护断点 P<[EAEA为依寻址方式所得有效地址 例如: CALLBX CALLWORD PTR [BX CALLDAT1;DAT1为字变量 CALLWORDPTRIBPI[SI
(2) 段内间接调用 格式:CALLOPRD;OPRD≡{R,M(字)} 操作:SP←SP-2;[SP,SP+1] ←IP;保护断点 IP←[EA];EA为依寻址方式所得有效地址 例如: CALLBX; CALLWORD PTR [BX]; CALLDAT1;DAT1为字变量 CALLWORDPTR[BP][SI]

3)段间直接调用 格式: CALL FAR PTR过程名 操作:SPSP2;[SP,SP+1CS;倮护断点 SPSP2;[SP,SP+1]←IP; CS←子程序入口段地址;转子程序入口 P子程序入口偏移地址; SS SP→ IPL IPHI SP-CSL CSH SP→
3) 段间直接调用 格式:CALL FAR PTR过程名 操作:SP←SP-2;[SP,SP+1] ←CS;保护断点 SP←SP-2;[SP,SP+1] ←IP; CS ←子程序入口段地址;转子程序入口 IP←子程序入口偏移地址;

(4)段间间接调用 格式: CALLOPRD:OPRD三{M(双字)} 操作:SPSP2;[5SP,SP+1]CS;保护断点 SP←SP2;[SP,SP+1]←IP CS←OPRD的段地址;转子程序入口 IP←ORD的偏移地址; 例如: CALLDWORD PTR [BXI CALLDAT2;DAT2为双字变 CALLDWORDPTRIBPILSI
(4) 段间间接调用 格式:CALLOPRD;OPRD≡{M(双字)} 操作:SP←SP-2;[SP,SP+1] ←CS;保护断点 SP←SP-2;[SP,SP+1] ←IP CS←OPRD的段地址;转子程序入口 IP←OPRD的偏移地址; 例如: CALLDWORD PTR [BX]; CALLDAT2;DAT2为双字变量 CALLDWORDPTR[BP][SI]

2子程序返回指令 格式1RE「 功能:放在子程序未尾,依CAL指令的属性(段内或段间) 返回调用程序的断点处继续执行。 操作:段内调用的RE指令 IP[SP,SP+1];SP←SP+2;恢复断点 段间调用的RE指令 IP[SP,SP+1];SP←SP+2;恢复断点 CS←[SP,SP+1];SP←SP+2 格式2:RETn 操作:与RE指令相同,但执行恢复断点操作后, SP←SP+n
2. 子程序返回指令 格式1:RET; 功能:放在子程序末尾,依CALL指令的属性(段内或段间) 返回调用程序的断点处继续执行。 操作:段内调用的RET指令 IP←[SP,SP+1];SP←SP+2;恢复断点 段间调用的RET指令 IP←[SP,SP+1];SP←SP+2;恢复断点 CS←[SP,SP+1];SP←SP+2; 格式2:RET n; 操作:与RET指令相同,但执行恢复断点操作后, SP ←SP+n;

第2背子程序的结构形式 1,子程序的说明文作 建立子程序的文档,说明该子程序的功能和调用 方法 2.子程序的现场保护和现场恢复 利用堆栈进行现场保护和现场恢复 3.子程序的调用和返回
第2节 子程序的结构形式 • 1. 子程序的说明文件 • 建立子程序的文档,说明该子程序的功能和调用 方法 • 2. 子程序的现场保护和现场恢复 • 利用堆栈进行现场保护和现场恢复 • 3. 子程序的调用和返回

子程序设计中注意事项 L,要正确使用堆栈(PUSH和POP指令要配对使用》,否则将导致不能 返回的错读 2,要注意保护和恢复数据(保护需要保护的寄存器或F的内容,用于 传递参数的寄奇存器可以不保护 例如 SUBI PROC FAR PUSHAX PUSHBX PUSHCX PUSHDX;保护数据 (子程序实际内容) POPDX POPCX: POPBX;恢复数据 POPAX;(后进先出) RET: SUB1 ENDP
子程序设计中注意事项 1,要正确使用堆栈(PUSH和POP指令要配对使用),否则将导致不能 返回的错误; 2,要注意保护和恢复数据(保护需要保护的寄存器或FR的内容,用于 传递参数的寄存器可以不保护) 例如: SUB1 PROC FAR PUSHAX; PUSHBX; PUSHCX; PUSHDX;保护数据 :(子程序实际内容) POPDX; POPCX; POPBX;恢复数据 POPAX;(后进先出) RET; SUB1 ENDP;

第3节参数传递方法 主程序在调用子程序前 要向子程序传送一些数据 要将执行的 些数据称为 参数传递的方法主要有约定寄存器法、约定存储器法与 堆栈法三种。 L约定寄存器法 寄存器法直接利用CPU内部寄存器传送参数。在转 向子程序之前,主程序将入口参数 入指定寄存器 调用子程序后,子程序从指定寄存器 用这些参数。经加工处理的结果也 放入指定的寄存器中,这样从子程序返回主程序后可以从 指定的寄存器中获得处理结果。这 方法最算单,但由于寄存器资源有限,故仅适用传递参数
第3节 参数传递方法 • 主程序在调用子程序前,常需要向子程序传送一些数据, 这些数据称为入口参数。当子程序执行完后,要将执行的 结果传回给主程序,这些数据称为出口参数。 参数传递的方法主要有约定寄存器法、约定存储器法与 堆栈法三种。 • 1.约定寄存器法 约定寄存器法直接利用CPU内部寄存器传送参数。在转 向子程序之前,主程序将入口参数 送入指定寄存器中;调用子程序后,子程序从指定寄存器 引用这些参数。经加工处理的结果也 放入指定的寄存器中,这样从子程序返回主程序后可以从 指定的寄存器中获得处理结果。这种 方法最简单,但由于寄存器资源有限,故仅适用传递参数 较少的情况

例74】编写程序,将字符串STR中的大写字母字符取出送字符串 5R2,并将字符串STR2在显示器上显示。 将判字符是否为大写字母字符编一子程序。为此,应将字符串STR SJR2的首地址和字符串STR的长度送寄存器作为入口参数传递给子程序 程序流程图如下图所示 开始 开始 保护现场 SI←STRl偏移地址 DI←STR2偏移地址 ≥A CX+STR的长度 将字符保存至STR2 调用子程序 F <完成否 显示STR2 恢复现场 结束 结束 (1)主程序流程图 (2)子程序流程图
【例7—4】编写程序,将字符串STRl中的大写字母字符取出送字符串 STR2,并将字符串STR2在显示器上显示。 将判断字符是否为大写字母字符编一子程序。为此,应将字符串STRl、 STR2的首地址和字符串STRl的长度送寄存器作为入口参数传递给子程序。 程序流程图如下图所示
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 《计算机组成原理与汇编语言》课程电子教案(PPT课件讲稿)第三章 指令系统.ppt
- 《计算机组成原理与汇编语言》课程电子教案(PPT课件讲稿)第七章 学习机简介.ppt
- 《计算机组成原理与汇编语言》课程电子教案(PPT课件讲稿)第六章 外部设备.ppt
- 《计算机组成原理与汇编语言》课程电子教案(PPT课件讲稿)第九章 顺序程序设计.ppt
- 《计算机组成原理与汇编语言》课程电子教案(PPT课件讲稿)第二章 运算器.ppt
- 《计算机组成原理与汇编语言》课程电子教案(PPT课件讲稿)第八章 汇编语言基础.ppt
- 《C语言(C++)程序设计》第9章 文件.ppt
- 《C语言(C++)程序设计》第8章 位运算.ppt
- 《C语言(C++)程序设计》第7章 结构体、联合体和枚举类型.ppt
- 《C语言(C++)程序设计》第6章 指针和引用.ppt
- 《C语言(C++)程序设计》第5章 函数与预处理.ppt
- 《C语言(C++)程序设计》第4章 数组.ppt
- 《C语言(C++)程序设计》第3章 结构化程序设计.ppt
- 《C语言(C++)程序设计》第2章 数据类型及表达式.ppt
- 《C语言(C++)程序设计》第1章 C语言绪论第1章.ppt
- 《C语言(C++)程序设计》第10章 C++面向对象程序设计.ppt
- 《微机原理与接口技术》课程教学资源(PPT课件)目录二.ppt
- 《微机原理与接口技术》课程教学资源(PPT课件)目录一.pps
- 《微机原理与接口技术》课程教学资源(PPT课件)第四章 半导体存储器.ppt
- 《微机原理与接口技术》课程教学资源(PPT课件)第十章 数/模与模/数接口技术.ppt
- 《计算机组成原理与汇编语言》课程电子教案(PPT课件讲稿)第十三章 高级宏汇编语言.ppt
- 《计算机组成原理与汇编语言》课程电子教案(PPT课件讲稿)第十四章 现代计算机技术.ppt
- 《计算机组成原理与汇编语言》课程电子教案(PPT课件讲稿)第十一章 循环程序设计.ppt
- 《计算机组成原理与汇编语言》课程电子教案(PPT课件讲稿)第十章 分支程序设计.ppt
- 《计算机组成原理与汇编语言》课程电子教案(PPT课件讲稿)第四章 控制器.ppt
- 《计算机组成原理与汇编语言》课程电子教案(PPT课件讲稿)第五章 存储体系结构.ppt
- 《计算机组成原理与汇编语言》课程电子教案(PPT课件讲稿)第一章 计算机系统概论.ppt
- 《AUTOCAD 2007教程》课程教学课件(PPT讲稿,共十章).ppt
- 湖南省第二届“软考杯”大学生程序设计大赛试题.pdf
- 湖南省首届“湘邮科技杯”大学生程序设计大赛试题.pdf
- 21世纪高等院校规划教材:《数据库基础―Access2003 应用教程》第三章 查询.ppt
- 21世纪高等院校规划教材:《数据库基础―Access2003 应用教程》第二章 建立数据库.ppt
- 21世纪高等院校规划教材:《数据库基础―Access2003 应用教程》第九章 数据库的安全.ppt
- 21世纪高等院校规划教材:《数据库基础―Access2003 应用教程》第六章 数据访问页.ppt
- 21世纪高等院校规划教材:《数据库基础―Access2003 应用教程》第七章 宏的设计与应用.ppt
- 21世纪高等院校规划教材:《数据库基础―Access2003 应用教程》第八章 VBA的设计与应用.ppt
- 21世纪高等院校规划教材:《数据库基础―Access2003 应用教程》第十一章 计算机等级考试指南.ppt
- 21世纪高等院校规划教材:《数据库基础―Access2003 应用教程》第十章 数据库综合应用实例.ppt
- 21世纪高等院校规划教材:《数据库基础―Access2003 应用教程》第四章 报表.ppt
- 21世纪高等院校规划教材:《数据库基础―Access2003 应用教程》第五章 窗体.ppt