BITS 32 ; External Function Labels extern ??Strings_Initialize extern ??Strings_DeInitialize extern ??Strings_Set@U32 extern ??Strings_Append@StringMem extern ??Base_Print extern ??Strings_Set@StringMem extern ??Strings_Append@U32 extern ??Strings_Append SECTION .text ;Function Main(UProcInt @ArgumentCount, String *@Arguments) Format C, Returns Nothing; ALIGN 16 ?Main: %define ?FUNCTIONPARAM0 8 ; @ArgumentCount - 32bit %define ?FUNCTIONPARAM1 12 ; @Arguments - 32bit ;VarLocal UProcInt @q; %define ?LOCAL_VARMOD0 4 ; 32bit ;VarLocal String @@LocalTempString; %define ?LOCAL_VARMOD1 16 ; SizeOf(String) = 12 ; Local variable setup %define ?LOCAL_VAR_SIZE 16 push ebp mov ebp, esp sub esp, ?LOCAL_VAR_SIZE ; Initialize Local Objects ; @@LocalTempString lea eax, [ebp - ?LOCAL_VARMOD1] push eax ; Push &@@LocalTempString call [??Strings_Initialize@Inline] add esp, 4 ;Call Strings.Set@UProcInt(@@LocalTempString, @ArgumentCount); mov eax, [ebp + ?FUNCTIONPARAM0] lea edx, [ebp - ?LOCAL_VARMOD1] push eax ; Push @ArgumentCount push edx ; Push @@LocalTempString push 10 ; Hidden parameter, for base 10 call [??Strings_Set@U32] add esp, 12 ;Call Strings.Append@StringMem(@@LocalTempString, @@Const_String0); mov eax, [?CONSTANT_String0] lea edx, [ebp - ?LOCAL_VARMOD1] push eax ; Push @@Const_String0 push edx ; Push @@LocalTempString call [??Strings_Append@StringMem] add esp, 8 ;Call Base.Print(@@LocalTempString); lea eax, [ebp - ?LOCAL_VARMOD1] push eax ; Push @@LocalTempString call [??Base_Print] add esp, 4 ;Move @q, 0; mov DWORD [ebp - ?LOCAL_VARMOD0], 0 ;@@Label_Main_0: .l0: ;Compare @q, @ArgumentCount; mov eax, [ebp + ?FUNCTIONPARAM0] mov edx, [ebp - ?LOCAL_VARMOD0] cmp edx, eax ;JumpIf NB, @@Label_Main_1; jnb NEAR .l1 ;Call Strings.Set@StringMem(@@LocalTempString, @@Const_String1); mov eax, [?CONSTANT_String1] lea edx, [ebp - ?LOCAL_VARMOD1] push eax ; push @@Const_String1 push edx ; push @@LocalTempString call [??Strings_Set@StringMem] add esp, 8 ;Call Strings.Append@UProcInt(@@LocalTempString, @q); mov eax, [ebp - ?LOCAL_VARMOD0] lea edx, [ebp - ?LOCAL_VARMOD1] push eax ; Push @@q push edx ; Push @@LocalTempString push 10 ; Hidden parameter, for base 10 call [??Strings_Append@U32] add esp, 8 ;Call Strings.Append@StringMem(@@LocalTempString, @@Const_String2); mov eax, [?CONSTANT_String2] lea edx, [ebp - ?LOCAL_VARMOD1] push eax ; Push @@Const_String2 push edx ; Push @@LocalTempString call [??Strings_Append@StringMem] add esp, 8 ;Call Strings.Append(@@LocalTempString, @Arguments[@q]); mov eax, [ebp - ?LOCAL_VARMOD0] mov eax, [ebp + (eax * 4) + ?FUNCTIONPARAM1] ; @Arguments[@q] lea edx, [ebp - ?LOCAL_VARMOD1] push eax ; Push @Arguments[@q] push edx ; Push @@LocalTempString call [??Strings_Append] add esp, 8 ;Call Strings.Append@StringMem(@@LocalTempString, @@Const_String3); mov eax, [?CONSTANT_String3] lea edx, [ebp - ?LOCAL_VARMOD1] push eax ; Push @@Const_String3 push edx ; Push @@LocalTempString call [??Strings_Append@StringMem] add esp, 8 ;Call Base.Print(@@LocalTempString); lea eax, [ebp - ?LOCAL_VARMOD1] push eax ; Push @@LocalTempString call [??Base_Print] add esp, 8 ;Inc @q; inc DWORD [ebp - ?LOCAL_VARMOD0] ;Jump @@Label_Main_0; jmp .l0 ;@@Label_MainFunc_1: .l1: ;EndFunction; ; DeInitialize Local Objects ; @@LocalTempString lea eax, [ebp - ?LOCAL_VARMOD1] push eax ; Push &@@LocalTempString call [??Strings_DeInitialize@Inline] add esp, 4 ; Exit the function mov esp, ebp pop ebp ret .endfunc SECTION .data ?CONSTANT_String0 dd 19 db ' arguments found.', 13, 10 ?CONSTANT_String1 dd 10 db 'Argument #' ?CONSTANT_String2 dd 2 db ': ' ?CONSTANT_String3 dd 2 db 13, 10