《汇编语言程序设计》第十一章:过程

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
其中PARA可以是一个过程名、间接寻址的寄存器或者是内存地址。 过程调用分为两种类型:近过程调用(NEAR)和远过程(FAR)调用。汇
编程序产生哪一种类型的CALL指令,取决于程序员所定义的过程名 是NEAR类型还是FAR类型。 近过程调用是指过程调用代码段和过程定义代码段位于同一代码段。 当CALL指令产生一个近过程调用时,它把该指令之后的下一条指令 地址压栈,即把返回地址的偏移量(16位)压栈,以供过程定义中的 RET(返回指令)能将控制转回到CALL的下一条指令。
www.tup.com.cn
南开大学 朱耀庭
2. 过程的说明
编写过程的重要一环就是书写过程的说明信息,这样可以 让不熟悉该过程的用户仍能正确快速地使用。
过程的说明信息一般包括过程名称、功能、入口出口参数 等。
更详细的说明还包括存储单元、所用寄存器、作者、编写 时间等内容
www.tup.com.cn
汇编语言程序设计
-------朱耀庭
---------朱耀庭
www.tup.com.cn
第11章 过程
在编写程序时,常常发现在若干不同的点上都需要一个特 定的指令序列,如果把这个指令序列插到程序中的每一个 需要点上,必然会使程序的规模大大增加。程序员可以利 用过程编程方法解决这个问题。将某个反复在程序中出现 的程序片段设计成过程,缩短程序长度,节约存储空间。 将某个具有通用性的程序片段设计成过程,实现许多程序 共享,可以大大减少程序设计的工作量。另外,当某个程 序片段的功能相对独立时,也可以把它设计成过程,这样 便于模块化、调试和修改。
www.tup.com.cn
南开大学 朱耀庭
11.2 过程调用
类似地,当过程调用代码段和过程定义代码段不在同一代 码段时,则CALL指令会产生一个远过程调用。不同的是, 当CALL指令产生远过程调用时,不仅要把该指令之后的 地址压栈,即把返回地址的偏移量压栈,而且也要把其段 寄存器CS的值压栈。
www.tup.com.cn
南开大学 朱耀庭
11.2 过程调用
1.段内直接调用 格式:CALL PROCNAME 功能:其中PROCNAME是已经定义的近过程名。执行
CALL指令调用时,首先保护返回地址,即将返回地址压 栈,返回地址就是CALL指令所在位置的下一条指令的地 址;保护好返回地址后将控制转移给过程。保护返回地址 的具体操作是:SP(堆栈栈顶指针)减2,并将IP(指令指针) 的内容压入堆栈;将控制转移给过程的具体操作是:将目 标过程入口相对于CALL指令的相对位移量(-32K~+32K) 加到指令指针IP中去。 例11-1就是如此。请同学们解释其调用和返回过程
例11-1 过程说明实例
程序说明:主程序也可以不定义为过程,这时必须 以INT 21H的4CH号功能调用结束
www.tup.com.cn
南开大学 朱耀庭
11.2 过程调用
过程一经定义,在程序中每一个需要这一指令序列的位置都可以使用 这个过程,对一个过程的使用称作“过程调用”。过程调用需要使用 CALL指令。CALL指令的用法如下: CALL PARA
不同形式的CALL指令允许从指令中获得目标过程的入口 地址(直接CALL),或从指令指定的存储单元或寄存器中 获得目标过程的入口地址(间接CALL)。在保存断点进栈 操作以前,处理器自动地修改IP或CS与IP以使它指向要执 行的下一条指令。
具体格式与JMP指令相似,也有4种格式:段内直接调用、 段内间接调用、段间直接调用、段间间接调用

;
RET
PROCNAME ENDP
其中:PROCNAME是PROC和ENDP伪指令前面必须有 的同一个过程的名称。在一个过程定义中,ENDP前面的 过程名一定要和PROC前面的过程名一致,并且必须是合 法的标识符。
www.tup.com.cn
南开大学 朱耀庭
1. 过程的定义
伪指令PROC和ENDP必须成对出现,表示过程的开始和 结束。
本章详细论述过程的定义,过程的调用方法,并通过大量 的实例进行说明。
www.tup.com.cn
南开大学 朱耀庭
第11章 过程
11.1过程的定义与说明 11.2 过程调用 11.3 过程的返回 11.4 模块间的调用和转移 11.5寄存器的保护和恢复 11.6调用程序与被调用过程之间的数据传送 11.7 递归 11.8 C语言调用汇编过程
www.tup.com.cn
南开大学 朱耀庭
11.1 过程的定义与说明
1
过程的定义
2
过程的说明
www.tup.com.cn
南开大学 朱耀庭
1. 过程的定义
过程也称作子程序。将这一特定的指令序列编成一个过程 的方法,称作“过程定义”。用一对伪指令PROC/EБайду номын сангаасDP
PROCNAME PROC [NEAR/FAR
过程可以被指定为NEAR或FAR类型。如果没有指定,就 认为是NEAR类型。如果一个过程要被别的程序跨段调用, 就应将该过程说明为FAR类型。如果一个过程定义时被指 明为NEAR类型或使用缺省类型说明,那么该过程仅能被 本过程所在段的程序所调用。
在一个过程中至少有一个RET返回指令。RET指令为过程 的出口点,过程由该点结束本次过程调用,返回到调用者 调用该过程的下一条指令继续程序的执行。
南开大学 朱耀庭
2. 过程的说明
例11-1 过程说明实例。 题目:主程序从键盘读入一个字符,如果是小写字母转化
为大写字母输出,不是小写字母则直接输出。然后再继续 下一个读入和转换,直到遇到输入为回车符结束。用户在 程序运行时可以输入不同字符验证其正确性。 设计思路:主程序用过程形式开始,以RET返回。主程序 输入的非回车符调用过程UPPERCASE转换为大写字母后 送入AL中返回并输出,如果输入回车符则结束。
www.tup.com.cn
南开大学 朱耀庭
11.2 过程调用
2 格式:CALL OPRD 功能:其中OPRD是16位通用寄存器或字存储器操作数。
执行该指令调用时,首先保护返回地址,将返回地址的偏 移部分压入堆栈;然后将控制转移给过程。保护返回地址 的具体操作是:SP减2,并将IP的内容压入堆栈。将控制 转移的具体操作是:从CALL指令中指定的16位通用寄存 器或字存储器中获得目标过程的入口地址(位移量),并用 此地址替换IP的内容。 例如:
相关文档
最新文档