diff --git a/README.md b/README.md
index b8dcd1dfa28761189f76901fcf492d6d0ccd7d00..aed3aea3b46aafc52eddfc790b071d03e58d517e 100644
--- a/README.md
+++ b/README.md
@@ -371,3 +371,100 @@ int count_one(unsigned int a)
 ```
 
 
+
+
+## lesson08
+
+1. 컴파일과 실행시 순서
+> 1. compile : compile 명령
+> 2. 모든 #으로 이루어진 것들이 숫자로 바뀜 (#define)
+> 3. link assembler : scanf, printf 등과 연결 (내가 쓴 함수들과 붙여줌) 후 실행파일 생성
+>> * link 에는 dynamic 과 static이 있다.
+> 4. loader
+
+2. #if, #ifdef, #ifndef, #elif, #else, #endif
+> * cpp 실행시 실행되는 것이다.
+> * #if로 시작시 #endif로 끝나야 한다.
+> * #ifdef 로 시작시 #endif로 끝나야 한다.
+
+3. #s 사용시 string 으로 만들어 준다.
+> * ex) #define str(s) #s 이고 str(p="foo\n";) 일때 #s 로 인해 "p=\"foo\\n\";" 로 자동으로 바꾸어 준다. 
+
+4. Concatenation 
+> * 파라메터가 여러번 쓰이고 싶을 때나 ##을 사용하여 띄어쓰기 하고 싶지 않을 때 사용한다.
+
+5. optimization을 하다보면 코드 크기가 커진다. 
+
+6. #define
+> * 함수가 호출될 때에는 memory에 stack을 만든다. 따라서 그냥 함수보다는 그냥 코드에 쓰는 것이 성능이 더 좋지만 함수를 여러번 많이 호출하는 상황이 온다면 긴 코드를 여러번 실행하는 것 보다는 함수를 쓰는 것이 더 이득이다.
+> * 위에서 말한듯이 함수를 호출할 때 성능이 더 좋을 때도 있고 안 좋을 때도 있지만 #define을 사용하면 언제나 성능이 제일 좋다. 
+
+7. gcc 컴파일 옵션
+> 1. -c : .o file로 생성해준다. 
+> 2. -g : 디버깅을 하기 위한 옵션
+> 3. -pg : 프로파일을 하기 위한 옵션
+> 4. -O : 최적화 옵션, 있어도 쓰이지 않는 코드 등을 삭제시켜준다.
+
+8. -o 컴파일 옵션 순서
+> 1. cc -c : .o file을 먼저 생성해야 한다.
+> 2. cc -S : 어셈블리파일을 생성한다.
+> 3. cc -o 
+
+9. _ _LINE_ _ & #if 사용 코드
+```c
+#include <stdio.h>
+int add(int *a, int *b, int *c)
+{
+        *c =  *a + *b;
+}
+
+int main()
+{
+        int a = 100;
+        int b = 200;
+        int c = 999;
+        // int * == long long
+
+        fprintf(stdout, "%d : %lld %llx\n", a,(long long) &a,(long long) &a);
+        fprintf(stdout, "%d : %lld %llx\n", b, (long long)&b, (long long)&b);
+        add(&a, &b ,&c);
+        //c = a+b
+        fprintf(stdout, "%s %d : %d\n",__FILE__, __LINE__,c);
+        fprintf(stdout, "%s %d : %d\n",__FILE__, __LINE__,c);
+        fprintf(stdout, "%s %d : %d\n",__FILE__, __LINE__,c);
+#define ERR_DATA 2000
+#if ERR_DATA  > 1000
+#error 1024
+#else
+#warning ERR_DATA
+#endif
+        fprintf(stdout, "%s %d : %d",__FILE__, __LINE__,c);
+}
+```
+
+10. 프로젝트 관련 설명
+ * 과제 목표 : 임베디드 시스템을 위한 고정소수점 수학 라이브러리 개발
+
+ > * 고정소수점의 반대어 : 부동소수점(floating point) 
+ > 1. 부동 소수점 :
+ >> * [signed bit][exponent].[mantissa] 로 이루어짐
+ >> * 계산은 (-2S+1)*1.m*2^(e-127) 로 한다.
+ > 2. 고정 소수점 : 
+ >> * 맨 앞의 수는 signed bit 이다. 
+ >> * .의 위치를 Q_NUM 으로 define 
+ >> * (ex) a(10) = 2342000 일때 23420.00 의 위치에 점이 찍히면 ar = a(10) * 10^(-2) 이다. 
+ * 고정 소수점 코드
+ ```c
+ #include <stdio.h>
+ #include <math.h>
+ #define FX_Q_NUM 16
+ int main()
+ {
+     int ia;
+     float fa;
+     fscanf(stdin, "%d", &ia);
+     fprintf(stdout, "%d : %f %f\n", ia, (float)ia, (float)ia*powf(2.0f, -16));
+     fscanf(stdin, "%f", &fa);
+     fprintf(stdout, "%f : %d %d\n, fa, (int)fa, (int)(fa*powf(2.0f,16)));
+ }
+ ```