分类: WINDOWS
2007-10-24 14:04:53
例二:设有下列Pascal函数
function PasFunc(i,j,k:integer):integer; | ||
begin |
||
PasFunc:=i+j+k; | ||
end; |
以及语句
m:=PasFunc(2,n,m) |
设过程类型为FAR,整数integer占4个字节,则等价的汇编语言代码如下(适用于80386及以上CPU)。
(1) 函数PasFunc
PasFunc_rtn |
equ 20[ebp] | |
PasFunc_i |
equ 16[ebp] | |
PasFunc_j |
equ 12[ebp] | |
PasFunc_k |
equ 8[ebp] | |
PasFunc proc far | ||
push ebp | ||
mov ebp,esp | ||
push eax | ||
mov eax,PasFunc_i | ||
add eax,PasFunc_j | ||
add eax,PasFunc_k | ||
mov PasFunc_rtn,eax | ||
pop eax | ||
pop ebp | ||
ret 12 | ||
PasFunc endp |
(2) 语句m:=PasFunc(2,n,m);
push eax |
;预留返回结果的堆栈空间 | ||
mov eax,2 |
|||
push eax |
|||
push n |
;n、m为DD定义的变量 | ||
push m |
|||
call PasFunc |
|||
pop eax |
;取返回结果 |
参考:PB(编程语言为POWERSCRIPT)中的三种参数传递方式:
(1) 值传递(By Value):传递给函数的参数是原变量的一个拷贝,在函数体内对函数的修改之影响参数本身,不影响原变量的值。。如声明函数byvalue(integer age) return(null)的参数age采用默认的值传递方式。
(2) 址传递(By Reference):这种传递方式是将原变量的指针传递给函数或事件,在函数或事件中对该参数的修改事实上是对原变量的修改。如声明函数byreference(ref integer age) return(null)的参数age采用址传递方法。
(3) 只读传递(Read Only):在函数或事件中可以访问到原变量,原变量当作常量,对原变量的任何修改都是不允许的。只读传递对于某些数据类型的变量来说,可以提高系统的性能,因为在参数传递过程中,系统并不创建原变量的拷贝。这些变量类型为:string、blob、datetime、date和time。如声明函数byreadonly(readonly integer age) return(null)的参数age采用只读传递方法。