mov ecx, 13 push esi ;Pushes ESI Value which is FFFFFFFF because it hasnt been used. xor esi, esi ;XOR ESI, ESI : Zeros ESI label1: mov edx, 13000 add edx, ecx mov temp, edx push ecx push esi ;Pushes ESIs value which is ZERO invoke CreateWindowEx, NULL, ADDR ChildClassName, NULL,\ WS_CHILDWINDOW + WS_VISIBLE,\ CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,\ hwnd, [temp], hInstance, NULL pop esi ;POPs ESI, noting ESI value has not been changed from above func, ESI = 0 mov [ChildIDsArray+esi], eax add esi, 4 ; Adds 4 to ESI.. ?? why, this is in your LOOP and is poped 2 lines down pop ecx loop label1 pop esi ; ESI is POPed thus leaving us with an ESI value of FFFFFFFF... restores esi to unused state.