;*********************************************************************
TITLE 使用函数声明交换两个整数
;*********************************************************************
;*********************************************************************
;程序运行平台说明
.386
.MODEL FLAT,STDCALL
OPTION CASEMAP:NONE
;*********************************************************************
;*********************************************************************
;文件包含
INCLUDE Irvine32.inc
;*********************************************************************
;*********************************************************************
;数据段定义
.DATA
arrayTmp DWORD 1110H,2012H
arrayLength DWORD ($-arrayTmp)/TYPE DWORD
;*********************************************************************
;*********************************************************************
;函数声明
SwapInteger PROTO,pVal:PTR DWORD
;*********************************************************************
;*********************************************************************
;代码段定义
.CODE
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;函数描述:交换arrayTmp中的前两个数字
;函数参数:pVal,要交换数组的首地址
SwapInteger proc uses edx,pVal:PTR DWORD
mov esi,pVal;
mov edx,[esi];
xchg edx,[esi+4];
mov [esi],edx
ret 8
SwapInteger endp
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
main proc
invoke SwapInteger ,offset arrayTmp
mov esi,offset arrayTmp;
mov eax,[esi];
call WriteHex
call Crlf
mov eax,[esi+4]
call WriteHex
exit
main endp
end main
;*********************************************************************
这里要注意的是函数的声明是独立出来的,不在代码段当中,或者说他是和代码段地位平等的
还有就是利用invoke 调用的函数如果定义在调用之前,则可以不使用PROTO,但如果是调用在前,定义在后,则必须使用PROTO来进行函数声明,这是和高级语言一样的