清华大学计算机系:《IBM-PC汇编语言程序设计》 第六章 子程序结构

第6章子程序结构 讲授要点 子程序的定义、调用与返回。 子程序的参数传递方法。 2021/2/19 80x86汇编语言程序设计
2021/2/19 80x86汇编语言程序设计 第6章 子程序结构 讲授要点 子程序的定义、调用与返回。 子程序的参数传递方法

6.1程序概迷 6.1.1过程的定义 过程定义由PROC与ENDP伪指令实现,形式如下: 过程名 PROC NEARJFAR 过程名ENDP 1.过程名在整个程序中必须是唯一的。 2.过程名本质上与标号一样,也具有3种属性:段地址、 偏移地址和类型(NEAR或FAR) 3.PROC后用关键字NEAR、FAR或空,以表示过程 的类型(缺省为NEAR)。 2021/2/19 80x86汇编语言程序设计
2021/2/19 80x86汇编语言程序设计 6.1子程序概述 6.1.1 过程的定义 过程定义由PROC与ENDP伪指令实现,形式如下: 过程名 PROC [NEAR|FAR] 过程名 ENDP 1. 过程名在整个程序中必须是唯一的。 2. 过程名本质上与标号一样,也具有3种属性:段地址、 偏移地址和类型(NEAR或FAR)。 3. PROC后用关键字NEAR、FAR或空,以表示过程 的类型(缺省为NEAR)

6.1.2过程调用和返回 1.过程调用和返回指令 (1)CALL:过程调用 与JMP指令类似,CALL指令包括下列4种调用方式: 段内直接调用( Intrasegment/ Direct call) 段间直接调用〔 Intersegment/ Direct ca 段内间接调用( Intrasegment/Indirect Cal1) 段间间接调用( Intersegment/ ndirect cal) 段内调用在同一代码段内进行,又称近(Near)调用; 段间调用可以在不同代码段之间进行,又称远(Far)调用。 2021/2/19 80x86汇编语言程序设计
2021/2/19 80x86汇编语言程序设计 6.1.2 过程调用和返回 1.过程调用和返回指令 (1)CALL:过程调用 与JMP指令类似,CALL指令包括下列4种调用方式: ▪ 段内直接调用(Intrasegment/Direct Call) ▪ 段间直接调用(Intersegment/Direct Call) ▪ 段内间接调用(Intrasegment/Indirect Call) ▪ 段间间接调用(Intersegment/Indirect Call) 段内调用在同一代码段内进行,又称近(Near)调用; 段间调用可以在不同代码段之间进行,又称远(Far)调用

语法格式: CALL ProcName 段內直接调用:IP进栈,IP= labell的偏移地址 段间直接调用:CS:TP进栈,CS:IP= labell的分段地址 CALL reg 16/ mem16 段内间接调用:I进栈,IP=reg16/Imem16 CALL mem32 段间间接调用:CS:I进栈,CS=mem32高字,IP=mem32低字 功能描述: (1)返回地址进栈。 远调用:CS与IP(下一条指令的地址)依次进栈 近调用:PP(下一条指令的16位偏移地址)进栈 (2)转移到过程的第1条指令去执行。 远调用:根据操作数,将32位地址送CS:IP。 近调用:根据操作数,将16位偏移地址送IP。 对标志位的影响:无。 2021/2/19 80x86汇编语言程序设计
2021/2/19 80x86汇编语言程序设计 语法格式: CALL ProcName 段内直接调用:IP进栈,IP= label的偏移地址; 段间直接调用:CS:IP进栈,CS:IP= label的分段地址 CALL reg16/mem16 段内间接调用:IP进栈,IP= reg16 / [mem16] CALL mem32 段间间接调用:CS:IP 进栈,CS = mem32高字,IP= mem32低字 功能描述: (1)返回地址进栈。 远调用:CS与IP(下一条指令的地址)依次进栈。 近调用:IP(下一条指令的16位偏移地址)进栈。 (2)转移到过程的第1条指令去执行。 远调用:根据操作数,将32位地址送CS:IP。 近调用:根据操作数,将16位偏移地址送IP。 对标志位的影响:无

(2)RET指令RET( Return):过程返回 语法格式: RET ;近返回或远返回 REt imm16;近返回或远返回,并调整堆栈:SP=SP+ immie 功能描述: RET:返回地址出栈,从而实现转到返回地址处。其中, 远返回:POP1个双字到CS:IP。 近返回:POP1个字到P REt imm16:在返回地址出栈后,CPU立即将imm16加到堆栈 指针SP。这种机制用来在返回前将参数从栈中移出。 对标志位的影响:无。 说明:RET由汇编程序根据其所在过程的类型(NEAR或FAR) 决定是近返回还是远返回。缺省为近返回 2021/2/19 80x86汇编语言程序设计
2021/2/19 80x86汇编语言程序设计 (2)RET指令RET(Return):过程返回 语法格式: RET ; 近返回或远返回 RET imm16 ; 近返回或远返回,并调整堆栈:SP = SP + imm16 功能描述: RET:返回地址出栈,从而实现转移到返回地址处。其中, 远返回:POP1个双字到CS:IP。 近返回:POP1个字到IP。 RET imm16:在返回地址出栈后,CPU立即将imm16加到堆栈 指针SP。这种机制用来在返回前将参数从栈中移出。 对标志位的影响:无。 说明:RET由汇编程序根据其所在过程的类型(NEAR或FAR) 决定是近返回还是远返回。缺省为近返回

2.使用过程应注意的问题 在过程体内必须有一条RET指令被执行到。如果在过程内没有执 行到RET或淇它转移指令,程序将继续执行ENDP后的指令。 正确选择过程的类型。通常基于下列原则: 若过程只在同一代码段中被调用,则定义为NEAR。 ·若过程可以在不同代码段中被调用,则定义为FAR 通常要保证RET指令执行前,栈顶内容正好是返回地址。 注意保护相关寄存器的值。通常,除了作为返回参数的寄存器外, 过程不应改变其它寄存器的值。 可以将过程定义放在单独的代码段中。若过程定义与主程序处于 同一代码段,则要保证其只有被调用时,才会执行。 2021/2/19 80x86汇编语言程序设计
2021/2/19 80x86汇编语言程序设计 2.使用过程应注意的问题 ▪ 在过程体内必须有一条RET指令被执行到。如果在过程内没有执 行到RET或其它转移指令,程序将继续执行ENDP后的指令。 ▪ 正确选择过程的类型。通常基于下列原则: • 若过程只在同一代码段中被调用,则定义为NEAR。 • 若过程可以在不同代码段中被调用,则定义为FAR。 ▪ 通常要保证RET指令执行前,栈顶内容正好是返回地址。 ▪ 注意保护相关寄存器的值。通常,除了作为返回参数的寄存器外, 过程不应改变其它寄存器的值。 ▪ 可以将过程定义放在单独的代码段中。若过程定义与主程序处于 同一代码段,则要保证其只有被调用时,才会执行

3.保存和恢复寄存器 例: SUBT PROC NEAR PUSH AX PUSH BX PUSH CX POP CX POP BX POP AX RET SUBT ENDP 2021/2/19 80x86汇编语言程序设计
2021/2/19 80x86汇编语言程序设计 3. 保存和恢复寄存器 例: SUBT PROC NEAR PUSH AX PUSH BX PUSH CX …… POP CX POP BX POP AX RET SUBT ENDP

【例6.1】分析下列程序,描述它的功能。 dseg SEGMENT buf db 80,81 DUP(O) dseg ENDS sseg SEGMENT STACK DW 64 DUP(O) sseg ENDS cseg SEGMENT ASSUME CS: cSeg, DS: dseg, SS: sseg 2021/2/19 80x86汇编语言程序设计
2021/2/19 80x86汇编语言程序设计 【例6.1】分析下列程序,描述它的功能。 dseg SEGMENT buf DB 80,81 DUP(0) dseg ENDS sseg SEGMENT STACK DW 64 DUP(0) sseg ENDS cseg SEGMENT ASSUME CS:cseg,DS:dseg,SS:sseg

cr PROC (NEAr) MOV AH.2 MOV DL 13 INT 21H MOV DL. 10 INT 21H RET cr ENDP 2021/2/19 80x86汇编语言程序设计
2021/2/19 80x86汇编语言程序设计 cr PROC (NEAR) MOV AH,2 MOV DL,13 INT 21H MOV DL,10 INT 21H RET cr ENDP

main: MOV AX, dseg MOV DS.AX LEA DX.buf MOV AH.10 NT 21H ;输入一个符号串 CALL cr MOV AH. NT 21H 输入一个字符 MOV BLAL 用B保存读入的字符 2021/2/19 80x86汇编语言程序设计
2021/2/19 80x86汇编语言程序设计 main:MOV AX,dseg MOV DS,AX LEA DX,buf MOV AH,10 INT 21H ;输入一个符号串 CALL cr MOV AH,1 INT 21H ;输入一个字符 MOV BL,AL ;用BL保存读入的字符
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 清华大学计算机系:《IBM-PC汇编语言程序设计》 第五章 循环与分支程序设计.ppt
- 清华大学计算机系:《IBM-PC汇编语言程序设计》 第四章 汇编语言程序格式.ppt
- 清华大学计算机系:《IBM-PC汇编语言程序设计》 第三章 80X86的指令系统和寻址方式.ppt
- 清华大学计算机系:《IBM-PC汇编语言程序设计》 第二章 80X86计算机组织.ppt
- 清华大学计算机系:《IBM-PC汇编语言程序设计》 第1章 汇编语言的特点.ppt
- 清华大学计算机系:《IBM-PC汇编语言程序设计》 第十一章 磁盘文件存取技术.ppt
- 清华大学计算机系:《IBM-PC汇编语言程序设计》 第二章 例题作业.ppt
- 清华大学计算机系:《IBM-PC汇编语言程序设计》 汇编语言实验大纲.doc
- 《NET上构架企业级应用程序》课程讲义.ppt
- 《可视化的软件架构设计》课程讲解.ppt
- 安徽商贸职业技术学院:《基于ASP开发平台的设计模式》 讲义.pps
- 《C程序设计》课程PPT教学课件讲解.ppt
- 《无线网格网关键技术及应用研究》 引言.doc
- 《七号信令系统》 课程讲解.doc
- 网页三剑客MX教程:《Flash 》MX 教学课件.pdf
- 网页三剑客MX教程:《Fireworks》 MX 入门教学课件.pdf
- 网页三剑客MX教程:《Dreamweaver》 MX 入门教学课件.pdf
- 北京大学:《网络信息安全》课程教学资源(讲稿)第十三讲 信息安全标准、法规、安全方案设计.pdf
- 北京大学:《网络信息安全》课程教学资源(讲稿)第十ニ讲 电子邮件安全与电子商务安全.pdf
- 北京大学:《网络信息安全》课程教学资源(讲稿)第十一讲 Web安全.pdf
- 清华大学计算机系:《IBM-PC汇编语言程序设计》 第七章 高级汇编语言技术.ppt
- 清华大学计算机系:《IBM-PC汇编语言程序设计》 第八章 输入输出方法.ppt
- 清华大学计算机系:《IBM-PC汇编语言程序设计》 第九章 BIOS和DOS中断.ppt
- 清华大学计算机系:《IBM-PC汇编语言程序设计》 部分作业答案.doc
- 《数据结构-C语言描述》(1-5章)概念教材讲解.ppt
- 《数据结构-C语言描述》 第七章 图.ppt
- 《数据结构-C语言描述》 第九章 排序.ppt
- 《数据结构-C语言描述》 第八章 查找.ppt
- 《数据结构-C语言描述》 第十章 文件.ppt
- 《NT组网》 第一讲 网络基础.ppt
- 北京大学:《ASP程序设计》 第一章 ASP简介.ppt
- 《FTP服务器端软件Serv-U教程》教学资源(讲义)FTP服务器端软件Serv-U教程.doc
- 《FTP服务器端软件Serv-U教程》教学资源(讲义)Serv-U ftp 服务器的进阶管理.doc
- 《FTP服务器端软件Serv-U教程》教学资源(讲义)第一节 Serv-U的安装和基本设置.doc
- 《FTP服务器端软件Serv-U教程》教学资源(讲义)第三节 Serv-U用户属性之“Account”(帐号).doc
- 《FTP服务器端软件Serv-U教程》教学资源(讲义)第二节 Serv-U 管理器.doc
- 《FTP服务器端软件Serv-U教程》教学资源(讲义)第五节 Serv-U用户属性之“Dir Access”(目录存取属性).doc
- 《FTP服务器端软件Serv-U教程》教学资源(讲义)第六节 Serv-U用户属性之完结.doc
- 《FTP服务器端软件Serv-U教程》教学资源(讲义)第四节 Serv-U用户属性之“General”(常用).doc
- 《C语言教程》课程教学资源(教案讲义)第一章 计算机程序高设计与算法.doc