http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=215&sca=10b0


# include <stdio.h>


void GuGuDan(int param1, int param2);

int main(void) {

int minV = 0x0;

int maxV = 0x0;

char* sPrompt = "%d %d";

__asm {

LEA EDI, DWORD PTR[maxV];

PUSH EDI; // &maxV;

LEA EDI, DWORD PTR[minV];

PUSH EDI; // &minV;

PUSH DWORD PTR[sPrompt]; // "%d %d"

CALL DWORD PTR[scanf];

// FUNCTION parameter

PUSH DWORD PTR[maxV];

PUSH DWORD PTR[minV];

// sub function(GuGuDan) call

CALL DWORD PTR[GuGuDan];


// stack 정리

ADD ESP, 0x8 


POP EBX;

POP EBX;

POP EBX;

}

return 0;

}

void GuGuDan(int param1, int param2) {

char* sData = "%d x %d = %d\n";

int Gu_ = 0x0;

int d1  = 0x1;

int r = 0xA;

//printf("param1 => %d\n", param1);

//printf("param2 => %d\n", param2);

__asm {

MOV ECX, 0xA;

L:

MOV EAX, dword ptr[param1]; // EAX = param1

MUL dword ptr[d1]; // EAX *= d1

PUSH EAX; // (EAX)

PUSH dword ptr[d1]; // (d1, EAX)

PUSH dword ptr[param1]; // (param1, d1, EAX)

PUSH dword ptr[sData]; // ("%d x %d = %d\n", param1, d1, EAX)

CALL dword ptr[printf];

// printf("%d x %d = %d\n", param1, d1, EAX)

ADD ESP, 0X10; // 스택 정리

// d1 increament

ADD dword ptr[d1], 0x1;

MOV EAX, dword ptr[r];

DEC EAX;

MOV dword ptr[r], EAX;

MOV ECX, dword ptr[r];

loop L;

}

Gu_ = 0x0;

d1 = 0x1;

r = 0xA;

__asm {

MOV ECX, 0xA;

L1:

MOV EAX, dword ptr[param2]; // EAX = param1

MUL dword ptr[d1]; // EAX *= d1

PUSH EAX; // (EAX)

PUSH dword ptr[d1]; // (d1, EAX)

PUSH dword ptr[param2]; // (param1, d1, EAX)

PUSH dword ptr[sData]; // ("%d x %d = %d\n", param1, d1, EAX)

CALL dword ptr[printf];

// printf("%d x %d = %d\n", param1, d1, EAX)

ADD ESP, 0X10; // 스택 정리

   // d1 increament

ADD dword ptr[d1], 0x1;

MOV EAX, dword ptr[r];

DEC EAX;

MOV dword ptr[r], EAX;

MOV ECX, dword ptr[r];

loop L1;

}

} // end of GuGuDan function 



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

xor  (0) 2018.06.14
어셈블리 (push / pop)  (0) 2018.06.14
2018_05_30_01  (0) 2018.05.29
오늘 공부한 내용 날림 나 혼자 보려고 끄적인 것  (0) 2018.01.22
네이버 풀이  (0) 2017.12.22