#include <stdio.h>

#include <Windows.h>

#include <time.h>

#include <stdlib.h>

#define L 10

typedef struct _arry

{

DWORD Mat[10]; // DWORD == INT

DWORD MinValue;

DWORD MaxValue;

}arry, *ptrArry;

ptrArry createNode();

void __init__(arry** param);

void __dataPrintf__(arry** param);

void __maxValue__(arry** param);

int main(void)

{

ptrArry mNode = NULL;

__asm CALL dword ptr[createNode];

__asm MOV mNode, eax; // mNode = eax

__asm LEA eax, dword ptr[mNode];

__asm PUSH eax; // &mNode;

__asm CALL dword ptr[__init__];

__asm POP ebx;


// << srand((unsigned)time(NULL)); >>

__asm PUSH 0; // ( 0)

__asm CALL dword ptr[time]; // time(0)

__asm POP ebx;

__asm PUSH eax;

__asm CALL dword ptr[srand];

__asm POP ebx;

for (int i = 0; i < L; i++)

{

mNode->Mat[i] = rand() % 10;

}

/*

__asm MOV ecx, 10;

__asm L:

__asm Loop L;

*/


// << __dataPrintf__ (&mNode) >>

__asm LEA edi, mNode;

__asm PUSH edi;

__asm CALL dword ptr[__dataPrintf__];

__asm POP ebx;


// << __maxValue__ (&mNode) >> 

__asm LEA edi, mNode;

__asm PUSH edi;

__asm CALL  dword ptr[__maxValue__];

__asm POP ebx;

// 

return 0;

} // end of main function 

ptrArry createNode()

{

ptrArry node = (ptrArry)malloc(sizeof(arry));

return node;

} // end of creatNode function 

void __init__(arry** param)

{

if ((*param) == NULL) { exit(1); }

else

{ // (* param) != NULL

__asm MOV eax, 0;

__asm MOV edi, param; // 

__asm MOV edi, [edi]; // 

__asm MOV ecx, 12;

__asm REP stosd;

}

for (int i = 0; i < L; i++)

{

printf("%d ", (** param).Mat[i]);

}

printf("\n");

} // end of __init__ function 

void __dataPrintf__(arry** param)

{

for (int i = 0; i < L; i++)

{

printf("%d ", (** param).Mat[i]);

}

printf("\n");

} // end of __dataPrintf__ function 

void __maxValue__(arry** param)

{

int v1 = 0;

__asm{

MOV edi, param;

MOV edi, [edi];

MOV eax, [edi];

MOV ecx, 10;

L1:

CMP eax, [edi];

JL JumpLess;

JGE JumpGreatEqual;

JumpLess:

MOV eax, [edi];

JMP JumpEnd;

JumpGreatEqual:

JMP JumpEnd;

JumpEnd:

ADD edi, 4h;

LOOP L1;

MOV [edi], ebx;

//MOV v1, eax

}

printf("max => %d\n", v1);

} // end of __maxValue__ function