제곱 어셈블리

어셈블리2017. 10. 13. 13:17

# include <stdio.h>


int __pow__(int nParam)

{

__asm

{

mov eax, dword ptr ss : [ebp + 0x8];

mul eax; // eax *= eax

leave;

retn;

}

} // end of __pow__ function 

__declspec(naked) void main(void)

{

int num;

int resultValue;

char* prompt_1;

char* prompt_2;

char* prompt_3;

__asm

{

// [stack prolog ...]

push ebp;

mov ebp, esp; // ebp = esp

sub esp, 38h; // esp -= 38h

}

prompt_2 = "%d"; // esp 이동

prompt_1 = "Integer Input :  "; // esp 이동

prompt_3 = "pow(%d) result =>(%d) \n";

resultValue = 0;

__asm

{

// [stack body ...]

push prompt_1; // ("Integer Input :  ");

call dword ptr[printf]; // printf("Integer Input :  ");

pop ebx;


lea edi, num;

push edi; // (  ,&num)

push prompt_2; // ("%d", &num);

call dword ptr[scanf]; // scanf("%d", &num);

pop ebx;

pop ebx;


push num; // 

call dword ptr[__pow__];

mov resultValue, eax;

pop ebx;


push resultValue; // ( ,  , resultValue);

push num; // ( , num , resultValue);

push prompt_3; // ( "pow(%d) result =>(%d) \n" , num , resultValue);

call dword ptr[printf];

pop ebx;

pop ebx;

pop ebx;

}

__asm

{

// [stack epilog ...]

mov esp, ebp;

pop ebp;

ret;

}

}

'어셈블리' 카테고리의 다른 글

인라이 어셈블리  (0) 2017.10.15
인라인 어셈블리  (0) 2017.10.15
어셈블리 함수 공부 중  (0) 2017.09.28
배열 어셈블리  (0) 2017.09.28
인라인 어셈 함수 인자 전달  (0) 2017.09.27