어셈블리어 이제 막 시작해서그러는데 해석좀도와주실분잇나요..

어려워의 이미지

죄송합니다... 힘드시겠지만 간략하게라도부탁좀 드리겠습니다..

include listing.inc
if @Version gt 510
.model FLAT
else
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT ENDS
_DATA SEGMENT DWORD USE32 PUBLIC 'DATA'
_DATA ENDS
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST ENDS
_BSS SEGMENT DWORD USE32 PUBLIC 'BSS'
_BSS ENDS
$$SYMBOLS SEGMENT BYTE USE32 'DEBSYM'
$$SYMBOLS ENDS
$$TYPES SEGMENT BYTE USE32 'DEBTYP'
$$TYPES ENDS
_TLS SEGMENT DWORD USE32 PUBLIC 'TLS'
_TLS ENDS
; COMDAT ??_C@_08NHLA@Color?5F0?$AA@
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST ENDS
; COMDAT ??_C@_03KE@cls?$AA@
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST ENDS
; COMDAT ??_C@_0CC@OBAF@?$FL?$LG?K?G?G?G?O?$LB?b?$LA?T?$MA?S?$FN?7LEVEL?5?$CFd?6?A?$KB?$LM?v?5?3?5?$CF@
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST ENDS
; COMDAT ??_C@_0BL@BLGJ@?$KE?$LB?$KE?$LB?$KE?$LB?$KE?$LB?$KE?$LB?$KE?$LB?$KE?$LB?$KE?$LB?$KE?$LB?$KE?$LB?$KE?$LB?$KE?$LB?$KE?$LB?$AA@
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST ENDS
; COMDAT ??_C@_02DPEG@?$KE?$LH?$AA@
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST ENDS
; COMDAT ??_C@_02GKGI@?$KE?$LF?$AA@
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST ENDS
; COMDAT ??_C@_02FFKG@?$KD?$MA?$AA@
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST ENDS
; COMDAT ??_C@_01FFOF@?$AH?$AA@
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST ENDS
; COMDAT ??_C@_0BL@MHHF@mode?5con?3?5cols?$DN26?5lines?$DN25?$AA@
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST ENDS
; COMDAT ??_C@_08EBNG@Color?50A?$AA@
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST ENDS
; COMDAT ??_C@_0P@HFHA@?$FL?$LG?K?G?G?G?O?$LB?b?$LA?T?$MA?S?$FN?$AA@
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST ENDS
; COMDAT ??_C@_0M@PFJF@1?3?5?$LA?T?$MA?S?$LN?C?$MA?$NL?$AA@
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST ENDS
; COMDAT ??_C@_0L@OKO@2?3?5?5?$LA?$KB?$MA?L?$LF?e?$AA@
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST ENDS
; COMDAT ??_C@_0L@KMKH@3?3?5?5?$LD?$KB?$LD?$LL?$LB?b?$AA@
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST ENDS
; COMDAT ??_C@_01FCOA@?5?$AA@
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST ENDS
; COMDAT ??_C@_08FAEJ@LEVEL?5?$CFd?$AA@
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST ENDS
; COMDAT ??_C@_08BEDD@Color?50F?$AA@
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST ENDS
; COMDAT ??_C@_0L@LHHN@?$LA?T?$MA?S?5?$LP?$MA?$LJ?v?6?$AA@
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST ENDS
; COMDAT ??_C@_09FGIL@?$LH?$LJ?$LK?$KH?5?3?5?$CFd?$AA@
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST ENDS
; COMDAT ??_C@_09KHPM@?A?$KB?$LM?v?5?3?5?$CFd?$AA@
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST ENDS
; COMDAT ??_C@_0M@LHGC@1?3?5?$LI?$NO?$MA?N?$LI?$NO?$LE?$LK?$AA@
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST ENDS
; COMDAT ??_C@_09HJAN@2?3?5?$LD?$KB?$LD?$LL?$LB?b?$AA@
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST ENDS
; COMDAT ??_C@_06MFEK@?A?$LG?$MA?$NL?$LJ?$PN?$AA@
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST ENDS
; COMDAT ??_C@_0BG@CNMI@?$MA?L?$LF?$LP?5?5?5?3?5?A?B?0?$LP?l?5?H?$KN?$LL?l?G?$KF?$AA@
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST ENDS
; COMDAT ??_C@_0BF@KJM@?$LK?N?$LN?$LK?E?M?5?3?5?$LO?F?$LH?$KB?5?H?$KN?$LL?l?G?$KF?$AA@
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST ENDS
; COMDAT ??_C@_0M@IBAL@1?3?5?$LF?$LJ?$LO?F?$LA?$KB?$LB?b?$AA@
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST ENDS
; COMDAT ??8@YAHABU_GUID@@0@Z
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT ENDS
; COMDAT ?gotoxy@@YAXHH@Z
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT ENDS
; COMDAT ?IsKeyDown@@YAHH@Z
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT ENDS
; COMDAT ?game@@YAHH@Z
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT ENDS
; COMDAT _main
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT ENDS
FLAT GROUP _DATA, CONST, _BSS
ASSUME CS: FLAT, DS: FLAT, SS: FLAT
endif
PUBLIC ?score@@3HA ; score
PUBLIC ?choose@@3DA ; choose
_BSS SEGMENT
?score@@3HA DD 01H DUP (?) ; score
?choose@@3DA DB 01H DUP (?) ; choose
_BSS ENDS
PUBLIC ?gotoxy@@YAXHH@Z ; gotoxy
EXTRN __chkesp:NEAR
EXTRN __imp__GetStdHandle@4:NEAR
EXTRN __imp__SetConsoleCursorPosition@8:NEAR
; COMDAT ?gotoxy@@YAXHH@Z
_TEXT SEGMENT
_x$ = 8
_y$ = 12
_Pos$ = -4
?gotoxy@@YAXHH@Z PROC NEAR ; gotoxy, COMDAT

; 18 : {

push ebp
mov ebp, esp
sub esp, 68 ; 00000044H
push ebx
push esi
push edi
lea edi, DWORD PTR [ebp-68]
mov ecx, 17 ; 00000011H
mov eax, -858993460 ; ccccccccH
rep stosd

; 19 : COORD Pos = {x, y};

mov ax, WORD PTR _x$[ebp]
mov WORD PTR _Pos$[ebp], ax
mov cx, WORD PTR _y$[ebp]
mov WORD PTR _Pos$[ebp+2], cx

; 20 : SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos);

mov esi, esp
mov edx, DWORD PTR _Pos$[ebp]
push edx
mov edi, esp
push -11 ; fffffff5H
call DWORD PTR __imp__GetStdHandle@4
cmp edi, esp
call __chkesp
push eax
call DWORD PTR __imp__SetConsoleCursorPosition@8
cmp esi, esp
call __chkesp

; 21 : }

pop edi
pop esi
pop ebx
add esp, 68 ; 00000044H
cmp ebp, esp
call __chkesp
mov esp, ebp
pop ebp
ret 0
?gotoxy@@YAXHH@Z ENDP ; gotoxy
_TEXT ENDS
PUBLIC ?IsKeyDown@@YAHH@Z ; IsKeyDown
EXTRN __imp__GetAsyncKeyState@4:NEAR
; COMDAT ?IsKeyDown@@YAHH@Z
_TEXT SEGMENT
_Key$ = 8
?IsKeyDown@@YAHH@Z PROC NEAR ; IsKeyDown, COMDAT

; 24 : {

push ebp
mov ebp, esp
sub esp, 64 ; 00000040H
push ebx
push esi
push edi
lea edi, DWORD PTR [ebp-64]
mov ecx, 16 ; 00000010H
mov eax, -858993460 ; ccccccccH
rep stosd

; 25 : return ((GetAsyncKeyState(Key) & 0x8000) != 0);

mov esi, esp
mov eax, DWORD PTR _Key$[ebp]
push eax
call DWORD PTR __imp__GetAsyncKeyState@4
cmp esi, esp
call __chkesp
movsx eax, ax
and eax, 32768 ; 00008000H
neg eax
sbb eax, eax
neg eax

; 26 : }

pop edi
pop esi
pop ebx
add esp, 64 ; 00000040H
cmp ebp, esp
call __chkesp
mov esp, ebp
pop ebp
ret 0
?IsKeyDown@@YAHH@Z ENDP ; IsKeyDown
_TEXT ENDS
PUBLIC ?game@@YAHH@Z ; game
PUBLIC ??_C@_08NHLA@Color?5F0?$AA@ ; `string'
PUBLIC ??_C@_03KE@cls?$AA@ ; `string'
PUBLIC ??_C@_0CC@OBAF@?$FL?$LG?K?G?G?G?O?$LB?b?$LA?T?$MA?S?$FN?7LEVEL?5?$CFd?6?A?$KB?$LM?v?5?3?5?$CF@ ; `string'
PUBLIC ??_C@_0BL@BLGJ@?$KE?$LB?$KE?$LB?$KE?$LB?$KE?$LB?$KE?$LB?$KE?$LB?$KE?$LB?$KE?$LB?$KE?$LB?$KE?$LB?$KE?$LB?$KE?$LB?$KE?$LB?$AA@ ; `string'
PUBLIC ??_C@_02DPEG@?$KE?$LH?$AA@ ; `string'
PUBLIC ??_C@_02GKGI@?$KE?$LF?$AA@ ; `string'
PUBLIC ??_C@_02FFKG@?$KD?$MA?$AA@ ; `string'
PUBLIC ??_C@_01FFOF@?$AH?$AA@ ; `string'
EXTRN _printf:NEAR
EXTRN _abs:NEAR
EXTRN __imp__Sleep@4:NEAR
EXTRN _rand:NEAR
EXTRN _system:NEAR
EXTRN __imp__SetConsoleTextAttribute@8:NEAR
; COMDAT ??_C@_08NHLA@Color?5F0?$AA@
; File F:\거위\똥_피하기_소스.cpp
CONST SEGMENT
??_C@_08NHLA@Color?5F0?$AA@ DB 'Color F0', 00H ; `string'
CONST ENDS
; COMDAT ??_C@_03KE@cls?$AA@
CONST SEGMENT
??_C@_03KE@cls?$AA@ DB 'cls', 00H ; `string'
CONST ENDS
; COMDAT ??_C@_0CC@OBAF@?$FL?$LG?K?G?G?G?O?$LB?b?$LA?T?$MA?S?$FN?7LEVEL?5?$CFd?6?A?$KB?$LM?v?5?3?5?$CF@
CONST SEGMENT
??_C@_0CC@OBAF@?$FL?$LG?K?G?G?G?O?$LB?b?$LA?T?$MA?S?$FN?7LEVEL?5?$CFd?6?A?$KB?$LM?v?5?3?5?$CF@ DB '['
DB 0b6H, 0cbH, 0c7H, 0c7H, 0c7H, 0cfH, 0b1H, 0e2H, 0b0H, 0d4H, 0c0H
DB 0d3H, ']', 09H, 'LEVEL %d', 0aH, 0c1H, 0a1H, 0bcH, 0f6H, ' : %'
DB 'd', 00H ; `string'
CONST ENDS
; COMDAT ??_C@_0BL@BLGJ@?$KE?$LB?$KE?$LB?$KE?$LB?$KE?$LB?$KE?$LB?$KE?$LB?$KE?$LB?$KE?$LB?$KE?$LB?$KE?$LB?$KE?$LB?$KE?$LB?$KE?$LB?$AA@
CONST SEGMENT
??_C@_0BL@BLGJ@?$KE?$LB?$KE?$LB?$KE?$LB?$KE?$LB?$KE?$LB?$KE?$LB?$KE?$LB?$KE?$LB?$KE?$LB?$KE?$LB?$KE?$LB?$KE?$LB?$KE?$LB?$AA@ DB 0a4H
DB 0b1H, 0a4H, 0b1H, 0a4H, 0b1H, 0a4H, 0b1H, 0a4H, 0b1H, 0a4H, 0b1H
DB 0a4H, 0b1H, 0a4H, 0b1H, 0a4H, 0b1H, 0a4H, 0b1H, 0a4H, 0b1H, 0a4H
DB 0b1H, 0a4H, 0b1H, 00H ; `string'
CONST ENDS
; COMDAT ??_C@_02DPEG@?$KE?$LH?$AA@
CONST SEGMENT
??_C@_02DPEG@?$KE?$LH?$AA@ DB 0a4H, 0b7H, 00H ; `string'
CONST ENDS
; COMDAT ??_C@_02GKGI@?$KE?$LF?$AA@
CONST SEGMENT
??_C@_02GKGI@?$KE?$LF?$AA@ DB 0a4H, 0b5H, 00H ; `string'
CONST ENDS
; COMDAT ??_C@_02FFKG@?$KD?$MA?$AA@
CONST SEGMENT
??_C@_02FFKG@?$KD?$MA?$AA@ DB 0a3H, 0c0H, 00H ; `string'
CONST ENDS
; COMDAT ??_C@_01FFOF@?$AH?$AA@
CONST SEGMENT
??_C@_01FFOF@?$AH?$AA@ DB 07H, 00H ; `string'
CONST ENDS
; COMDAT ?game@@YAHH@Z
_TEXT SEGMENT
_level$ = 8
_ddong$ = -1200
_user$ = -1212
_i$ = -1216
_check$ = -1224
_evade$ = -1228
_speed$ = -1232
_count$ = -1236
_levelup$ = -1240
?game@@YAHH@Z PROC NEAR ; game, COMDAT

; 30 : {

push ebp
mov ebp, esp
sub esp, 1304 ; 00000518H
push ebx
push esi
push edi
lea edi, DWORD PTR [ebp-1304]
mov ecx, 326 ; 00000146H
mov eax, -858993460 ; ccccccccH
rep stosd

; 31 : system("Color F0");

push OFFSET FLAT:??_C@_08NHLA@Color?5F0?$AA@ ; `string'
call _system
add esp, 4

; 32 : struct DDONG ddong[MAX_DDONG], user;
; 33 : int i, key, check = 1, evade = 0;

mov DWORD PTR _check$[ebp], 1
mov DWORD PTR _evade$[ebp], 0

; 34 : int speed = 75 - level * LEVEL_SPEED;

mov eax, DWORD PTR _level$[ebp]
imul eax, 15 ; 0000000fH
mov ecx, 75 ; 0000004bH
sub ecx, eax
mov DWORD PTR _speed$[ebp], ecx

; 35 : int count = 5 + level * LEVEL_COUNT;

mov edx, DWORD PTR _level$[ebp]
imul edx, 3
add edx, 5
mov DWORD PTR _count$[ebp], edx

; 36 : // 레벨업에 필요한 똥개수
; 37 : int levelup = 20 + level * 20;

mov eax, DWORD PTR _level$[ebp]
imul eax, 20 ; 00000014H
add eax, 20 ; 00000014H
mov DWORD PTR _levelup$[ebp], eax

; 38 : // 똥개수 체크. (최대값을 넘지 않도록 조정)
; 39 : if( count >= MAX_DDONG ) count = MAX_DDONG - 1;

cmp DWORD PTR _count$[ebp], 100 ; 00000064H
jl SHORT $L42291
mov DWORD PTR _count$[ebp], 99 ; 00000063H
$L42291:

; 40 : // 스피드 체크. (최소값이 10 보다 작지 않도록 저정)
; 41 : if( speed < 10 ) speed = 10;

cmp DWORD PTR _speed$[ebp], 10 ; 0000000aH
jge SHORT $L42292
mov DWORD PTR _speed$[ebp], 10 ; 0000000aH
$L42292:

; 42 : // 유저 시작 위치.
; 43 : user.x = 12;

mov DWORD PTR _user$[ebp], 12 ; 0000000cH

; 44 : user.y = 19;

mov DWORD PTR _user$[ebp+4], 19 ; 00000013H

; 45 : // 똥 초기화.
; 46 : for(i=0; i

mov DWORD PTR _i$[ebp], 0
jmp SHORT $L42293
$L42294:
mov ecx, DWORD PTR _i$[ebp]
add ecx, 1
mov DWORD PTR _i$[ebp], ecx
$L42293:
mov edx, DWORD PTR _i$[ebp]
cmp edx, DWORD PTR _count$[ebp]
jge SHORT $L42295

; 48 : ddong[i].x = rand() % 24 + 1;

call _rand
cdq
mov ecx, 24 ; 00000018H
idiv ecx
add edx, 1
mov eax, DWORD PTR _i$[ebp]
imul eax, 12 ; 0000000cH
mov DWORD PTR _ddong$[ebp+eax], edx

; 49 : ddong[i].y = 3;

mov ecx, DWORD PTR _i$[ebp]
imul ecx, 12 ; 0000000cH
mov DWORD PTR _ddong$[ebp+ecx+4], 3

; 50 : ddong[i].wait = rand() % 20;

call _rand
cdq
mov ecx, 20 ; 00000014H
idiv ecx
mov eax, DWORD PTR _i$[ebp]
imul eax, 12 ; 0000000cH
mov DWORD PTR _ddong$[ebp+eax+8], edx

; 51 : }

jmp SHORT $L42294
$L42295:

; 52 : // 게임 루프
; 53 : while(check)

cmp DWORD PTR _check$[ebp], 0
je $L42298

; 55 : score ++;

mov ecx, DWORD PTR ?score@@3HA ; score
add ecx, 1
mov DWORD PTR ?score@@3HA, ecx ; score

; 56 : // 스피드에 따른 시연 지연.
; 57 : Sleep(speed);

mov esi, esp
mov edx, DWORD PTR _speed$[ebp]
push edx
call DWORD PTR __imp__Sleep@4
cmp esi, esp
call __chkesp

; 58 : // 화면 지우기.
; 59 : system("cls");

push OFFSET FLAT:??_C@_03KE@cls?$AA@ ; `string'
call _system
add esp, 4

; 60 : // 게임 환경 출력.
; 61 : SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),0xf0);

mov esi, esp
push 240 ; 000000f0H
mov edi, esp
push -11 ; fffffff5H
call DWORD PTR __imp__GetStdHandle@4
cmp edi, esp
call __chkesp
push eax
call DWORD PTR __imp__SetConsoleTextAttribute@8
cmp esi, esp
call __chkesp

; 62 : printf("[똥피하기게임]\tLEVEL %d\n점수 : %d", level,score);

mov eax, DWORD PTR ?score@@3HA ; score
push eax
mov ecx, DWORD PTR _level$[ebp]
push ecx
push OFFSET FLAT:??_C@_0CC@OBAF@?$FL?$LG?K?G?G?G?O?$LB?b?$LA?T?$MA?S?$FN?7LEVEL?5?$CFd?6?A?$KB?$LM?v?5?3?5?$CF@ ; `string'
call _printf
add esp, 12 ; 0000000cH

; 63 : gotoxy(0,user.y+3); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),0x00);

mov edx, DWORD PTR _user$[ebp+4]
add edx, 3
push edx
push 0
call ?gotoxy@@YAXHH@Z ; gotoxy
add esp, 8
mov esi, esp
push 0
mov edi, esp
push -11 ; fffffff5H
call DWORD PTR __imp__GetStdHandle@4
cmp edi, esp
call __chkesp
push eax
call DWORD PTR __imp__SetConsoleTextAttribute@8
cmp esi, esp
call __chkesp

; 64 : printf("ㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁ");

push OFFSET FLAT:??_C@_0BL@BLGJ@?$KE?$LB?$KE?$LB?$KE?$LB?$KE?$LB?$KE?$LB?$KE?$LB?$KE?$LB?$KE?$LB?$KE?$LB?$KE?$LB?$KE?$LB?$KE?$LB?$KE?$LB?$AA@ ; `string'
call _printf
add esp, 4

; 65 : printf("ㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁ");

push OFFSET FLAT:??_C@_0BL@BLGJ@?$KE?$LB?$KE?$LB?$KE?$LB?$KE?$LB?$KE?$LB?$KE?$LB?$KE?$LB?$KE?$LB?$KE?$LB?$KE?$LB?$KE?$LB?$KE?$LB?$KE?$LB?$AA@ ; `string'
call _printf
add esp, 4

; 66 : // 사람 움직임 처리
; 67 : if (IsKeyDown(VK_LEFT))

push 37 ; 00000025H
call ?IsKeyDown@@YAHH@Z ; IsKeyDown
add esp, 4
test eax, eax
je SHORT $L42306

; 69 : if(user.x > 1)

cmp DWORD PTR _user$[ebp], 1
jle SHORT $L42306

; 71 : user.x--;

mov eax, DWORD PTR _user$[ebp]
sub eax, 1
mov DWORD PTR _user$[ebp], eax

; 72 : if(IsKeyDown(VK_DOWN))

push 40 ; 00000028H
call ?IsKeyDown@@YAHH@Z ; IsKeyDown
add esp, 4
test eax, eax
je SHORT $L42306

; 73 : user.x--;

mov ecx, DWORD PTR _user$[ebp]
sub ecx, 1
mov DWORD PTR _user$[ebp], ecx
$L42306:

; 76 : if (IsKeyDown(VK_RIGHT))

push 39 ; 00000027H
call ?IsKeyDown@@YAHH@Z ; IsKeyDown
add esp, 4
test eax, eax
je SHORT $L42309

; 78 : if(user.x <= 23)

cmp DWORD PTR _user$[ebp], 23 ; 00000017H
jg SHORT $L42309

; 80 : user.x++;

mov edx, DWORD PTR _user$[ebp]
add edx, 1
mov DWORD PTR _user$[ebp], edx

; 81 : if(IsKeyDown(VK_DOWN) && user.x <= 22)

push 40 ; 00000028H
call ?IsKeyDown@@YAHH@Z ; IsKeyDown
add esp, 4
test eax, eax
je SHORT $L42309
cmp DWORD PTR _user$[ebp], 22 ; 00000016H
jg SHORT $L42309

; 82 : user.x++;

mov eax, DWORD PTR _user$[ebp]
add eax, 1
mov DWORD PTR _user$[ebp], eax
$L42309:

; 85 : // 사람 출력
; 86 : gotoxy(user.x, user.y);

mov ecx, DWORD PTR _user$[ebp+4]
push ecx
mov edx, DWORD PTR _user$[ebp]
push edx
call ?gotoxy@@YAXHH@Z ; gotoxy
add esp, 8

; 87 : SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),0xf0);

mov esi, esp
push 240 ; 000000f0H
mov edi, esp
push -11 ; fffffff5H
call DWORD PTR __imp__GetStdHandle@4
cmp edi, esp
call __chkesp
push eax
call DWORD PTR __imp__SetConsoleTextAttribute@8
cmp esi, esp
call __chkesp

; 88 : printf("ㅇ");

push OFFSET FLAT:??_C@_02DPEG@?$KE?$LH?$AA@ ; `string'
call _printf
add esp, 4

; 89 : gotoxy(user.x, user.y+1);

mov eax, DWORD PTR _user$[ebp+4]
add eax, 1
push eax
mov ecx, DWORD PTR _user$[ebp]
push ecx
call ?gotoxy@@YAXHH@Z ; gotoxy
add esp, 8

; 90 : printf("ㅅ");

push OFFSET FLAT:??_C@_02GKGI@?$KE?$LF?$AA@ ; `string'
call _printf
add esp, 4

; 91 : gotoxy(user.x, user.y+2);

mov edx, DWORD PTR _user$[ebp+4]
add edx, 2
push edx
mov eax, DWORD PTR _user$[ebp]
push eax
call ?gotoxy@@YAXHH@Z ; gotoxy
add esp, 8

; 92 : printf("ㅅ");

push OFFSET FLAT:??_C@_02GKGI@?$KE?$LF?$AA@ ; `string'
call _printf
add esp, 4

; 93 : // 똥 움직임 처리
; 94 : for(i=0; i

mov DWORD PTR _i$[ebp], 0
jmp SHORT $L42313
$L42314:
mov ecx, DWORD PTR _i$[ebp]
add ecx, 1
mov DWORD PTR _i$[ebp], ecx
$L42313:
mov edx, DWORD PTR _i$[ebp]
cmp edx, DWORD PTR _count$[ebp]
jge $L42315

; 96 : if( ddong[i].wait > 0 )

mov eax, DWORD PTR _i$[ebp]
imul eax, 12 ; 0000000cH
cmp DWORD PTR _ddong$[ebp+eax+8], 0
jle SHORT $L42316

; 98 : // 대기시간 동안 아직 똥을 떨어뜨리지 않는다.
; 99 : ddong[i].wait--;

mov ecx, DWORD PTR _i$[ebp]
imul ecx, 12 ; 0000000cH
mov edx, DWORD PTR _ddong$[ebp+ecx+8]
sub edx, 1
mov eax, DWORD PTR _i$[ebp]
imul eax, 12 ; 0000000cH
mov DWORD PTR _ddong$[ebp+eax+8], edx

; 101 : else

jmp $L42321
$L42316:

; 103 : // 똥을 한칸 아래로 이동한다.
; 104 : ddong[i].y++;

mov ecx, DWORD PTR _i$[ebp]
imul ecx, 12 ; 0000000cH
mov edx, DWORD PTR _ddong$[ebp+ecx+4]
add edx, 1
mov eax, DWORD PTR _i$[ebp]
imul eax, 12 ; 0000000cH
mov DWORD PTR _ddong$[ebp+eax+4], edx

; 105 : // 똥이 최하단에 도착 했을 때 처리.
; 106 : if( ddong[i].y >= 22 )

mov ecx, DWORD PTR _i$[ebp]
imul ecx, 12 ; 0000000cH
cmp DWORD PTR _ddong$[ebp+ecx+4], 22 ; 00000016H
jl SHORT $L42318

; 108 : ddong[i].x = rand() % 24 + 1;

call _rand
cdq
mov ecx, 24 ; 00000018H
idiv ecx
add edx, 1
mov eax, DWORD PTR _i$[ebp]
imul eax, 12 ; 0000000cH
mov DWORD PTR _ddong$[ebp+eax], edx

; 109 : ddong[i].y = 3;

mov ecx, DWORD PTR _i$[ebp]
imul ecx, 12 ; 0000000cH
mov DWORD PTR _ddong$[ebp+ecx+4], 3

; 110 : evade++; // 피한 똥개수 카운트

mov edx, DWORD PTR _evade$[ebp]
add edx, 1
mov DWORD PTR _evade$[ebp], edx
$L42318:

; 112 : // 똥 출력
; 113 : gotoxy(ddong[i].x, ddong[i].y);

mov eax, DWORD PTR _i$[ebp]
imul eax, 12 ; 0000000cH
mov ecx, DWORD PTR _ddong$[ebp+eax+4]
push ecx
mov edx, DWORD PTR _i$[ebp]
imul edx, 12 ; 0000000cH
mov eax, DWORD PTR _ddong$[ebp+edx]
push eax
call ?gotoxy@@YAXHH@Z ; gotoxy
add esp, 8

; 114 : SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),0xf5);

mov esi, esp
push 245 ; 000000f5H
mov edi, esp
push -11 ; fffffff5H
call DWORD PTR __imp__GetStdHandle@4
cmp edi, esp
call __chkesp
push eax
call DWORD PTR __imp__SetConsoleTextAttribute@8
cmp esi, esp
call __chkesp

; 115 : printf("@");

push OFFSET FLAT:??_C@_02FFKG@?$KD?$MA?$AA@ ; `string'
call _printf
add esp, 4

; 116 : // 충돌 체크
; 117 : if( abs(ddong[i].x - user.x) < 2 && ddong[i].y == user.y )

mov ecx, DWORD PTR _i$[ebp]
imul ecx, 12 ; 0000000cH
mov edx, DWORD PTR _ddong$[ebp+ecx]
sub edx, DWORD PTR _user$[ebp]
push edx
call _abs
add esp, 4
cmp eax, 2
jge SHORT $L42321
mov eax, DWORD PTR _i$[ebp]
imul eax, 12 ; 0000000cH
mov ecx, DWORD PTR _ddong$[ebp+eax+4]
cmp ecx, DWORD PTR _user$[ebp+4]
jne SHORT $L42321

; 119 : // 비프음 출력.
; 120 : printf("\a");

push OFFSET FLAT:??_C@_01FFOF@?$AH?$AA@ ; `string'
call _printf
add esp, 4

; 121 : check = 0;

mov DWORD PTR _check$[ebp], 0
$L42321:

; 124 : }

jmp $L42314
$L42315:

; 125 : // 피한 똥개수가 20개면 레벨업.
; 126 : if(evade > levelup)

mov edx, DWORD PTR _evade$[ebp]
cmp edx, DWORD PTR _levelup$[ebp]
jle SHORT $L42323

; 127 : return 1;

mov eax, 1
jmp SHORT $L42280
$L42323:

; 128 : }

jmp $L42295
$L42298:

; 129 : return 2;

mov eax, 2
$L42280:

; 130 : }

pop edi
pop esi
pop ebx
add esp, 1304 ; 00000518H
cmp ebp, esp
call __chkesp
mov esp, ebp
pop ebp
ret 0
?game@@YAHH@Z ENDP ; game
_TEXT ENDS
PUBLIC _main
PUBLIC ??_C@_0BL@MHHF@mode?5con?3?5cols?$DN26?5lines?$DN25?$AA@ ; `string'
PUBLIC ??_C@_08EBNG@Color?50A?$AA@ ; `string'
PUBLIC ??_C@_0P@HFHA@?$FL?$LG?K?G?G?G?O?$LB?b?$LA?T?$MA?S?$FN?$AA@ ; `string'
PUBLIC ??_C@_0M@PFJF@1?3?5?$LA?T?$MA?S?$LN?C?$MA?$NL?$AA@ ; `string'
PUBLIC ??_C@_0L@OKO@2?3?5?5?$LA?$KB?$MA?L?$LF?e?$AA@ ; `string'
PUBLIC ??_C@_0L@KMKH@3?3?5?5?$LD?$KB?$LD?$LL?$LB?b?$AA@ ; `string'
PUBLIC ??_C@_01FCOA@?5?$AA@ ; `string'
PUBLIC ??_C@_08FAEJ@LEVEL?5?$CFd?$AA@ ; `string'
PUBLIC ??_C@_08BEDD@Color?50F?$AA@ ; `string'
PUBLIC ??_C@_0L@LHHN@?$LA?T?$MA?S?5?$LP?$MA?$LJ?v?6?$AA@ ; `string'
PUBLIC ??_C@_09FGIL@?$LH?$LJ?$LK?$KH?5?3?5?$CFd?$AA@ ; `string'
PUBLIC ??_C@_09KHPM@?A?$KB?$LM?v?5?3?5?$CFd?$AA@ ; `string'
PUBLIC ??_C@_0M@LHGC@1?3?5?$LI?$NO?$MA?N?$LI?$NO?$LE?$LK?$AA@ ; `string'
PUBLIC ??_C@_09HJAN@2?3?5?$LD?$KB?$LD?$LL?$LB?b?$AA@ ; `string'
PUBLIC ??_C@_06MFEK@?A?$LG?$MA?$NL?$LJ?$PN?$AA@ ; `string'
PUBLIC ??_C@_0BG@CNMI@?$MA?L?$LF?$LP?5?5?5?3?5?A?B?0?$LP?l?5?H?$KN?$LL?l?G?$KF?$AA@ ; `string'
PUBLIC ??_C@_0BF@KJM@?$LK?N?$LN?$LK?E?M?5?3?5?$LO?F?$LH?$KB?5?H?$KN?$LL?l?G?$KF?$AA@ ; `string'
PUBLIC ??_C@_0M@IBAL@1?3?5?$LF?$LJ?$LO?F?$LA?$KB?$LB?b?$AA@ ; `string'
EXTRN __getch:NEAR
; COMDAT ??_C@_0BL@MHHF@mode?5con?3?5cols?$DN26?5lines?$DN25?$AA@
; File F:\거위\똥_피하기_소스.cpp
CONST SEGMENT
??_C@_0BL@MHHF@mode?5con?3?5cols?$DN26?5lines?$DN25?$AA@ DB 'mode con: co'
DB 'ls=26 lines=25', 00H ; `string'
CONST ENDS
; COMDAT ??_C@_08EBNG@Color?50A?$AA@
CONST SEGMENT
??_C@_08EBNG@Color?50A?$AA@ DB 'Color 0A', 00H ; `string'
CONST ENDS
; COMDAT ??_C@_0P@HFHA@?$FL?$LG?K?G?G?G?O?$LB?b?$LA?T?$MA?S?$FN?$AA@
CONST SEGMENT
??_C@_0P@HFHA@?$FL?$LG?K?G?G?G?O?$LB?b?$LA?T?$MA?S?$FN?$AA@ DB '[', 0b6H, 0cbH
DB 0c7H, 0c7H, 0c7H, 0cfH, 0b1H, 0e2H, 0b0H, 0d4H, 0c0H, 0d3H, ']'
DB 00H ; `string'
CONST ENDS
; COMDAT ??_C@_0M@PFJF@1?3?5?$LA?T?$MA?S?$LN?C?$MA?$NL?$AA@
CONST SEGMENT
??_C@_0M@PFJF@1?3?5?$LA?T?$MA?S?$LN?C?$MA?$NL?$AA@ DB '1: ', 0b0H, 0d4H, 0c0H
DB 0d3H, 0bdH, 0c3H, 0c0H, 0dbH, 00H ; `string'
CONST ENDS
; COMDAT ??_C@_0L@OKO@2?3?5?5?$LA?$KB?$MA?L?$LF?e?$AA@
CONST SEGMENT
??_C@_0L@OKO@2?3?5?5?$LA?$KB?$MA?L?$LF?e?$AA@ DB '2: ', 0b0H, 0a1H, 0c0H
DB 0ccH, 0b5H, 0e5H, 00H ; `string'
CONST ENDS
; COMDAT ??_C@_0L@KMKH@3?3?5?5?$LD?$KB?$LD?$LL?$LB?b?$AA@
CONST SEGMENT
??_C@_0L@KMKH@3?3?5?5?$LD?$KB?$LD?$LL?$LB?b?$AA@ DB '3: ', 0b3H, 0a1H, 0b3H
DB 0bbH, 0b1H, 0e2H, 00H ; `string'
CONST ENDS
; COMDAT ??_C@_01FCOA@?5?$AA@
CONST SEGMENT
??_C@_01FCOA@?5?$AA@ DB ' ', 00H ; `string'
CONST ENDS
; COMDAT ??_C@_08FAEJ@LEVEL?5?$CFd?$AA@
CONST SEGMENT
??_C@_08FAEJ@LEVEL?5?$CFd?$AA@ DB 'LEVEL %d', 00H ; `string'
CONST ENDS
; COMDAT ??_C@_08BEDD@Color?50F?$AA@
CONST SEGMENT
??_C@_08BEDD@Color?50F?$AA@ DB 'Color 0F', 00H ; `string'
CONST ENDS
; COMDAT ??_C@_0L@LHHN@?$LA?T?$MA?S?5?$LP?$MA?$LJ?v?6?$AA@
CONST SEGMENT
??_C@_0L@LHHN@?$LA?T?$MA?S?5?$LP?$MA?$LJ?v?6?$AA@ DB 0b0H, 0d4H, 0c0H, 0d3H
DB ' ', 0bfH, 0c0H, 0b9H, 0f6H, 0aH, 00H ; `string'
CONST ENDS
; COMDAT ??_C@_09FGIL@?$LH?$LJ?$LK?$KH?5?3?5?$CFd?$AA@
CONST SEGMENT
??_C@_09FGIL@?$LH?$LJ?$LK?$KH?5?3?5?$CFd?$AA@ DB 0b7H, 0b9H, 0baH, 0a7H, ' '
DB ': %d', 00H ; `string'
CONST ENDS
; COMDAT ??_C@_09KHPM@?A?$KB?$LM?v?5?3?5?$CFd?$AA@
CONST SEGMENT
??_C@_09KHPM@?A?$KB?$LM?v?5?3?5?$CFd?$AA@ DB 0c1H, 0a1H, 0bcH, 0f6H, ' : '
DB '%d', 00H ; `string'
CONST ENDS
; COMDAT ??_C@_0M@LHGC@1?3?5?$LI?$NO?$MA?N?$LI?$NO?$LE?$LK?$AA@
CONST SEGMENT
??_C@_0M@LHGC@1?3?5?$LI?$NO?$MA?N?$LI?$NO?$LE?$LK?$AA@ DB '1: ', 0b8H, 0deH
DB 0c0H, 0ceH, 0b8H, 0deH, 0b4H, 0baH, 00H ; `string'
CONST ENDS
; COMDAT ??_C@_09HJAN@2?3?5?$LD?$KB?$LD?$LL?$LB?b?$AA@
CONST SEGMENT
??_C@_09HJAN@2?3?5?$LD?$KB?$LD?$LL?$LB?b?$AA@ DB '2: ', 0b3H, 0a1H, 0b3H, 0bbH
DB 0b1H, 0e2H, 00H ; `string'
CONST ENDS
; COMDAT ??_C@_06MFEK@?A?$LG?$MA?$NL?$LJ?$PN?$AA@
CONST SEGMENT
??_C@_06MFEK@?A?$LG?$MA?$NL?$LJ?$PN?$AA@ DB 0c1H, 0b6H, 0c0H, 0dbH, 0b9H, 0fdH
DB 00H ; `string'
CONST ENDS
; COMDAT ??_C@_0BG@CNMI@?$MA?L?$LF?$LP?5?5?5?3?5?A?B?0?$LP?l?5?H?$KN?$LL?l?G?$KF?$AA@
CONST SEGMENT
??_C@_0BG@CNMI@?$MA?L?$LF?$LP?5?5?5?3?5?A?B?0?$LP?l?5?H?$KN?$LL?l?G?$KF?$AA@ DB 0c0H
DB 0ccH, 0b5H, 0bfH, ' : ', 0c1H, 0c2H, ',', 0bfH, 0ecH, ' ', 0c8H
DB 0adH, 0bbH, 0ecH, 0c7H, 0a5H, 00H ; `string'
CONST ENDS
; COMDAT ??_C@_0BF@KJM@?$LK?N?$LN?$LK?E?M?5?3?5?$LO?F?$LH?$KB?5?H?$KN?$LL?l?G?$KF?$AA@
CONST SEGMENT
??_C@_0BF@KJM@?$LK?N?$LN?$LK?E?M?5?3?5?$LO?F?$LH?$KB?5?H?$KN?$LL?l?G?$KF?$AA@ DB 0baH
DB 0ceH, 0bdH, 0baH, 0c5H, 0cdH, ' : ', 0beH, 0c6H, 0b7H, 0a1H, ' '
DB 0c8H, 0adH, 0bbH, 0ecH, 0c7H, 0a5H, 00H ; `string'
CONST ENDS
; COMDAT ??_C@_0M@IBAL@1?3?5?$LF?$LJ?$LO?F?$LA?$KB?$LB?b?$AA@
CONST SEGMENT
??_C@_0M@IBAL@1?3?5?$LF?$LJ?$LO?F?$LA?$KB?$LB?b?$AA@ DB '1: ', 0b5H, 0b9H
DB 0beH, 0c6H, 0b0H, 0a1H, 0b1H, 0e2H, 00H ; `string'
CONST ENDS
; COMDAT _main
_TEXT SEGMENT
_level$ = -4
_main PROC NEAR ; COMDAT

; 133 : {

push ebp
mov ebp, esp
sub esp, 68 ; 00000044H
push ebx
push esi
push edi
lea edi, DWORD PTR [ebp-68]
mov ecx, 17 ; 00000011H
mov eax, -858993460 ; ccccccccH
rep stosd

; 134 : system("mode con: cols=26 lines=25");

push OFFSET FLAT:??_C@_0BL@MHHF@mode?5con?3?5cols?$DN26?5lines?$DN25?$AA@ ; `string'
call _system
add esp, 4

; 135 : int level = 1;

mov DWORD PTR _level$[ebp], 1

; 136 :
; 137 : system("Color 0A");

push OFFSET FLAT:??_C@_08EBNG@Color?50A?$AA@ ; `string'
call _system
add esp, 4

; 138 : gotoxy(6,1);

push 1
push 6
call ?gotoxy@@YAXHH@Z ; gotoxy
add esp, 8

; 139 : printf("[똥피하기게임]");

push OFFSET FLAT:??_C@_0P@HFHA@?$FL?$LG?K?G?G?G?O?$LB?b?$LA?T?$MA?S?$FN?$AA@ ; `string'
call _printf
add esp, 4

; 140 : gotoxy(6,11);

push 11 ; 0000000bH
push 6
call ?gotoxy@@YAXHH@Z ; gotoxy
add esp, 8

; 141 : printf("1: 게임시작");

push OFFSET FLAT:??_C@_0M@PFJF@1?3?5?$LA?T?$MA?S?$LN?C?$MA?$NL?$AA@ ; `string'
call _printf
add esp, 4

; 142 : gotoxy(6,12);

push 12 ; 0000000cH
push 6
call ?gotoxy@@YAXHH@Z ; gotoxy
add esp, 8

; 143 : printf("2: 가이드");

push OFFSET FLAT:??_C@_0L@OKO@2?3?5?5?$LA?$KB?$MA?L?$LF?e?$AA@ ; `string'
call _printf
add esp, 4

; 144 : gotoxy(6,13);

push 13 ; 0000000dH
push 6
call ?gotoxy@@YAXHH@Z ; gotoxy
add esp, 8

; 145 : printf("3: 끝내기");

push OFFSET FLAT:??_C@_0L@KMKH@3?3?5?5?$LD?$KB?$LD?$LL?$LB?b?$AA@ ; `string'
call _printf
add esp, 4

; 146 : gotoxy(0,24);

push 24 ; 00000018H
push 0
call ?gotoxy@@YAXHH@Z ; gotoxy
add esp, 8

; 147 : printf(" ");

push OFFSET FLAT:??_C@_01FCOA@?5?$AA@ ; `string'
call _printf
add esp, 4

; 148 :
; 149 : choose = _getch();

call __getch
mov BYTE PTR ?choose@@3DA, al ; choose

; 150 :
; 151 : if (choose == '1')

movsx eax, BYTE PTR ?choose@@3DA ; choose
cmp eax, 49 ; 00000031H
jne $L42334
$L42336:

; 153 : choose == '0';
; 154 : while(1)

mov ecx, 1
test ecx, ecx
je $L42337

; 156 : // 화면 지우기.
; 157 : system("cls");

push OFFSET FLAT:??_C@_03KE@cls?$AA@ ; `string'
call _system
add esp, 4

; 158 : system("Color 0A");

push OFFSET FLAT:??_C@_08EBNG@Color?50A?$AA@ ; `string'
call _system
add esp, 4

; 159 : // 레벨 표시.
; 160 : gotoxy(6,1); printf("[똥피하기게임]");

push 1
push 6
call ?gotoxy@@YAXHH@Z ; gotoxy
add esp, 8
push OFFSET FLAT:??_C@_0P@HFHA@?$FL?$LG?K?G?G?G?O?$LB?b?$LA?T?$MA?S?$FN?$AA@ ; `string'
call _printf
add esp, 4

; 161 : gotoxy(9,11); printf("LEVEL %d", level);

push 11 ; 0000000bH
push 9
call ?gotoxy@@YAXHH@Z ; gotoxy
add esp, 8
mov edx, DWORD PTR _level$[ebp]
push edx
push OFFSET FLAT:??_C@_08FAEJ@LEVEL?5?$CFd?$AA@ ; `string'
call _printf
add esp, 8

; 162 : // 시간 지연 (1초 = 1000)
; 163 : Sleep(1500);

mov esi, esp
push 1500 ; 000005dcH
call DWORD PTR __imp__Sleep@4
cmp esi, esp
call __chkesp

; 164 : // 게임 시작.
; 165 : if( game(level) == 2 )

mov eax, DWORD PTR _level$[ebp]
push eax
call ?game@@YAHH@Z ; game
add esp, 4
cmp eax, 2
jne $L42339

; 167 : system("cls");

push OFFSET FLAT:??_C@_03KE@cls?$AA@ ; `string'
call _system
add esp, 4

; 168 : gotoxy(8, 5);

push 5
push 8
call ?gotoxy@@YAXHH@Z ; gotoxy
add esp, 8

; 169 : system("Color 0F");

push OFFSET FLAT:??_C@_08BEDD@Color?50F?$AA@ ; `string'
call _system
add esp, 4

; 170 : SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),0x0D);

mov esi, esp
push 13 ; 0000000dH
mov edi, esp
push -11 ; fffffff5H
call DWORD PTR __imp__GetStdHandle@4
cmp edi, esp
call __chkesp
push eax
call DWORD PTR __imp__SetConsoleTextAttribute@8
cmp esi, esp
call __chkesp

; 171 : printf("게임 오버\n");

push OFFSET FLAT:??_C@_0L@LHHN@?$LA?T?$MA?S?5?$LP?$MA?$LJ?v?6?$AA@ ; `string'
call _printf
add esp, 4

; 172 : SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),0x0A);

mov esi, esp
push 10 ; 0000000aH
mov edi, esp
push -11 ; fffffff5H
call DWORD PTR __imp__GetStdHandle@4
cmp edi, esp
call __chkesp
push eax
call DWORD PTR __imp__SetConsoleTextAttribute@8
cmp esi, esp
call __chkesp

; 173 : gotoxy(8, 12);

push 12 ; 0000000cH
push 8
call ?gotoxy@@YAXHH@Z ; gotoxy
add esp, 8

; 174 : printf("레벨 : %d", level);

mov ecx, DWORD PTR _level$[ebp]
push ecx
push OFFSET FLAT:??_C@_09FGIL@?$LH?$LJ?$LK?$KH?5?3?5?$CFd?$AA@ ; `string'
call _printf
add esp, 8

; 175 : gotoxy(8, 13);

push 13 ; 0000000dH
push 8
call ?gotoxy@@YAXHH@Z ; gotoxy
add esp, 8

; 176 : printf("점수 : %d", score);

mov edx, DWORD PTR ?score@@3HA ; score
push edx
push OFFSET FLAT:??_C@_09KHPM@?A?$KB?$LM?v?5?3?5?$CFd?$AA@ ; `string'
call _printf
add esp, 8

; 177 : gotoxy(8, 22);

push 22 ; 00000016H
push 8
call ?gotoxy@@YAXHH@Z ; gotoxy
add esp, 8

; 178 : printf("1: 메인메뉴");

push OFFSET FLAT:??_C@_0M@LHGC@1?3?5?$LI?$NO?$MA?N?$LI?$NO?$LE?$LK?$AA@ ; `string'
call _printf
add esp, 4

; 179 : gotoxy(8, 23);

push 23 ; 00000017H
push 8
call ?gotoxy@@YAXHH@Z ; gotoxy
add esp, 8

; 180 : printf("2: 끝내기");

push OFFSET FLAT:??_C@_09HJAN@2?3?5?$LD?$KB?$LD?$LL?$LB?b?$AA@ ; `string'
call _printf
add esp, 4

; 181 : gotoxy(0, 24);

push 24 ; 00000018H
push 0
call ?gotoxy@@YAXHH@Z ; gotoxy
add esp, 8

; 182 : printf(" ");

push OFFSET FLAT:??_C@_01FCOA@?5?$AA@ ; `string'
call _printf
add esp, 4
$L42348:

; 186 : choose = _getch();

call __getch
mov BYTE PTR ?choose@@3DA, al ; choose

; 187 : if (choose == '1')

movsx eax, BYTE PTR ?choose@@3DA ; choose
cmp eax, 49 ; 00000031H
jne SHORT $L42351

; 188 : main();

call _main
$L42351:

; 189 : if (choose == '2')

movsx ecx, BYTE PTR ?choose@@3DA ; choose
cmp ecx, 50 ; 00000032H
jne SHORT $L42352

; 190 : break;

jmp SHORT $L42350
$L42352:

; 191 : } while(1);

mov edx, 1
test edx, edx
jne SHORT $L42348
$L42350:

; 192 : break;

jmp SHORT $L42337
$L42339:

; 195 : level++;

mov eax, DWORD PTR _level$[ebp]
add eax, 1
mov DWORD PTR _level$[ebp], eax

; 196 : }

jmp $L42336
$L42337:

; 198 : else if (choose == '2')

jmp $L42363
$L42334:
movsx ecx, BYTE PTR ?choose@@3DA ; choose
cmp ecx, 50 ; 00000032H
jne $L42355

; 200 : choose = '0';

mov BYTE PTR ?choose@@3DA, 48 ; choose, 00000030H

; 201 : system("cls");

push OFFSET FLAT:??_C@_03KE@cls?$AA@ ; `string'
call _system
add esp, 4

; 202 : system("Color 0A");

push OFFSET FLAT:??_C@_08EBNG@Color?50A?$AA@ ; `string'
call _system
add esp, 4

; 203 : gotoxy(6,1);

push 1
push 6
call ?gotoxy@@YAXHH@Z ; gotoxy
add esp, 8

; 204 : printf("[똥피하기게임]");

push OFFSET FLAT:??_C@_0P@HFHA@?$FL?$LG?K?G?G?G?O?$LB?b?$LA?T?$MA?S?$FN?$AA@ ; `string'
call _printf
add esp, 4

; 205 : gotoxy(10,8);

push 8
push 10 ; 0000000aH
call ?gotoxy@@YAXHH@Z ; gotoxy
add esp, 8

; 206 : printf("조작법");

push OFFSET FLAT:??_C@_06MFEK@?A?$LG?$MA?$NL?$LJ?$PN?$AA@ ; `string'
call _printf
add esp, 4

; 207 : gotoxy(3,10);

push 10 ; 0000000aH
push 3
call ?gotoxy@@YAXHH@Z ; gotoxy
add esp, 8

; 208 : printf("이동 : 좌,우 화살표");

push OFFSET FLAT:??_C@_0BG@CNMI@?$MA?L?$LF?$LP?5?5?5?3?5?A?B?0?$LP?l?5?H?$KN?$LL?l?G?$KF?$AA@ ; `string'
call _printf
add esp, 4

; 209 : gotoxy(3,11);

push 11 ; 0000000bH
push 3
call ?gotoxy@@YAXHH@Z ; gotoxy
add esp, 8

; 210 : printf("부스터 : 아래 화살표");

push OFFSET FLAT:??_C@_0BF@KJM@?$LK?N?$LN?$LK?E?M?5?3?5?$LO?F?$LH?$KB?5?H?$KN?$LL?l?G?$KF?$AA@ ; `string'
call _printf
add esp, 4

; 211 : gotoxy(8,23);

push 23 ; 00000017H
push 8
call ?gotoxy@@YAXHH@Z ; gotoxy
add esp, 8

; 212 : printf("1: 돌아가기");

push OFFSET FLAT:??_C@_0M@IBAL@1?3?5?$LF?$LJ?$LO?F?$LA?$KB?$LB?b?$AA@ ; `string'
call _printf
add esp, 4

; 213 : gotoxy(0,24);

push 24 ; 00000018H
push 0
call ?gotoxy@@YAXHH@Z ; gotoxy
add esp, 8

; 214 : printf(" ");

push OFFSET FLAT:??_C@_01FCOA@?5?$AA@ ; `string'
call _printf
add esp, 4
$L42361:

; 215 :
; 216 : while(choose != '1')

movsx edx, BYTE PTR ?choose@@3DA ; choose
cmp edx, 49 ; 00000031H
je SHORT $L42362

; 218 : choose = _getch();

call __getch
mov BYTE PTR ?choose@@3DA, al ; choose

; 219 : }

jmp SHORT $L42361
$L42362:

; 220 : main();

call _main
$L42355:
$L42363:

; 224 : }

pop edi
pop esi
pop ebx
add esp, 68 ; 00000044H
cmp ebp, esp
call __chkesp
mov esp, ebp
pop ebp
ret 0
_main ENDP
_TEXT ENDS
END

shint의 이미지


어셈블리를 C로 변환하는 방법도 있습니다.

C코드를 어셈블러로 전환(변경)하는 방법
http://kldp.org/node/153653

C/C++ to Assembly v2
https://assembly.ynh.io/

반대로. 어셈블리를 C로 변환
Example 17: Convert Assembly Code to C
http://www.textmaestro.com/InfoEx_17_Convert_Assembly.htm

MASM 관련해서 찾아보니. 자료와 정리는 많이 있나봅니다.
혼자 하기 어려우시면. 친구나 동료를 카페등에서 구해서 함께 스터디 하시면 편할겁니다.

너무 긴건 어려우니. 한줄 한줄 조금씩 테스트해보시기 바랍니다.

MASM
http://book.naver.com/search/search.nhn?sm=sta_hty.book&sug=&where=nexearch&query=MASM

http://search.naver.com/search.naver?ie=utf8&sm=stp_hty&where=se&query=MASM

http://www.google.co.kr/search?hl=ko&source=hp&biw=&bih=&q=MASM&gbv=2&oq=MASM&gs_l=heirloom-hp.3..0l10.608.1161.0.1523.4.4.0.0.0.0.165.477.1j3.4.0....0...1ac.1.34.heirloom-hp..0.4.476.33R0mCM7qc8

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

체스맨의 이미지

이거는 c 소스에서 어셈으로 변환한 거라서
일단 어셈에 대응하는 c소스가 주석으로 보이니
해석이 훨씬 수월할 겁니다.

소스만으로 해석이 안되면
c소스 디버거로 돌려보면서 한 줄 한 줄
확인해 보시면 됩니다.

혹시 숙제라면 스스로 하시는 게 좋고
숙제가 아니라면 실력을 늘이려고 하시는 것일 테니
스스로 하시는 게 좋습니다.

소스와 디버거 가지고 하다가 막히는
일부 부분만 질답을 활용하시면
효율적으로 스스로 하실 수 있을 겁니다.

Orion Project : http://orionids.org

Rubypops의 이미지

문의 해보심이,,,,,

루비를 공부하고 사랑하는 프로그래머

handrake의 이미지

숙제같군요