第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)决定是近返回还 是远返回。缺省为近返回