人民邮电出版社:高等学校计算机专业教材《80x86汇编语言程序设计》课程电子教案(PPT课件讲稿)第6章 过程

第6章过程 讲授要点 过程的定义、调用与返回。 过程的参数传递方法。 递归过程的设计方法。 2021//21 80x86汇编语言程序设计
2021/1/21 80x86汇编语言程序设计 第6章过程 讲授要点 ▪ 过程的定义、调用与返回。 ▪ 过程的参数传递方法。 ▪ 递归过程的设计方法

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

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

6.1.2过程调用和返回 语法格式 CALL ProcName;若 ProcName与该指令在同一代码段,则为段内直接调用 IP进栈,P=labl的偏移地址 若 ProcName与该指令不在同一代码段,则为段间直接调用 CSP进栈,CSP= label的分段地址 CALL regle6/meml6;段内间接调用:P进栈,P=regl6/[meml6] CALL mem32 段间间接调用: CSP进栈,CS=mem32高字,P=mem32低字 功能描述 (1)返回地址进栈。 远调用:CS与P(下一条指令的地址)依次进栈。 近调用:P(下一条指令的16位偏移地址)进栈。 (2)转移到过程的第1条指令去执行。 远调用:根据操作数,将32位分段地址送CS:IP。 近调用:根据操作数,将16位偏移地址送P 对标志位的影响:无。 2021/1/21 80x86汇编语言程序设计
2021/1/21 80x86汇编语言程序设计 6.1.2 过程调用和返回 语法格式: CALL ProcName ; 若ProcName与该指令在同一代码段,则为段内直接调用: ; IP进栈,IP = label的偏移地址; ; 若ProcName与该指令不在同一代码段,则为段间直接调用: ; 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。 对标志位的影响:无

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

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

6.2过程的参数传递 对于大多数过程,需要与调用者之间传递一定数量的数据,即参数。根据传递的方向, 将参数分为两类: 入口参数:由调用者向过程传递的数据,作为过程的输入参数。 ■出口参数:由过程向调用者返回的数据,作为过程的输出参数。 根据问题的需要,过程可以只有入口参数或只有出口参数,也可以二者兼有。 对于过程与调用者之间的参数传递,可根据传递的数据量,选择采用寄存器、变量或 堆栈等方式。由于过程是相对独立的功能块,因此,在定义过程时,通常要加上适当的注 释,主要包括功能、入口参数与出口参数等。 2021//21 80x86汇编语言程序设计
2021/1/21 80x86汇编语言程序设计 6.2 过程的参数传递 对于大多数过程,需要与调用者之间传递一定数量的数据,即参数。根据传递的方向, 将参数分为两类: ▪ 入口参数:由调用者向过程传递的数据,作为过程的输入参数。 ▪ 出口参数:由过程向调用者返回的数据,作为过程的输出参数。 根据问题的需要,过程可以只有入口参数或只有出口参数,也可以二者兼有。 对于过程与调用者之间的参数传递,可根据传递的数据量,选择采用寄存器、变量或 堆栈等方式。由于过程是相对独立的功能块,因此,在定义过程时,通常要加上适当的注 释,主要包括功能、入口参数与出口参数等

6.2.1用变量传递参数 在程序中定义全局变量,如放在数据段,过程直接按名访问该变量。 过程直接以变量作为参数,虽然方便,但通用性较差。 【例】(略) 2021//21 80x86汇编语言程序设计
2021/1/21 80x86汇编语言程序设计 6.2.1 用变量传递参数 在程序中定义全局变量,如放在数据段,过程直接按名访问该变量。 过程直接以变量作为参数,虽然方便,但通用性较差。 【例】(略)

6.2.2用寄存器传递参数 通过寄存器传递数据或数据地址。 通常选择A、AX、DXAⅩ(或EAX)传递字节、字或双字。 传递16位偏移地址最好选择SⅠ、D或BX 传递32位分段地址可以用DSBX、DS:SI、DS:D、ES:BX、ES:SI或ESD等。 当然,要根据需要来选择,以方便为主,但很少使用BP来传递参数。 【例】(略) 2021//21 80x86汇编语言程序设计
2021/1/21 80x86汇编语言程序设计 6.2.2 用寄存器传递参数 通过寄存器传递数据或数据地址。 通常选择AL、AX、DX:AX(或EAX)传递字节、字或双字。 传递16位偏移地址最好选择SI、DI或BX, 传递32位分段地址可以用DS:BX、DS:SI、DS:DI、ES:BX、ES:SI或ES:DI等。 当然,要根据需要来选择,以方便为主,但很少使用BP来传递参数。 【例】(略)

6.2.3用地址表传递参数 建立一个地址表,存放所有参数的地址,传递地址表的首地址给过程。 这种方法特别适合于参数较多的情况。 【例】(略) 2021//21 80x86汇编语言程序设计
2021/1/21 80x86汇编语言程序设计 6.2.3 用地址表传递参数 建立一个地址表,存放所有参数的地址,传递地址表的首地址给过程。 这种方法特别适合于参数较多的情况。 【例】(略)
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 人民邮电出版社:高等学校计算机专业教材《80x86汇编语言程序设计》课程电子教案(PPT课件讲稿)第5章 基本控制结构.ppt
- 人民邮电出版社:高等学校计算机专业教材《80x86汇编语言程序设计》课程电子教案(PPT课件讲稿)第4章 汇编语言程序格式.ppt
- 人民邮电出版社:高等学校计算机专业教材《80x86汇编语言程序设计》课程电子教案(PPT课件讲稿)第3章 80x86指令系统.ppt
- 人民邮电出版社:高等学校计算机专业教材《80x86汇编语言程序设计》课程电子教案(PPT课件讲稿)第2章 80x86计算机系统组织.ppt
- 人民邮电出版社:高等学校计算机专业教材《80x86汇编语言程序设计》课程电子教案(PPT课件讲稿)第1章 基础知识.ppt
- 《数据结构》课程教学资源:第一章 绪论.ppt
- 《数据结构》课程教学资源:第五章 数组和广义表.ppt
- 《数据结构》课程教学资源:第九章 查找.ppt
- 《数据结构》课程教学资源:第三章 栈和队列.ppt
- 《数据结构》课程教学资源:第七章 图.ppt
- 《数据结构》课程教学资源:第四章 串 4.3串的模式匹配算法 44串操作应用举例.ppt
- 《数据结构》课程教学资源:期末复习.ppt
- 《MATLAB》课程教材电子教案(PPT课件讲稿)第9章 MATLAB符号计算.ppt
- 《MATLAB》课程教材电子教案(PPT课件讲稿)第8章 MATLAB数值积分与微分.ppt
- 《MATLAB》课程教材电子教案(PPT课件讲稿)第7章 MATLAB解方程与函数极值.ppt
- 《MATLAB》课程教材电子教案(PPT课件讲稿)第6章 MATLAB数据分析与多项式计算.ppt
- 《MATLAB》课程教材电子教案(PPT课件讲稿)第5章 MATLAB绘图.ppt
- 《MATLAB》课程教材电子教案(PPT课件讲稿)第4章 MATLAB文件操作.ppt
- 《MATLAB》课程教材电子教案(PPT课件讲稿)第3章 MATLAB程序设计.ppt
- 《MATLAB》课程教材电子教案(PPT课件讲稿)第2章 MATLAB矩阵及其运算.ppt
- 人民邮电出版社:高等学校计算机专业教材《80x86汇编语言程序设计》课程电子教案(PPT课件讲稿)第7章 汇编语言的扩展.ppt
- 人民邮电出版社:高等学校计算机专业教材《80x86汇编语言程序设计》课程电子教案(PPT课件讲稿)第8章 输入/输出与中断.ppt
- 人民邮电出版社:高等学校计算机专业教材《80x86汇编语言程序设计》课程电子教案(PPT课件讲稿)目录.ppt
- 《大学计算机基础教程》课程教学资源(PPT课件)第5章 MCS - 51单片机的中断.ppt
- 《大学计算机基础教程》课程教学资源(PPT课件)第6章 MCS - 51单片机内部定时器/计数器及串行接口.ppt
- 《大学计算机基础教程》课程教学资源(PPT课件)第1章 微型计算机基础.ppt
- 《大学计算机基础教程》课程教学资源(PPT课件)第2章 单片机的硬件结构和原理.ppt
- 《大学计算机基础教程》课程教学资源(PPT课件)第3章 MCS - 51单片机指令系统.ppt
- 《大学计算机基础教程》课程教学资源(PPT课件)第4章 汇编语言程序设计简介.ppt
- 《大学计算机基础教程》课程教学资源(PPT课件)第7章 单片机系统扩展与接口技术.ppt
- 《网络信息对抗》课程教学资源(PPT课件讲稿)第三章 安全性分析与风险评估 3.1 安全漏洞概述 3.2 微软操作系统安全性分析.ppt
- 《网络信息对抗》课程教学资源(PPT课件讲稿)第一章 概述.ppt
- 《网络信息对抗》课程教学资源(PPT课件讲稿)第二章 了解TCP/IP.ppt
- 《网络信息对抗》课程教学资源(PPT课件讲稿)第三章 安全性分析与风险评估(3.2)Windows系列风险分析.ppt
- 《网络信息对抗》课程教学资源(PPT课件讲稿)第三章 安全性分析与风险评估(3.3)UNIX系统的安全分析.ppt
- 《网络信息对抗》课程教学资源(PPT课件讲稿)第三章 安全性分析与风险评估(3.4)风险分析.ppt
- 《网络信息对抗》课程教学资源(PPT课件讲稿)第六章 网络防护(6.1)安全策略与安全网络设计.ppt
- 《网络信息对抗》课程教学资源(PPT课件讲稿)第八章 网络安全基础设施.ppt
- 《网络信息对抗》课程教学资源(PPT课件讲稿)第六章 网络防护 6.6 入侵检测 6.7 snorts系统.ppt
- 《网络信息对抗》课程教学资源(PPT课件讲稿)第六章 网络防护 6.3 防火墙 6.4 VPN 6.5 蜜罐技术.ppt