函数定义:
TITLE Add and Subtract
; This program adds and subtracts 32-bit integers.
; Last update: 06/01/2006
.386
.model flat, stdcall
.stack 4096
INCLUDE Irvine32.inc
TAB = 9
.code
Rand1 PROC
mov ecx, 2
L1:
call Random32
call WriteDec
mov al, TAB
call WriteChar
loop L1
ret ;必须有ret
Rand1 ENDP
Rand2 PROC
mov ecx, 2
L1:
mov eax, 100
call RandomRange
sub eax, 50
call WriteInt
mov al, TAB
call WriteChar
loop L1
Rand2 ENDP
main PROC
call Randomize
call Rand1
call Rand2
INVOKE ExitProcess, 0
main ENDP
END main
USES操作符:
.code
main PROC
mov eax, 10h
call fun1
INVOKE ExitProcess, 0
main ENDP
fun1 PROC USES eax ebx
call DumpRegs
ret
fun1 ENDP
在生成的PE文件中,fun1的开头有push eax push ebx 结尾有pop ebx pop eax
3个输入整数的相加
TITLE Add and Subtract
; This program adds and subtracts 32-bit integers.
; Last update: 06/01/2006
.386
.model flat, stdcall
.stack 4096
INCLUDE Irvine32.inc
TAB = 9
.data
aName BYTE "Lincoln",0
nameSize = ($-aName) - 1
INTEGER_COUNT = 3
str1 BYTE "enter a :", 0
str2 BYTE "The sum is:", 0
array DWORD INTEGER_COUNT DUP(?)
.code
main PROC
call Clrscr
mov esi, OFFSET array
mov ecx, INTEGER_COUNT
call PromptForIntegers
call ArraySum
call DisplaySum
INVOKE ExitProcess, 0
main ENDP
PromptForIntegers PROC USES ecx edx esi
mov edx, OFFSET str1
L1:
call WriteString
call ReadInt
call Crlf
mov [esi], eax
add esi, TYPE DWORD
loop L1
ret
PromptForIntegers ENDP
ArraySum PROC USES esi ecx
mov eax, 0
L1:
add eax, [esi]
add esi, TYPE DWORD
loop L1
ret
ArraySum ENDP
DisplaySum PROC USES edx
mov edx, OFFSET str2
call WriteString
call WriteInt
call Crlf
ret
DisplaySum ENDP
END main
TITLE Add and Subtract
; This program adds and subtracts 32-bit integers.
; Last update: 06/01/2006
.386
.model flat, stdcall
.stack 4096
INCLUDE Irvine32.inc
.data
data1 dword 10h
data2 dword 20h
.code
addTwo PROC USES ebx ecx,
pval1:DWORD,
pval2:DWORD
LOCAL pval3:DWORD
mov pval3, 12h
mov eax, pval1
add eax, pval2
add eax, pval3
ret
addTwo ENDP
main PROC
push data1
push data2
call addTwo
call WriteDec
push 0
call ExitProcess
main ENDP
END main
先设置本地参数,后push 需要保存的寄存器,访问局部变量的时候,同样是用ebp作为基址寄存器
local 定义数组
LOCAL pt[10]:BYTE