继续上此的多模块创建...
INVOKE与PROTO伪指令隐藏了大量的细节,程序的书写格式发生了不少变化。但是有一点,无论是ENTERN创建的还是INVOKE PROTO创建的,经过编译连接后生成的机器码是一样的..
(_prompt.asm模块):
TITLE Prompt For Integers (_prompt.asm)
INCLUDE Irvine32.inc
.code
;----------------------------------------------------
PromptForIntegers PROC,
ptrPrompt:PTR BYTE, ; PROC指令的参数1,相当于传统伪指令中的ptrPrompt EQU [ebp+8]
ptrArray:PTR DWORD, ; PROC指令的参数2,相当于传统伪指令中的ptrArray EQU [ebp+12]
arraySize:DWORD ; PROC指令的参数3,相当于传统伪指令中的arraySize EQU [ebp+16]
; 提示用户输入三个整数,调用ReadInt读取输入返回到eax中,
; 然后把值插入到数组中.
; 参数:
; 紧跟在PROC指令后面
; (PROC指令的参数也就是本过程的参数,在参数与PROC指令间不能有间断,而且要注意PROC指令的书写存在逗号)
; PROC指令也为局部变量分配堆栈空间并在使用结束后释放此堆栈空间,相当于enter与leave指令
; 返回值:无
;-----------------------------------------------------
pushad ; 8个通用寄存器入栈
mov ecx,arraySize ; ecx表示数组的大小,这里同时是循环计数