📄 params.asm
字号:
TITLE Procedure Parameter Examples (Params.asm)
; Demonstration of the PROC, PROTO, and INVOKE directives.
; Last update: 07/21/01
INCLUDE Irvine32.inc
Sub1 PROTO someData:WORD
Sub2 PROTO dataPtr:PTR WORD
ArraySum PROTO,
ptrArray:PTR DWORD,
szArray:DWORD
AddThree PROTO,
val1:DWORD,
val2:DWORD,
val3:DWORD
FillArray PROTO,
pArray:PTR BYTE
.data
myData WORD 1000h
theSum DWORD ?
bArray BYTE 30 dup(0)
wArray WORD 30 dup(0)
dArray DWORD 10000h,20000h,30000h,40000h,50000h
.code
main PROC
INVOKE Sub2, ADDR myData ; pass by reference
INVOKE Sub2, ADDR dArray ; wrong type of pointer!
INVOKE Sub1, myData ; pass by value
; Pass variables as input parameters:
INVOKE ArraySum,
ADDR dArray, ; addr of the array
LENGTHOF dArray ; size of the array
mov theSum,eax ; returned in EAX
call WriteHex ; display the sum
call Crlf
; Pass registers as input parameters:
mov ecx,OFFSET dArray
mov esi,LENGTHOF dArray
INVOKE ArraySum,ecx,esi
; Demonstrate various parameter types:
INVOKE FillArray, ADDR bArray ; preferred
INVOKE FillArray, OFFSET bArray ; also works
INVOKE ExitProcess,0
main ENDP
;-----------------------------------------------------
; In a PROC definition, the USES clause must be on
; the same line as PROC. The parameter list can be on
; one or more separate lines, as long as there is a
; comma at the end of the first line:
;-----------------------------------------------------
;-----------------------------------------------------
ArraySum PROC USES esi ecx,
ptrArray:PTR DWORD, ; points to the array
szArray:DWORD ; array size
;
; Calculates the sum of an array of 32-bit integers.
; Returns: EAX = sum of the array elements
;-----------------------------------------------------
mov esi,ptrArray ; address of the array
mov ecx,szArray ; size of the array
mov eax,0 ; set the sum to zero
AS1:
add eax,[esi] ; add each integer to sum
add esi,4 ; point to next integer
loop AS1 ; repeat for array size
ret ; sum is in EAX
ArraySum ENDP
Sub1 PROC someData:WORD
mov someData,0
ret
Sub1 ENDP
Sub2 PROC dataPtr:PTR WORD
lea eax,dataPtr ; address of stack parameter
;mov eax,OFFSET dataPtr ; intentional error
mov esi,dataPtr ; address of the array
mov WORD PTR[esi],0 ; dereference, assign zero
ret
Sub2 ENDP
AddThree PROC val1:DWORD, val2:DWORD, val3:DWORD
ret
AddThree ENDP
FillArray PROC,
pArray:PTR BYTE
ret
FillArray ENDP
ShowArray PROC,
pArray:NEAR32
ret
ShowArray ENDP
Display PROC USES ecx edx,
pBuffer:PTR BYTE
LOCAL fileHandle:DWORD
ret
Display ENDP
END main
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -