# include <stdio.h>


int __FuncAdd__(int nParam_1, int nParam_2)

{

int result = 0;

__asm

{

mov eax, nParam_2;

add eax, nParam_1;

mov result, eax;

}

return result;

}

int __FuncSub__(int nParam_1, int nParam_2)

{

int result = 0;

__asm

{

mov eax, nParam_2;

sub eax, nParam_1;

mov result, eax;

}

return result;

}

int __FuncMul__(int nParam_1, int nParam_2)

{

int result = 0;

__asm

{

mov eax, nParam_2;

mul nParam_1;

mov result, eax;

}

return result;

}

int __FuncDiv__(int nParam_1, int nParam_2)

{

int result = 0;

__asm

{

xor edx, edx;

mov eax, nParam_2;

div nParam_1;

mov result, eax;

}

return result;

}

int main(void)

{

int choice = 0;

int resultValue = 0;

int value_1 = 0;

int value_2 = 0;

char* prompt = "data input : ";

char* pValue_1 = "value_1 input : ";

char* pValue_2 = "value_2 input : ";

char* Input = "%d";

__asm

{

// ----------------------------------------------------------------------------

push pValue_1; // "value_1 input : "

call dword ptr[printf];

pop ebx;

lea edx, value_1; // edx = &value_1

push edx;

push Input; // "%d"

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

 // ----------------------------------------------------------------------------

push pValue_2; // "value_2 input : "

call dword ptr[printf];

pop ebx;

lea edx, value_2; // edx = &value_2

push edx;

push Input; // "%d"

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

 // ----------------------------------------------------------------------------

push prompt; // "data input : "

call dword ptr[printf];

pop ebx;


lea edx, choice; // scanf("%d", &choice)

push edx;

push Input;

call dword ptr[scanf];

push ebx;

push ebx;

// ----------------------------------------------------------------------------

push value_2;

push value_1;

cmp choice, 1;

je add_; // jump equal

jne Re_choice_;  // jump not equal

add_:// if (choice == 1)

call dword ptr[__FuncAdd__]; // int __FuncAdd__(pValue_1, pValue_2)

mov resultValue, eax;

pop ebx;

pop ebx;

jmp E_;

Re_choice_: // else // choice != 1

cmp choice, 2;

je sub_; // if (choice == 2)

jne Re_choice2_; // else // choice != 2

sub_:

call dword ptr[__FuncSub__]; // int __FuncSub__(pValue_1, pValue_2)

mov resultValue, eax;

pop ebx;

pop ebx;

jmp E_;

Re_choice2_:

cmp choice, 3;

je mul_; // if (choice == 3)

jne Re_choice3_; // else // choice != 3

mul_:

call dword ptr[__FuncMul__]; // int __FuncMul__(pValue_1, pValue_2)

mov resultValue, eax;

pop ebx;

pop ebx;

jmp E_;

Re_choice3_:

cmp choice, 4;

je div_; // if (choice == 4)

jne E_;

div_:

call dword ptr[__FuncDiv__];

mov resultValue, eax;

pop ebx;

pop ebx;

jmp E_;

}

E_:

printf("%d \n", resultValue);

return 0;

}



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

어셈블리 계산기(더하기, 빼기, 나누기, 곱하기)  (0) 2017.07.30
hello world  (0) 2017.07.20
nasm  (0) 2017.07.01
어셈블리어_TEST  (0) 2017.06.23
어셈블리 step_3_mov [대충정리 -> 차후 계속 수정]  (0) 2017.06.23