《汇编语言程序设计》第十一章:过程.ppt
《《汇编语言程序设计》第十一章:过程.ppt》由会员分享,可在线阅读,更多相关《《汇编语言程序设计》第十一章:过程.ppt(41页珍藏版)》请在三一办公上搜索。
1、汇编语言程序设计-朱耀庭,南开大学 朱耀庭,第11章 过程,在编写程序时,常常发现在若干不同的点上都需要一个特定的指令序列,如果把这个指令序列插到程序中的每一个需要点上,必然会使程序的规模大大增加。程序员可以利用过程编程方法解决这个问题。将某个反复在程序中出现的程序片段设计成过程,缩短程序长度,节约存储空间。将某个具有通用性的程序片段设计成过程,实现许多程序共享,可以大大减少程序设计的工作量。另外,当某个程序片段的功能相对独立时,也可以把它设计成过程,这样便于模块化、调试和修改。本章详细论述过程的定义,过程的调用方法,并通过大量的实例进行说明。,南开大学 朱耀庭,第11章 过程,11.1过程的
2、定义与说明,11.2 过程调用,11.3 过程的返回,11.4 模块间的调用和转移,11.5寄存器的保护和恢复,11.6调用程序与被调用过程之间的数据传送,11.7 递归,11.8 C语言调用汇编过程,南开大学 朱耀庭,11.1 过程的定义与说明,南开大学 朱耀庭,1.过程的定义,过程也称作子程序。将这一特定的指令序列编成一个过程的方法,称作“过程定义”。用一对伪指令PROC/ENDP定义一个过程,其格式如下:PROCNAME PROC NEAR/FAR;过程体RET PROCNAME ENDP其中:PROCNAME是PROC和ENDP伪指令前面必须有的同一个过程的名称。在一个过程定义中,EN
3、DP前面的过程名一定要和PROC前面的过程名一致,并且必须是合法的标识符。,南开大学 朱耀庭,1.过程的定义,伪指令PROC和ENDP必须成对出现,表示过程的开始和结束。过程可以被指定为NEAR或FAR类型。如果没有指定,就认为是NEAR类型。如果一个过程要被别的程序跨段调用,就应将该过程说明为FAR类型。如果一个过程定义时被指明为NEAR类型或使用缺省类型说明,那么该过程仅能被本过程所在段的程序所调用。在一个过程中至少有一个RET返回指令。RET指令为过程的出口点,过程由该点结束本次过程调用,返回到调用者调用该过程的下一条指令继续程序的执行。,南开大学 朱耀庭,2.过程的说明,编写过程的重要
4、一环就是书写过程的说明信息,这样可以让不熟悉该过程的用户仍能正确快速地使用。过程的说明信息一般包括过程名称、功能、入口出口参数等。更详细的说明还包括存储单元、所用寄存器、作者、编写时间等内容,南开大学 朱耀庭,2.过程的说明,例11-1 过程说明实例。题目:主程序从键盘读入一个字符,如果是小写字母转化为大写字母输出,不是小写字母则直接输出。然后再继续下一个读入和转换,直到遇到输入为回车符结束。用户在程序运行时可以输入不同字符验证其正确性。设计思路:主程序用过程形式开始,以RET返回。主程序输入的非回车符调用过程UPPERCASE转换为大写字母后送入AL中返回并输出,如果输入回车符则结束。,例1
5、1-1 过程说明实例,程序说明:主程序也可以不定义为过程,这时必须以INT 21H的4CH号功能调用结束,南开大学 朱耀庭,11.2 过程调用,过程一经定义,在程序中每一个需要这一指令序列的位置都可以使用这个过程,对一个过程的使用称作“过程调用”。过程调用需要使用CALL指令。CALL指令的用法如下:CALL PARA其中PARA可以是一个过程名、间接寻址的寄存器或者是内存地址。过程调用分为两种类型:近过程调用(NEAR)和远过程(FAR)调用。汇编程序产生哪一种类型的CALL指令,取决于程序员所定义的过程名是NEAR类型还是FAR类型。近过程调用是指过程调用代码段和过程定义代码段位于同一代码
6、段。当CALL指令产生一个近过程调用时,它把该指令之后的下一条指令地址压栈,即把返回地址的偏移量(16位)压栈,以供过程定义中的RET(返回指令)能将控制转回到CALL的下一条指令。,南开大学 朱耀庭,11.2 过程调用,类似地,当过程调用代码段和过程定义代码段不在同一代码段时,则CALL指令会产生一个远过程调用。不同的是,当CALL指令产生远过程调用时,不仅要把该指令之后的地址压栈,即把返回地址的偏移量压栈,而且也要把其段寄存器CS的值压栈。不同形式的CALL指令允许从指令中获得目标过程的入口地址(直接CALL),或从指令指定的存储单元或寄存器中获得目标过程的入口地址(间接CALL)。在保存
7、断点进栈操作以前,处理器自动地修改IP或CS与IP以使它指向要执行的下一条指令。具体格式与JMP指令相似,也有4种格式:段内直接调用、段内间接调用、段间直接调用、段间间接调用,南开大学 朱耀庭,11.2 过程调用,1段内直接调用格式:CALL PROCNAME 功能:其中PROCNAME是已经定义的近过程名。执行CALL指令调用时,首先保护返回地址,即将返回地址压栈,返回地址就是CALL指令所在位置的下一条指令的地址;保护好返回地址后将控制转移给过程。保护返回地址的具体操作是:SP(堆栈栈顶指针)减2,并将IP(指令指针)的内容压入堆栈;将控制转移给过程的具体操作是:将目标过程入口相对于CAL
8、L指令的相对位移量(-32K32K)加到指令指针IP中去。例11-1就是如此。请同学们解释其调用和返回过程,南开大学 朱耀庭,11.2 过程调用,2段内间接调用格式:CALL OPRD 功能:其中OPRD是16位通用寄存器或字存储器操作数。执行该指令调用时,首先保护返回地址,将返回地址的偏移部分压入堆栈;然后将控制转移给过程。保护返回地址的具体操作是:SP减2,并将IP的内容压入堆栈。将控制转移的具体操作是:从CALL指令中指定的16位通用寄存器或字存储器中获得目标过程的入口地址(位移量),并用此地址替换IP的内容。例如:CALL WORD PTRBX CALL WORD_VARLABEL_N
9、AME CALL WORD PTRBX+SI+2 CALL WORD PTRDI CALL WORD_VARLABEL_NAMEBPSI CALL BX,南开大学 朱耀庭,2.过程的说明,例11-2段内间接调用实例一 题目:输入1、2、3分别对应输出R、G、B,输入其他符号则结束设计思路:设计3个过程pr、pg、pb分别输出R、G、B字符。主程序根据输入1、2、3分别用BX指向对应过程入口,通过段内间接调用实现过程调用,例11-2段内间接调用实例一,程序说明:过程pr、pg、pb均为近过程,因此调用时仅需修改IP实现调用。需要注意的是过程的调用方法。上述代码注释部分分别将几个过程入口地址的IP
10、值送入寄存器BX中,通过语句call bx调用对应过程,属于段内间接调用。,南开大学 朱耀庭,2.过程的说明,例11-3段内间接调用实例二题目:同例11-2设计思路:与例11-2不同的是定义表table,其中3个字分别存放过程pr、pg和pb的位移。主程序通过输入的数字n,计算(n-1)*2,从table中得到该位移,然后调用对应的过程,例11-3 段内间接调用实例二,程序说明:与例11-2不同的是通过内存间接寻址调用过程,南开大学 朱耀庭,11.2 过程调用,3段间直接调用格式:CALL PROCNAME 功能:其中PROCNAME是已经定义的远过程名。执行CALL指令调用时,CALL指令的
11、功能是首先保护返回地址,然后将控制转移给远过程。保护返回地址的具体操作是:SP减2,将CS的内容压入堆栈;然后SP减2,将IP的内容压入堆栈。目标过程为FAR类型的过程,段间直接调用属于远调用,因此,将控制转移给远过程的具体操作是:将被调用过程所在段的段基址送入CS中,将被调用过程相对于其所在段的位移量送入IP中,以实现控制转移。,南开大学 朱耀庭,2.过程的说明,例11-4段间直接调用实例题目:主程序从键盘读入一个字符,如果是小写字母转化为大写字母输出,不是小写字母直接输出。然后再输入下一字符继续上述工作,直到输入回车结束设计思路:与例11-1不同的是主程序和它所调用的过程分别放在不同的代码
12、段,而不是在同一个代码段,例11-4 段间直接调用实例,程序说明:本例中UPPERCASE过程与调用它的主过程不在同一个代码段中,分别处于CODE1和CODE2段。所以UPPERCASE过程使用了FAR关键字定义为远过程,这样在不同的代码段就可以直接调用该过程,南开大学 朱耀庭,11.2 过程调用,4段间间接调用格式:CALL OPRD 功能:其中OPRD是双字存储器操作数。执行该指令调用时,首先保护返回地址,即把返回地址的段基址和偏移地址分别压入堆栈保存,然后将控制转移给远过程。保护返回地址的具体操作是:SP减2,将CS的内容压入堆栈,然后SP减2,将IP的内容压入堆栈。将控制转移的具体操作
13、是:把双字存储器操作数的低字送入IP中,把双字存储器操作数的高字送入CS中,从而实现远转移。段间间接调用只能通过双字存储器进行,而不能通过寄存器进行。例如:CALL DWORD PTRBX CALL DWORD_VARLABEL_NAMESI CALL DWORD_VARLABEL_NAME,南开大学 朱耀庭,2.过程的说明,例11-5段间间接调用实例。题目:同例11-2和例11-3。设计思路:与例11-3不同的仅仅是主程序与它所调用的过程不在同一个代码段,例11-5 段间间接调用实例,程序说明:本例与例11-3的功能类似,主要区别在于子过程与主过程不在同一代码段,所以过程定义需要使用FAR关
14、键字,属于段间间接调用,南开大学 朱耀庭,11.3 过程的返回,过程调用时调用者将控制转移给过程,当过程执行完后,过程又会将控制返回给调用者,从调用过程的那个位置的下一条指令继续执行,实现“过程返回”。在一个过程中至少有一个RET(返回)指令被执行到。RET指令为过程的出口点,从此处返回调用过程的位置。格式:RET或 RET n其中n 是在弹出返回地址后,从堆栈中删除字节的个数。功能:过程的返回和调用在功能上是互逆的。所以过程的返回也分为远返回和近返回。返回指令在堆栈操作方面是调用指令的逆过程。,南开大学 朱耀庭,11.3 过程的返回,具体操作如下:(1)近返回:RET指令将SP所指向的栈顶字
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言程序设计 汇编语言 程序设计 第十一 过程
链接地址:https://www.31ppt.com/p-6527961.html