#include <stdio.h>
#define SQUARE(X) X*X
int main(void)
{
00861080 push ebp
00861081 mov ebp,esp
00861083 push ecx
int num = 20;
00861084 mov dword ptr [num],14h
// 정상적 결과 출력
printf("Square of num: %d\n", SQUARE(num));
0086108B mov eax,dword ptr [num]
0086108E imul eax,dword ptr [num]
00861092 push eax
00861093 push 863088h
00861098 call printf (0861040h)
0086109D add esp,8
printf("Square of num: %d\n", SQUARE(-5));
008610A0 push 19h
008610A2 push 863074h
008610A7 call printf (0861040h)
printf("Square of num: %g\n", SQUARE(2.5));
008610AC movsd xmm0,mmword ptr [__real@4019000000000000 (0862100h)]
008610B4 movsd mmword ptr [esp],xmm0
008610B9 push 863060h
008610BE call printf (0861040h)
008610C3 add esp,0Ch
return 0;
008610C6 xor eax,eax
}
008610C8 mov esp,ebp
008610CA pop ebp
008610CB ret
#include <stdio.h>
#define SQUARE(X) X*X
int main(void)
{
01001080 push ebp
01001081 mov ebp,esp
01001083 push ecx
int num = 20;
01001084 mov dword ptr [num],14h
// 정상적 결과 출력
printf("Square of num: %d\n", SQUARE(num));
0100108B mov eax,dword ptr [num]
0100108E imul eax,dword ptr [num]
01001092 push eax
01001093 push 10030B4h
01001098 call printf (01001040h)
0100109D add esp,8
printf("Square of -5: %d\n", SQUARE(-5));
010010A0 push 19h
010010A2 push 10030A0h
010010A7 call printf (01001040h)
printf("Square of 2.5: %g\n", SQUARE(2.5));
010010AC movsd xmm0,mmword ptr [__real@4019000000000000 (01002100h)]
010010B4 movsd mmword ptr [esp],xmm0
010010B9 push 100308Ch
010010BE call printf (01001040h)
010010C3 add esp,0Ch
// 비정상적 결과 출력
printf("Square of 3+2: %d\n", SQUARE(3+2));
010010C6 push 0Bh
010010C8 push 1003078h
010010CD call printf (01001040h)
010010D2 add esp,8
// 위의 비정상적 결과 출력 해결책
printf("Square of (3+2): %d\n", SQUARE((3 + 2)));
010010D5 push 19h
010010D7 push 1003060h
010010DC call printf (01001040h)
010010E1 add esp,8
return 0;
010010E4 xor eax,eax
}
010010E6 mov esp,ebp
010010E8 pop ebp
010010E9 ret
#include <stdio.h>
#define PI 3.14
#define PROUCT(x, y) ((x)*(y))
#define CIRCLE_AREA(R) (PROUCT((R), (R)) * PI)
int main(void)
{
00BD1080 push ebp
00BD1081 mov ebp,esp
00BD1083 sub esp,8
double rad = 2.1;
00BD1086 movsd xmm0,mmword ptr [__real@4000cccccccccccd (0BD2100h)]
00BD108E movsd mmword ptr [rad],xmm0
printf("반지름 %g인 원의 넓이: %g\n", rad, CIRCLE_AREA(rad));
00BD1093 movsd xmm0,mmword ptr [rad]
00BD1098 mulsd xmm0,mmword ptr [rad]
00BD109D mulsd xmm0,mmword ptr [__real@40091eb851eb851f (0BD2108h)]
00BD10A5 sub esp,8
00BD10A8 movsd mmword ptr [esp],xmm0
00BD10AD sub esp,8
00BD10B0 movsd xmm0,mmword ptr [rad]
00BD10B5 movsd mmword ptr [esp],xmm0
00BD10BA push 0BD3060h
00BD10BF call printf (0BD1040h)
00BD10C4 add esp,14h
return 0;
00BD10C7 xor eax,eax
}
00BD10C9 mov esp,ebp
00BD10CB pop ebp
00BD10CC ret
#include <stdio.h>
#define HIT_NUM 7
int main(void)
{
00C21000 push ebp
00C21001 mov ebp,esp
#if HIT_NUM == 5
puts("매크로 상수 HIT_NUM은 현재 5 입니다");
#elif HIT_NUM == 6
puts("매크로 상수 HIT_NUM은 현재 6 입니다");
#elif HIT_NUM == 7
puts("매크로 상수 HIT_NUM은 현재 7 입니다");
00C21003 push 0C23060h
00C21008 call dword ptr [__imp__puts (0C220B0h)]
00C2100E add esp,4
#else
puts("매크로 상수 HIT_NUM은 5, 6, 7은 확실히 아닙니다");
#endif
return 0;
00C21011 xor eax,eax
}
00C21013 pop ebp
00C21014 ret
'IT공부 > IT서적' 카테고리의 다른 글
[뇌를 자극하는 윈도우즈 시스템 프로그래밍] 12장. 쓰레드의 생성과 소멸 (0) | 2025.02.13 |
---|---|
[윤성우 열혈 C프로그래밍] 릴리즈 빌드(최적화 컴파일러 OFF), 어셈블리 코드 - Chapter25 (0) | 2025.02.12 |
[윤성우 열혈 C프로그래밍] 매크로 # 연산자(P572 ~ P575) (0) | 2025.02.11 |
[윤성우 열혈 C프로그래밍] 어셈블리 코드 - Chapter22, Chapter23 (0) | 2025.02.09 |
[뇌를 자극하는 윈도우즈 시스템 프로그래밍] 11장. 쓰레드의 이해 (0) | 2025.02.04 |