Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
P
pcc004
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Nayoung Kim
pcc004
Commits
dd1c0907
Commit
dd1c0907
authored
3 years ago
by
Nayoung Kim
Browse files
Options
Downloads
Patches
Plain Diff
update lec09
parent
34a44afb
No related branches found
No related tags found
No related merge requests found
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
README.md
+187
-0
187 additions, 0 deletions
README.md
with
187 additions
and
0 deletions
README.md
+
187
−
0
View file @
dd1c0907
...
@@ -1328,3 +1328,190 @@ int main()
...
@@ -1328,3 +1328,190 @@ int main()
paster(9); // output : token9 = 9
paster(9); // output : token9 = 9
}
}
```
```
### Macro Definition (2)
* Multiple lines
* 여러 줄 define 하고 싶을 때
`
``
#define NUMBERS 1,
\
2,
\
3
int x[] = { NUMBERS };
//int x[] = {1,2,3};
```
* Define Where?
```
foo = X;
#define X 4
bar = X; // foo = X and bar = 4
#define TABLESIZE BUFSIZE
#define BUFSIZE 1024
// TABLESIZE == BUFSIZE ==1024
#define BUFSIZE 1020
#define TABLESIZE BUFSIZE
#undef BUFSIZE
#define BUFSIZE 37 // TABLESIZE = 37
```
### Macro Definition (3) - Function like Macro
* if문 보다 성능이 좋음
```
#define min (X, Y) ((X) < (Y) ? (X) : (Y))
x = min(a,b); -> ((a) < (b) ? (a) : (b));
y = min(1,2); -> ((1) < (2) ? (1) : (2));
z = min(a + 28,
*p) -> z = ((a+28) < (*
p) ? (a+28) : (
*
p));
```
### Macro Definition (4) - Stringization and concat
* Stringization
* Parameter leading with #
```
#define str(s) #s
#define foo 4
str(foo) // "foo"
```
* Concatenation
```
#define COMMAND(name) { #name, name##_command }
COMMAND(quit) // { "quit", quit_command }
```
### Macro Definition (5) - Variadic
* #define eprintf(...) fprintf (stedrr, __VA_ARGS__)
```
eprintf ("%s:%d: ", input_file, lineno)
-> fprintf (stderr, "%s:%d: ", input_file, lineno)
#define eprintf(format, ...) fprintf (stderr, format __VA_OPT__(,) __VA_ARGS__)
```
## **Lecture 09**
### Linux Command
1. cc -g
* gdb에게 제공하는 정보를 바이너리에 삽입
* -g 옵션을 사용하지 않고 gdb로 디버깅하면 역어셈블리 코드에서 어셈블리 코드로만 디버깅 가능
2. cc -pg
* 프로파일을 위한 코드 삽입
* -pg 옵션으로 컴파일 → gmon.out(프로파일 정보) → gprof로 gmon.out 파일 분석
### gdb Command
* 실행파일과 소스파일이 같은 디렉토리에 있어야 제대로 동작
1. gdb (실행파일)
* 시작 명령
2. run
* 프로그램 실행
3. break (line or *address)
* 정지 명령
* break n : n번째 라인에서 정지 (정지점 생성)
* break Add : Add가 포함된 라인에서 정지 (정지점 생성)
4. clear
* 정지점 삭제
* clear n : n번째 라인 정지점 삭제
5. delete breakpoints
* 정지점 모두 지움
6. step
* 현재 라인 수행 후 정지
* 함수 호출 시 함수 안으로 들어감
* step n : step 명령 n번 수행
7. next
* 현재 라인 수행 후 정지
* 함수 호출 시 함수 다음 라인으로 넘어감
* next n : next 명령 n번 실행
8. print
* 주소나 변수 등을 출력
9. list
* 소스 파일 내용 출력
* list a, b : a ~ b번째 라인의 소스 출력
10. continue
* 다음 정지점까지 코드 실행
11. watch
* 해당 변수에 watchpoint를 설정하여 변수가 바뀔 때마다 현재 값을 출력함
12. info reg
* 특정 레지스터의 정보 출력
13. set
* 특정 메모리 혹은 레지스터에 값을 지정
14. finish
* 현재 함수를 수행하고 빠져나감
15. Quit (q)
* 종료 명령
### CPU
* ALU (Arithmetic / Logic Unit)
* CU (Control Unit)
### 고정소수점 관련 코드
* 부동소수점 대신 고정소수점을 사용하는 이유
* 부동소수점은 컴퓨터에 따라 연산에 많은 에너지를 필요로 함
* S32_31 => signed long long
* S16_15 => signed int
* S8_7 => signed short
* S4_3 => signed character
```
#include <stdio.h>
// #### #### #### #### . #### #### #### ####
// S 15 . 16
#define FX_Q_NUM 16
#define FX_2_MINUS_16 1.52587890625e-05F
#define FX_2_PLUS_16 (1<<16)
#define FX_S_15_16 11516
#define FX_SYSTEM FX_S_15_16
typedef int fixed32;
fixed32 fromFloat(float fa)
{
return (fixed32) (fa
*
FX_2_PLUS_16);
}
float toFloat(fixed32 xa)
{
return ((float) (xa))
*
FX_2_MINUS_16;
}
fixed32 fxAdd(fixed32 a, fixed32 b)
{
return fromFloat(toFloat(a)+toFloat(b));
}
fixed32 fxAdd2(fixed32 a, fixed32 b)
{
return a+b;
}
int main()
{
int i = 0;
int ia, ib, ic, ic2;
float fa;
fscanf(stdin, "%d %d", &ia,
&ib);
for (i = 0; i < 64
*256*
256
*256; i+=(256*
256)){
ic = fxAdd(i, i);
ic2 = fxAdd2(i, i);
fprintf(stdout, "%f + %f : %f, %f diff = %d
\n
", toFloat(i), toFloat(i), toFloat(ic), toFloat(ic2), ic-ic2);
}
fprintf(stdout, "%d + %d : %d \n", ia, ib, ic);
}
```
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment