下载此文档

汇编子程序设计.ppt


文档分类:中学教育 | 页数:约34页 举报非法文档有奖
1/34
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/34 下载此文档
文档列表 文档介绍
子程序设计
将程序中经常出现或者具有通用性的某一段指令组定义为子程序,可以缩短程序长度,节省内存空间,在80x86汇编程序中,子程序常常以过程的形式出现(过程的定义与调用)。
过程定义
格式: 过程名 PROC [TYPE][USES REG]
┆} 过程体
RET [n n]
过程名 ENDP
TYPE:为过程类型,分为近程NEAR(本段调用)和远程FAR(跨段调用)。
USES REG:规定需要保护的通用寄存器(过程开始入栈,返回之前再出栈恢复)。
定义一个过程名为SUB1的近程过程。
SUBl PROC NEAR
ADD AX,BX
MOV SI,CX
MOV AX,DX
RET
SUB1 ENDP
定义一个过程名为SUB2的远程过程。
SUB2 PROC FAR
MOV BX,AX
MOV CL,3
SHL BX,CL
ADD AX,BX
RET
SUB2 ENDP
调用指令(直接调用和间接调用)

格式:CALL NEAR PTR PROC NAME
功能:①将当前IP/EIP寄存器内容进栈(即保存CALL下一条指令的偏移地址)。
②将过程名为PROC NAME的16位/32位偏移地址和当前IP/EIP值相加后,送IP/EIP寄存器中,采用相对寻址控制程序转移到过程。在16位模式下,转移位移量为-215~+215-1字节内。在32位模式下,转移位移量为-231~+231-1字节内。
CALL SUB1 ;NEAR可以省略。

格式1:CALL NEAR PTR[REG]
格式2:CALL REG
功能:①将当前IP/EIP寄存器内容进栈(即保存CALL的下一条指令的偏移地址)。
②将过程的入口偏移地址送IP/EIP寄存器中,在寄存器寻址方式下,偏移地址在16位或32位REG中。在存储器寻址方式下,间接给出存放在数据段的偏移地址。
CALL NEAR PTR[BX]
CALL EBX

格式:CALL FAR PTR PROC NAME
功能:①将当前CS、IP/EIP寄存器内容进栈(即保存CALL的下一条指令的偏移地址)。
②将过程名为PROC NAME的段基址或段选择符送CS,16位或32位偏移地址送IP/EIP寄存器中。
CALL FAR PTR SUB2

格式:CALL FAR PTR[REG]
功能:①当前CS、IP/EIP寄存器内容进栈(即保存CALL指令下一条指令的偏移地址)。
②指令以存储器间接寻址方式给出过程的偏移地址、段基址或段选择符,将段基址或段选择符和偏移地址取出送CS 及IP/EIP寄存器中。

格式1:RET
格式2:RET OPR ; OPR为偶数
功能:根据过程类型( NEAR、 FAR)确定返回类型。
近程返回是从堆栈弹出调用时保存的偏移地址送IP/EIP。
远程返回是从堆栈弹出调用时保存的偏移地址送IP/EIP,再弹出段基址或段选择符送CS,控制程序返回。
指定OPR的作用:完成RET操作后根据OPR的值修改堆栈指针SP/ESP,用于清除过程调用时入栈的参数。
通过堆栈向过程传送参数
·MODEL SMALL
·STACK 100
·DATA
ONE DW 1234H
TWO DW 5678H
·CODE
·STARTUP
MOV AX,ONE
MOV BX,TWO
PUSH AX ;通过堆栈向过程传送参数
PUSH BX
CALL SUB1
·EXIT
SUB1 PROC NEAR USES BP
MOV BP,SP
MOV AX,[BP+4] ;取出压入堆栈的BX的内容
ADD AX,[BP+6] ;取出压入堆栈的AX的内容
RET 4 ;返回,并清除原入栈BX,AX的内容
SUB1 ENDP
END
堆栈帧指令(为了预留堆栈空间,向过程传递参数)
堆栈帧是通过堆栈存储区间,向过程传递参数的结构。
堆栈帧可以为过程保存局部参数,也可以为多用户环境中的过程提供动态存储器结构。

汇编子程序设计 来自淘豆网m.daumloan.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数34
  • 收藏数0 收藏
  • 顶次数0
  • 上传人mh900965
  • 文件大小245 KB
  • 时间2018-03-09