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