http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=1040101&docId=286482105


# include <stdio.h>


__declspec(naked) void main(void)

{

int sData;

int sumValue;

char* result;

char* s;

__asm

{ // stack prolog +++++++++++++++++++++++++++++++++++++

push ebp;

mov ebp, esp;

sub esp, 40h;

}

sData = 0; // esp += 4

result = "sum result :  %d\n";

s = "%d";

sumValue = 0;

__asm

{ // stack body +++++++++++++++++++++++++++++++++++++++

lea edi, sData; // 

push edi; // ( ,&sData);

push s; // ("%d", &sData);

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

pop ebx;

pop ebx;


mov eax, sData;

mov ecx, eax;

L:// Label ++++++++++++++++++++++++++++++++++++++++++++

mov eax, ecx;

xor edx, edx; /* real import */

mov ebx, 2;

div ebx;

cmp edx, 0;

JZ jmpZero;

JNZ jmpNotZero;

jmpZero:

mov eax, ecx;

add sumValue, eax;

jmp EndPoint;

jmpNotZero:

jmp EndPoint;

EndPoint:


loop L;


push sumValue; // ( ,sumValue);

push result; // ("sum result :  ",sumValue);

call dword ptr[printf]; // printf("sum result :  ",sumValue);

}

__asm

{ // stack epilog +++++++++++++++++++++++++++++++++++++

mov esp, ebp;

pop ebp;

retn;

}

}

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

이중 포인터 어셈블리 접근 방식  (0) 2017.10.22
인라이 어셈블리  (0) 2017.10.15
제곱 어셈블리  (0) 2017.10.13
어셈블리 함수 공부 중  (0) 2017.09.28
배열 어셈블리  (0) 2017.09.28